I would like to know how can we do recursion with gpu stream scheduler? I am implementing a stencil code on gpu with the stdexec library, and in the future, I plan to explore more task-based algorithms using sender on gpu. I feel like enabling recursion with gpu stream scheduler will be beneficial. It is an ongoing collaboration project with @brycelelbach, Jeff Larkin, nvhpc premium service, NERSC/Berkeley Lab.
wwei@nid001013:~/src/test-gpu-recursion> nvc++ --version
nvc++ 23.5-0 64-bit target on x86-64 Linux -tp zen3
NVIDIA Compilers and Tools
Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
wwei@nid001013:~/src/test-gpu-recursion> echo $PATH
/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/bin:/opt/cray/pe/mpich/8.1.25/ofi/gnu/9.1/bin:/opt/cray/pe/mpich/8.1.25/bin:/opt/cray/pe/gcc/12.2.0/bin:/global/u2/w/wwei/.vscode-server/bin/97dec172d3256f8ca4bfb2143f3f76b503ca0534/bin/remote-cli:/global/common/software/nersc/bin:/opt/cray/pe/perftools/23.03.0/bin:/opt/cray/pe/papi/7.0.0.1/bin:/opt/cray/pe/craype/2.7.20/bin:/opt/cray/libfabric/1.15.2.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/lib/mit/bin:/opt/cray/pe/bin
wwei@nid001013:~/src/test-gpu-recursion> echo $LD_LIBRARY_PATH
/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/cuda/lib64:/opt/cray/pe/gcc/12.2.0/snos/lib64:/opt/cray/pe/papi/7.0.0.1/lib64:/opt/cray/libfabric/1.15.2.0/lib64
wwei@nid001013:~/src/test-gpu-recursion> nvc++ -Minfo -std=c++20 --experimental-stdpar -stdpar=gpu --gcc-toolchain=/opt/cray/pe/gcc/12.2.0/bin/ factorial_gpu.cpp -o factorial_gpu
"/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/let_xxx.cuh", line 124: error: no instance of function template "stdexec::__connect::connect_t::operator()" matches the argument list
argument types are: (result_sender_t, nvexec::_strm::propagate_receiver_t<nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>>::__t)
object type is: const stdexec::__connect::connect_t
return stdexec::connect(
^
detected during:
instantiation of "void nvexec::_strm::let_xxx::tag_invoke(_Tag, nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<stdexec::__id<nvexec::_strm::sync_wait::sync_wait_t::receiver_t<std::remove_reference<stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__let::let_value_t, lambda [](int)->any_int_sender>, stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda []()->int>, stdexec::__tag_invoke::tag_invoke_result_t<stdexec::__schedule::schedule_t, nvexec::_strm::stream_scheduler &> &>> &>::type>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<std::decay<std::enable_if<true, int>::type>::type>>::__t &&, _As &&...) noexcept [with _Tag=stdexec::__receivers::set_value_t, _As=<int &>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__receivers::set_value_t, _Args=<nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>::__t, int &>]" at line 365 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
instantiation of "void stdexec::__receivers::set_value_t::operator()(_Receiver &&, _As &&...) const noexcept [with _Receiver=nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>::__t, _As=<int &>]" at line 419 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/common.cuh"
instantiation of "void nvexec::_strm::operation_state_base_<OuterReceiverId>::__t::propagate_completion_signal(Tag, As &&...) noexcept [with OuterReceiverId=nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>, Tag=stdexec::__receivers::set_value_t, As=<int &>]" at line 76 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/then.cuh"
instantiation of "void nvexec::_strm::then::tag_invoke(stdexec::__receivers::set_value_t, nvexec::_strm::then::receiver_t<4UL, nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<stdexec::__id<nvexec::_strm::sync_wait::sync_wait_t::receiver_t<std::remove_reference<stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__let::let_value_t, lambda [](int)->any_int_sender>, stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda []()->int>, stdexec::__tag_invoke::tag_invoke_result_t<stdexec::__schedule::schedule_t, nvexec::_strm::stream_scheduler &> &>> &>::type>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<std::decay<std::enable_if<true, int>::type>::type>>::__t::__id, lambda []()->int>::__t &&, As &&...) noexcept [with As=<>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
[ 11 instantiation contexts not shown ]
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::let_xxx::__operation<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t>]" at line 501 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/common.cuh"
instantiation of class "nvexec::_strm::operation_state_<CvrefSenderId, InnerReceiverId, OuterReceiverId>::__t [with CvrefSenderId=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, InnerReceiverId=nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, OuterReceiverId=nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__start::start_t, _Args=<nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t &>]" at line 1224 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t]" at line 138 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/sync_wait.cuh"
instantiation of "auto nvexec::_strm::sync_wait::sync_wait_t::operator()(nvexec::_strm::context_state_t, Sender &&) const->std::optional<nvexec::_strm::sync_wait::sync_wait_result_t<Sender>> [with Sender=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>::__t]" at line 257 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream_context.cuh"
"/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/__detail/__meta.hpp", line 70: error: class "stdexec::__mdefer<stdexec::__q<stdexec::__call_result_>, lambda []()-><error-type>>" has no member "__t"
using __t = typename _T::__t;
^
detected during:
instantiation of type "stdexec::__t<stdexec::__mdefer<stdexec::__q<stdexec::__call_result_>, lambda []()-><error-type>>>" at line 548
instantiation of type "stdexec::__call_result_t<lambda []()-><error-type>>" at line 569
instantiation of class "stdexec::__conv<_Fn> [with _Fn=lambda []()-><error-type>]" at line 128 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/let_xxx.cuh"
instantiation of "void nvexec::_strm::let_xxx::tag_invoke(_Tag, nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<stdexec::__id<nvexec::_strm::sync_wait::sync_wait_t::receiver_t<std::remove_reference<stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__let::let_value_t, lambda [](int)->any_int_sender>, stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda []()->int>, stdexec::__tag_invoke::tag_invoke_result_t<stdexec::__schedule::schedule_t, nvexec::_strm::stream_scheduler &> &>> &>::type>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<std::decay<std::enable_if<true, int>::type>::type>>::__t &&, _As &&...) noexcept [with _Tag=stdexec::__receivers::set_value_t, _As=<int &>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__receivers::set_value_t, _Args=<nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>::__t, int &>]" at line 365 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
[ 14 instantiation contexts not shown ]
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::let_xxx::__operation<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t>]" at line 501 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/common.cuh"
instantiation of class "nvexec::_strm::operation_state_<CvrefSenderId, InnerReceiverId, OuterReceiverId>::__t [with CvrefSenderId=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, InnerReceiverId=nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, OuterReceiverId=nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__start::start_t, _Args=<nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t &>]" at line 1224 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t]" at line 138 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/sync_wait.cuh"
instantiation of "auto nvexec::_strm::sync_wait::sync_wait_t::operator()(nvexec::_strm::context_state_t, Sender &&) const->std::optional<nvexec::_strm::sync_wait::sync_wait_result_t<Sender>> [with Sender=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>::__t]" at line 257 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream_context.cuh"
"/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/let_xxx.cuh", line 122: error: no instance of overloaded function "std::variant<_Types...>::emplace [with _Types=<std::monostate, exec::__any::__operation<exec::__any::__sender<stdexec::completion_signatures<stdexec::__receivers::set_value_t (int), stdexec::__receivers::set_stopped_t (), stdexec::__receivers::set_error_t (std::__exception_ptr::exception_ptr)>, stdexec::__types<>, stdexec::__types<>>::__t, nvexec::_strm::propagate_receiver_t<nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>>::__t, stdexec::__types<>>::__t>]" matches the argument list
argument types are: (stdexec::__conv<lambda []()-><error-type>>)
object type is: std::variant<std::monostate, exec::__any::__operation<exec::__any::__sender<stdexec::completion_signatures<stdexec::__receivers::set_value_t (int), stdexec::__receivers::set_stopped_t (), stdexec::__receivers::set_error_t (std::__exception_ptr::exception_ptr)>, stdexec::__types<>, stdexec::__types<>>::__t, nvexec::_strm::propagate_receiver_t<nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>>::__t, stdexec::__types<>>::__t>
auto& __op = __self.__op_state_->__op_state3_.template emplace<op_state_t>(
^
detected during:
instantiation of "void nvexec::_strm::let_xxx::tag_invoke(_Tag, nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<stdexec::__id<nvexec::_strm::sync_wait::sync_wait_t::receiver_t<std::remove_reference<stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__let::let_value_t, lambda [](int)->any_int_sender>, stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda []()->int>, stdexec::__tag_invoke::tag_invoke_result_t<stdexec::__schedule::schedule_t, nvexec::_strm::stream_scheduler &> &>> &>::type>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<std::decay<std::enable_if<true, int>::type>::type>>::__t &&, _As &&...) noexcept [with _Tag=stdexec::__receivers::set_value_t, _As=<int &>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__receivers::set_value_t, _Args=<nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>::__t, int &>]" at line 365 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
instantiation of "void stdexec::__receivers::set_value_t::operator()(_Receiver &&, _As &&...) const noexcept [with _Receiver=nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>::__t, _As=<int &>]" at line 419 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/common.cuh"
instantiation of "void nvexec::_strm::operation_state_base_<OuterReceiverId>::__t::propagate_completion_signal(Tag, As &&...) noexcept [with OuterReceiverId=nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>, Tag=stdexec::__receivers::set_value_t, As=<int &>]" at line 76 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/then.cuh"
instantiation of "void nvexec::_strm::then::tag_invoke(stdexec::__receivers::set_value_t, nvexec::_strm::then::receiver_t<4UL, nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<stdexec::__id<nvexec::_strm::sync_wait::sync_wait_t::receiver_t<std::remove_reference<stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__let::let_value_t, lambda [](int)->any_int_sender>, stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda []()->int>, stdexec::__tag_invoke::tag_invoke_result_t<stdexec::__schedule::schedule_t, nvexec::_strm::stream_scheduler &> &>> &>::type>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<std::decay<std::enable_if<true, int>::type>::type>>::__t::__id, lambda []()->int>::__t &&, As &&...) noexcept [with As=<>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
[ 11 instantiation contexts not shown ]
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::let_xxx::__operation<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t>]" at line 501 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/common.cuh"
instantiation of class "nvexec::_strm::operation_state_<CvrefSenderId, InnerReceiverId, OuterReceiverId>::__t [with CvrefSenderId=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, InnerReceiverId=nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, OuterReceiverId=nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__start::start_t, _Args=<nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t &>]" at line 1224 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t]" at line 138 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/sync_wait.cuh"
instantiation of "auto nvexec::_strm::sync_wait::sync_wait_t::operator()(nvexec::_strm::context_state_t, Sender &&) const->std::optional<nvexec::_strm::sync_wait::sync_wait_result_t<Sender>> [with Sender=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>::__t]" at line 257 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream_context.cuh"
"/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/let_xxx.cuh", line 129: error: no instance of function template "stdexec::__start::start_t::operator()" matches the argument list
argument types are: (<error-type>)
object type is: const stdexec::__start::start_t
stdexec::start(__op);
^
detected during:
instantiation of "void nvexec::_strm::let_xxx::tag_invoke(_Tag, nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<stdexec::__id<nvexec::_strm::sync_wait::sync_wait_t::receiver_t<std::remove_reference<stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__let::let_value_t, lambda [](int)->any_int_sender>, stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda []()->int>, stdexec::__tag_invoke::tag_invoke_result_t<stdexec::__schedule::schedule_t, nvexec::_strm::stream_scheduler &> &>> &>::type>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<std::decay<std::enable_if<true, int>::type>::type>>::__t &&, _As &&...) noexcept [with _Tag=stdexec::__receivers::set_value_t, _As=<int &>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__receivers::set_value_t, _Args=<nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>::__t, int &>]" at line 365 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
instantiation of "void stdexec::__receivers::set_value_t::operator()(_Receiver &&, _As &&...) const noexcept [with _Receiver=nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>::__t, _As=<int &>]" at line 419 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/common.cuh"
instantiation of "void nvexec::_strm::operation_state_base_<OuterReceiverId>::__t::propagate_completion_signal(Tag, As &&...) noexcept [with OuterReceiverId=nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<int>>, Tag=stdexec::__receivers::set_value_t, As=<int &>]" at line 76 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/then.cuh"
instantiation of "void nvexec::_strm::then::tag_invoke(stdexec::__receivers::set_value_t, nvexec::_strm::then::receiver_t<4UL, nvexec::_strm::let_xxx::__receiver_<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<stdexec::__id<nvexec::_strm::sync_wait::sync_wait_t::receiver_t<std::remove_reference<stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__let::let_value_t, lambda [](int)->any_int_sender>, stdexec::__call_result_t<stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda []()->int>, stdexec::__tag_invoke::tag_invoke_result_t<stdexec::__schedule::schedule_t, nvexec::_strm::stream_scheduler &> &>> &>::type>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t, std::tuple<std::decay<std::enable_if<true, int>::type>::type>>::__t::__id, lambda []()->int>::__t &&, As &&...) noexcept [with As=<>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
[ 11 instantiation contexts not shown ]
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::let_xxx::__operation<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, lambda [](int)->any_int_sender, stdexec::__receivers::set_value_t>]" at line 501 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/common.cuh"
instantiation of class "nvexec::_strm::operation_state_<CvrefSenderId, InnerReceiverId, OuterReceiverId>::__t [with CvrefSenderId=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, InnerReceiverId=nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, OuterReceiverId=nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>]" at line 106 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/functional.hpp"
instantiation of "auto stdexec::__tag_invoke::tag_invoke_t::operator()(_Tag, _Args &&...) const->stdexec::__tag_invoke::tag_invoke_result_t<_Tag, _Args...> [with _Tag=stdexec::__start::start_t, _Args=<nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t &>]" at line 1224 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/exec/../stdexec/execution.hpp"
instantiation of "void stdexec::__start::start_t::operator()(_Op &) const noexcept [with _Op=nvexec::_strm::operation_state_<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>, nvexec::_strm::propagate_receiver_t<nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>, nvexec::_strm::sync_wait::receiver_t<nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>>>::__t]" at line 138 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream/sync_wait.cuh"
instantiation of "auto nvexec::_strm::sync_wait::sync_wait_t::operator()(nvexec::_strm::context_state_t, Sender &&) const->std::optional<nvexec::_strm::sync_wait::sync_wait_result_t<Sender>> [with Sender=nvexec::_strm::let_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::stream_scheduler::sender_::__t::__id, lambda []()->int>, lambda [](int)->any_int_sender, stdexec::_X<stdexec::__receivers::set_value_t>::_T>::__t]" at line 257 of "/pscratch/sd/w/wwei/nvhpc_23_5/Linux_x86_64/23.5/compilers/include-stdexec/experimental/nvexec/stream_context.cuh"
4 errors detected in the compilation of "factorial_gpu.cpp".
Hi,
I would like to know how can we do recursion with gpu stream scheduler? I am implementing a stencil code on gpu with the stdexec library, and in the future, I plan to explore more task-based algorithms using sender on gpu. I feel like enabling recursion with gpu stream scheduler will be beneficial. It is an ongoing collaboration project with @brycelelbach, Jeff Larkin, nvhpc premium service, NERSC/Berkeley Lab.
I still have a struggle with the #995 issue with newer compilers (23.5, 23.7). The original feedback was the code could be compiled on Compiler Explorer (https://godbolt.org/z/v4nvKsa77), but when I execute it on Compiler Explorer, it actually produces errors (I attached below). Moreover, no compiler flag
--experimental-stdparwas supplied in the original godbolt link for the sender feature, but it still compiled. I think the environment on Compiler Explorer is different. If it works on your local environment, can you please share some insights how to make such code work? Thanks.Here are the source code + cmake, various methods I tried:
code:
cmake:
method 1: nvchpc 23.5, use nvc++ built-in stdexec library
method 2: nvhpc/23.5, use latest stdexec library