1#ifndef KOKKOS_EXECUTION_GRAPH_PARALLEL_FOR_HPP
2#define KOKKOS_EXECUTION_GRAPH_PARALLEL_FOR_HPP
14template <
typename Label,
typename Functor, Kokkos::ExecutionPolicy ExecPolicy>
18 using node_props_t =
typename Kokkos::Impl::NodeCtorProps<Label, device_handle_t>::uniform_type;
20 template <NodeRef Predecessor>
21 using node_t =
decltype(std::declval<const Predecessor&>().then_parallel_for(
22 std::declval<node_props_t&&>(),
23 std::declval<ExecPolicy&&>(),
24 std::declval<Functor&&>()));
27 template <NodeRef Predecessor>
29 auto node = predecessor.then_parallel_for(
40template <stdexec::sender Sndr,
typename Label,
typename Functor, Kokkos::ExecutionPolicy ExecPolicy>
58 template <
typename Env,
typename Data,
typename Sndr>
61 typename std::remove_cvref_t<Data>::label_t,
62 typename std::remove_cvref_t<Data>::functor_t,
63 typename std::remove_cvref_t<Data>::policy_t
66 template <
typename Env,
typename Data,
typename Sndr>
67 requires stdexec::__sends<stdexec::set_value_t, Sndr, Env>
73 noexcept(std::is_nothrow_constructible_v<
79 auto& [label, functor, policy] = data;
81 auto schd = stdexec::get_completion_scheduler<stdexec::set_value_t>(stdexec::get_env(
sndr), env);
85 {.node_props = Kokkos::Experimental::node_props(
86 stdexec::__forward_like<Data>(label),
87 Kokkos::Experimental::get_device_handle(schd.state->exec)),
88 .functor = stdexec::__forward_like<Data>(functor),
89 .policy = stdexec::__forward_like<Data>(policy)},
90 .sndr = std::forward<Sndr>(
sndr)
102template <stdexec::sender Sndr,
typename Label,
typename Functor, Kokkos::ExecutionPolicy ExecPolicy>
103extern __mtype<Kokkos::Execution::GraphImpl::ParallelForSender<__demangle_t<Sndr>, Label, Functor, ExecPolicy>>
104 __demangle_v<Kokkos::Execution::GraphImpl::ParallelForSender<Sndr, Label, Functor, ExecPolicy>>;
#define KOKKOS_EXECUTION_IMPL_FORWARDING_ATTRIBUTES_GET_ENV(_type_, _obj_)
#define KOKKOS_EXECUTION_COMPL_SIGS_ADD(_sndr_type_,...)
Completion signatures of _sndr_type_.
Concept for a sender whose completion scheduler is Kokkos::Execution::GraphImpl::Scheduler.
#define KOKKOS_EXECUTION_IMPL_GRAPH_ADD_NODE_DEBUG_LOGGING(_type_, _node_, _predecessor_)
#define KOKKOS_EXECUTION_GRAPH_OPERATION_STATE_CONNECT
void graph_add_node_event(const Predecessor &predecessor, const NodeType &node)
Record an event for a node added after predecessor.
auto no_graph_scheduler_in_env() noexcept
Show a better compile diagnostic when there is no Kokkos::Execution::GraphImpl::Scheduler found.
typename ExecPolicy::execution_space execution_space
typename Kokkos::Impl::NodeCtorProps< Label, device_handle_t >::uniform_type node_props_t
Kokkos::Impl::DeviceHandle< execution_space > device_handle_t
decltype(std::declval< const Predecessor & >().then_parallel_for( std::declval< node_props_t && >(), std::declval< ExecPolicy && >(), std::declval< Functor && >())) node_t
auto add_node(const Predecessor &predecessor) &&noexcept(false) -> node_t< Predecessor >
stdexec::sender_tag sender_concept
ParallelForClosure< std::string, typename Kokkos::Execution::Impl::bulk_traits< Data >::functor_t, ExecPolicy > closure_t
Custom algorithm for the Kokkos::parallel_for construct.