kokkos-execution 0.0.1
Loading...
Searching...
No Matches
env.hpp
Go to the documentation of this file.
1#ifndef KOKKOS_EXECUTION_EXECUTION_SPACE_ENV_HPP
2#define KOKKOS_EXECUTION_EXECUTION_SPACE_ENV_HPP
3
5
7
9
12
14template <typename Env, Kokkos::ExecutionSpace Exec>
15constexpr auto join_env_with_exec(Env&& env, const Exec& exec) noexcept {
16 return stdexec::__env::__join(
17 stdexec::prop{Impl::get_exec, Impl::ExecutionSpaceRef{exec}}, stdexec::__fwd_env(std::forward<Env>(env)));
18}
19
21template <typename ExecEnvPolicy, typename Env, Kokkos::ExecutionSpace Exec>
22constexpr auto join_env_with_exec(Env&& env, const Exec& exec) noexcept {
23 if constexpr (std::same_as<ExecEnvPolicy, WithExecEnvPolicy>) {
24 return join_env_with_exec(std::forward<Env>(env), exec);
25 } else {
26 return stdexec::__fwd_env(std::forward<Env>(env));
27 }
28}
29
30template <typename ExecEnvPolicy, typename Env, Kokkos::ExecutionSpace Exec>
31using join_env_with_exec_t = decltype(join_env_with_exec<ExecEnvPolicy>(std::declval<Env>(), std::declval<Exec>()));
32
39template <typename ExecEnvPolicy, typename Env>
40constexpr auto extend_env(Env&& env) noexcept {
41 if constexpr (std::same_as<ExecEnvPolicy, WithExecEnvPolicy>) {
42 auto ref = Impl::get_exec(env);
43 return stdexec::__env::__join(
44 stdexec::prop{Impl::get_exec, std::move(ref)}, stdexec::__fwd_env(std::forward<Env>(env)));
45 } else {
46 return stdexec::__fwd_env(std::forward<Env>(env));
47 }
48}
49
50template <typename ExecEnvPolicy, typename Env>
51using extend_env_t = decltype(extend_env<ExecEnvPolicy>(std::declval<Env>()));
52
54template <typename Env>
56 std::conditional_t<stdexec::__queryable_with<Env, Impl::get_exec_t>, WithExecEnvPolicy, WithoutExecEnvPolicy>;
57
58} // namespace Kokkos::Execution::ExecutionSpaceImpl
59
60#endif // KOKKOS_EXECUTION_EXECUTION_SPACE_ENV_HPP
constexpr auto join_env_with_exec(Env &&env, const Exec &exec) noexcept
Unconditionally join exec to env.
Definition env.hpp:15
decltype(extend_env< ExecEnvPolicy >(std::declval< Env >())) extend_env_t
Definition env.hpp:51
constexpr auto extend_env(Env &&env) noexcept
Definition env.hpp:40
std::conditional_t< stdexec::__queryable_with< Env, Impl::get_exec_t >, WithExecEnvPolicy, WithoutExecEnvPolicy > exec_env_policy_t
If Env is queryable with Impl::get_exec_t, use WithExecEnvPolicy.
Definition env.hpp:55
decltype(join_env_with_exec< ExecEnvPolicy >(std::declval< Env >(), std::declval< Exec >())) join_env_with_exec_t
Definition env.hpp:31
constexpr get_exec_t get_exec
Definition get_exec.hpp:17
Wrap a Kokkos execution space to make it cheap to copy/move in new environments.
Definition get_exec.hpp:27