Skip to content

Instantly share code, notes, and snippets.

@seanbaxter
Last active April 3, 2023 23:13
Show Gist options
  • Save seanbaxter/3caa4926f341d4ef07ace32f47f94af5 to your computer and use it in GitHub Desktop.
Save seanbaxter/3caa4926f341d4ef07ace32f47f94af5 to your computer and use it in GitHub Desktop.
$ circle maxwell_gpu_s.cpp -sm_75 -stdpar -I ../../include -std=c++20
ODR used by: int main(int, char**)
maxwell_gpu_s.cpp:43:36
grid_t grid{N, is_gpu_scheduler(stream_ctx.get_scheduler())};
^
ODR used by: bool is_gpu_scheduler(nvexec::_strm::stream_scheduler&&)
maxwell/snr.cuh:321:35
auto [on_gpu] = stdexec::sync_wait(std::move(snd)).value();
^
ODR used by: auto stdexec::__sync_wait::sync_wait_t::operator()(exec::__on::__continue_on<stdexec::__just::__sender<>, nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>::__t&&) const -> std::optional<std::tuple<bool>>
/home/sean/projects/stdexec-circle/include/stdexec/execution.hpp:5980:14
start(__op_state);
^
ODR used by: void stdexec::__start::start_t::operator()(exec::__stl::__operation<stdexec::__just::__sender<>::__t, exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, stdexec::__sync_wait::__receiver<bool>>::__t&) const noexcept
/home/sean/projects/stdexec-circle/include/stdexec/execution.hpp:1255:26
(void) tag_invoke(start_t{}, __op);
^
ODR used by: auto stdexec::__tag_invoke::tag_invoke_t::operator()(stdexec::__start::start_t, exec::__stl::__operation<stdexec::__just::__sender<>::__t, exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, stdexec::__sync_wait::__receiver<bool>>::__t&) const noexcept -> void
/home/sean/projects/stdexec-circle/include/stdexec/functional.hpp:108:26
return tag_invoke((_Tag&&) __tag, (_Args&&) __args...);
^
ODR used by: void exec::__stl::tag_invoke(stdexec::__start::start_t, exec::__stl::__operation<stdexec::__just::__sender<>::__t, exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, stdexec::__sync_wait::__receiver<bool>>::__t&) noexcept
/home/sean/projects/stdexec-circle/include/exec/__detail/__sender_facade.hpp:248:42
__self.__state_.__kernel_.start(
^
ODR used by: void exec::__default_kernel::start(stdexec::__schedule_from::__operation1<stdexec::__loop::run_loop::__scheduler, nvexec::_strm::transfer_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>>, exec::__stl::__receiver<exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, exec::__default_kernel::__no_data, stdexec::__sync_wait::__receiver<bool>>>::__t&, stdexec::__ignore, stdexec::__ignore) noexcept
/home/sean/projects/stdexec-circle/include/exec/__detail/__sender_facade.hpp:386:21
stdexec::start(__op);
^
ODR used by: void stdexec::__start::start_t::operator()(stdexec::__schedule_from::__operation1<stdexec::__loop::run_loop::__scheduler, nvexec::_strm::transfer_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>>, exec::__stl::__receiver<exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, exec::__default_kernel::__no_data, stdexec::__sync_wait::__receiver<bool>>>::__t&) const noexcept
/home/sean/projects/stdexec-circle/include/stdexec/execution.hpp:1255:26
(void) tag_invoke(start_t{}, __op);
^
ODR used by: auto stdexec::__tag_invoke::tag_invoke_t::operator()(stdexec::__start::start_t, stdexec::__schedule_from::__operation1<stdexec::__loop::run_loop::__scheduler, nvexec::_strm::transfer_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>>, exec::__stl::__receiver<exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, exec::__default_kernel::__no_data, stdexec::__sync_wait::__receiver<bool>>>::__t&) const noexcept -> void
/home/sean/projects/stdexec-circle/include/stdexec/functional.hpp:108:26
return tag_invoke((_Tag&&) __tag, (_Args&&) __args...);
^
ODR used by: void stdexec::__schedule_from::tag_invoke(stdexec::__start::start_t, stdexec::__schedule_from::__operation1<stdexec::__loop::run_loop::__scheduler, nvexec::_strm::transfer_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>>, exec::__stl::__receiver<exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, exec::__default_kernel::__no_data, stdexec::__sync_wait::__receiver<bool>>>::__t&) noexcept
/home/sean/projects/stdexec-circle/include/stdexec/execution.hpp:4722:16
start(__op_state.__state1_);
^
ODR used by: void stdexec::__start::start_t::operator()(nvexec::_strm::transfer::operation_state_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>, stdexec::_Yp<stdexec::__schedule_from::__receiver1<stdexec::__loop::run_loop::__scheduler, nvexec::_strm::transfer_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>>, exec::__stl::__receiver<exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, exec::__default_kernel::__no_data, stdexec::__sync_wait::__receiver<bool>>>::__t>>::__t&) const noexcept
/home/sean/projects/stdexec-circle/include/stdexec/execution.hpp:1255:26
(void) tag_invoke(start_t{}, __op);
^
ODR used by: auto stdexec::__tag_invoke::tag_invoke_t::operator()(stdexec::__start::start_t, nvexec::_strm::transfer::operation_state_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>, stdexec::_Yp<stdexec::__schedule_from::__receiver1<stdexec::__loop::run_loop::__scheduler, nvexec::_strm::transfer_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>>, exec::__stl::__receiver<exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, exec::__default_kernel::__no_data, stdexec::__sync_wait::__receiver<bool>>>::__t>>::__t&) const noexcept -> void
/home/sean/projects/stdexec-circle/include/stdexec/functional.hpp:108:26
return tag_invoke((_Tag&&) __tag, (_Args&&) __args...);
^
ODR used by: void nvexec::_strm::transfer::tag_invoke(stdexec::__start::start_t, nvexec::_strm::transfer::operation_state_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>, stdexec::_Yp<stdexec::__schedule_from::__receiver1<stdexec::__loop::run_loop::__scheduler, nvexec::_strm::transfer_sender_t<nvexec::_strm::then_sender_t<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, lambda bool() const>>, exec::__stl::__receiver<exec::__on::__continue_on_kernel<nvexec::_strm::stream_scheduler, stdexec::__closure::__binder_back<stdexec::__then::then_t, lambda bool() const>>, exec::__default_kernel::__no_data, stdexec::__sync_wait::__receiver<bool>>>::__t>>::__t&) noexcept
/home/sean/projects/stdexec-circle/include/nvexec/stream/transfer.cuh:76:25
stdexec::start(op.inner_op_);
^
ODR used by: void stdexec::__start::start_t::operator()(nvexec::_strm::operation_state_<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, nvexec::_strm::then::receiver_t<1ul, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>, lambda bool() const>, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>>::__t&) const noexcept
/home/sean/projects/stdexec-circle/include/stdexec/execution.hpp:1255:26
(void) tag_invoke(start_t{}, __op);
^
ODR used by: auto stdexec::__tag_invoke::tag_invoke_t::operator()(stdexec::__start::start_t, nvexec::_strm::operation_state_<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, nvexec::_strm::then::receiver_t<1ul, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>, lambda bool() const>, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>>::__t&) const noexcept -> void
/home/sean/projects/stdexec-circle/include/stdexec/functional.hpp:108:26
return tag_invoke((_Tag&&) __tag, (_Args&&) __args...);
^
ODR used by: void nvexec::_strm::tag_invoke(stdexec::__start::start_t, nvexec::_strm::operation_state_<nvexec::_strm::schedule_from_sender_t<nvexec::_strm::stream_scheduler, exec::__on::__with_sched<stdexec::__just::__sender<>, stdexec::__loop::run_loop::__scheduler>>, nvexec::_strm::then::receiver_t<1ul, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>, lambda bool() const>, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>>::__t&) noexcept
/home/sean/projects/stdexec-circle/include/nvexec/stream/common.cuh:487:43
op.propagate_completion_signal(stdexec::set_error, std::move(op.status_));
^
ODR used by: void nvexec::_strm::operation_state_base_<nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>>::__t::propagate_completion_signal(stdexec::__receivers::set_error_t, cudaError&&) noexcept
/home/sean/projects/stdexec-circle/include/nvexec/stream/common.cuh:424:15
<<<1, 1, 0, get_stream()>>>(receiver_, tag, (As&&) as...);
^
(sm_75) ODR used by: void nvexec::_strm::continuation_kernel(nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>::__t, stdexec::__receivers::set_error_t, cudaError&&)
/home/sean/projects/stdexec-circle/include/nvexec/stream/common.cuh:310:10
tag(::cuda::std::move(receiver), (As&&) as...);
^
(sm_75) ODR used by: void stdexec::__receivers::set_error_t::operator()(nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>::__t&&, cudaError&&) const noexcept
/home/sean/projects/stdexec-circle/include/stdexec/execution.hpp:364:26
(void) tag_invoke(set_error_t{}, (_Receiver&&) __rcvr, (_Error&&) __err);
^
(sm_75) ODR used by: auto stdexec::__tag_invoke::tag_invoke_t::operator()(stdexec::__receivers::set_error_t, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>::__t&&, cudaError&&) const noexcept -> void
/home/sean/projects/stdexec-circle/include/stdexec/functional.hpp:108:26
return tag_invoke((_Tag&&) __tag, (_Args&&) __args...);
^
(sm_75) ODR used by: void nvexec::_strm::tag_invoke(stdexec::__receivers::set_error_t, nvexec::_strm::stream_enqueue_receiver<stdexec::_Xp<nvexec::_strm::stream_env<stdexec::_Xp<exec::__on::__with_sched_env<stdexec::__sync_wait::__env, stdexec::_Yp<nvexec::_strm::stream_scheduler>>>::_Up>>::_Up, stdexec::_Xp<nvexec::variant_t<cuda::std::tuple<stdexec::__receivers::set_stopped_t>, cuda::std::tuple<stdexec::__receivers::set_error_t, cudaError>, cuda::std::tuple<stdexec::__receivers::set_value_t, bool>, cuda::std::tuple<stdexec::__receivers::set_error_t, std::__exception_ptr::exception_ptr>>>::_Up>::__t&&, cudaError&&) noexcept
/home/sean/projects/stdexec-circle/include/nvexec/stream/common.cuh:281:25
self.producer_(self.task_);
^
error: /home/sean/projects/stdexec-circle/include/nvexec/detail/queue.cuh:106:7
... included from /home/sean/projects/stdexec-circle/include/nvexec/stream/common.cuh:30:10
... included from /home/sean/projects/stdexec-circle/include/nvexec/stream/sync_wait.cuh:21:10
... included from /home/sean/projects/stdexec-circle/include/nvexec/stream_context.cuh:23:10
... included from maxwell/snr.cuh:25:10
... included from maxwell_gpu_s.cpp:17:10
cg: function void nvexec::_strm::queue::producer_t::operator()(nvexec::_strm::queue::task_base_t*) marked __host__ cannot be executed on the GPU
function declared at /home/sean/projects/stdexec-circle/include/nvexec/detail/queue.cuh:106:7
operator()(task_base_t* task) {
^
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment