|
23 | 23 | #include <span> |
24 | 24 |
|
25 | 25 | namespace ex = stdexec; |
26 | | -using stdexec::__tag_invoke::tag_invoke; |
27 | 26 |
|
28 | | -struct sink_receiver { |
29 | | - using is_receiver = void; |
30 | | - |
31 | | - friend void tag_invoke(stdexec::set_value_t, sink_receiver, auto&&...) noexcept { |
32 | | - } |
33 | | - |
34 | | - friend void tag_invoke(stdexec::set_error_t, sink_receiver, auto&&) noexcept { |
35 | | - } |
36 | | - |
37 | | - friend void tag_invoke(stdexec::set_stopped_t, sink_receiver) noexcept { |
38 | | - } |
39 | | - |
40 | | - friend stdexec::empty_env tag_invoke(stdexec::get_env_t, sink_receiver) noexcept { |
41 | | - return {}; |
42 | | - } |
43 | | -}; |
44 | | - |
45 | | -struct empty_environment { }; |
46 | | - |
47 | | -template <class...> |
48 | | -[[deprecated]] void print() { |
49 | | -} |
50 | | - |
51 | | -// unqualified call to tag_invoke: |
52 | 27 | int main() { |
53 | | - const int n = 2 * 1024; |
54 | | - thrust::device_vector<float> input(n, 1.0f); |
55 | | - float* first = thrust::raw_pointer_cast(input.data()); |
56 | | - float* last = thrust::raw_pointer_cast(input.data()) + input.size(); |
57 | | - nvexec::stream_context stream_ctx{}; |
58 | | - auto sched = stream_ctx.get_scheduler(); |
59 | | - |
60 | | - auto snd = ex::just(std::span{first, last}) | nvexec::reduce(42.0f); |
| 28 | + // const int n = 2 * 1024; |
| 29 | + // thrust::device_vector<float> input(n, 1.0f); |
| 30 | + // float* first = thrust::raw_pointer_cast(input.data()); |
| 31 | + // float* last = thrust::raw_pointer_cast(input.data()) + input.size(); |
61 | 32 |
|
62 | | - auto on_snd = ex::on(sched, std::move(snd)); |
63 | | - //::print<stdexec::__detail::__name_of<decltype(on_snd)>>(); |
| 33 | + // nvexec::stream_context stream_ctx{}; |
64 | 34 |
|
65 | | - // recursively transforms the sender using the stream domain |
66 | | - // auto stream_on_snd = nvexec::_strm::stream_domain().transform_sender( |
67 | | - // std::move(on_snd), ex::empty_env()); |
| 35 | + // auto snd = ex::transfer_just(stream_ctx.get_scheduler(), std::span{first, last}) |
| 36 | + // | nvexec::reduce(42.0f); |
68 | 37 |
|
69 | | - // the name of the transformed sender shows that the reduce node |
70 | | - // in the tree was transformed from a basic_sender<> to a nvexec::reduce_::sender_t<> |
71 | | - //::print<stdexec::__detail::__name_of<decltype(stream_on_snd)>>(); |
| 38 | + // auto [result] = stdexec::sync_wait(std::move(snd)).value(); |
72 | 39 |
|
73 | | - //auto [result] = stdexec::sync_wait(std::move(on_snd)).value(); |
| 40 | + // std::cout << "result: " << result << std::endl; |
74 | 41 | } |
0 commit comments