45 #ifndef KOKKOS_TASKSCHEDULER_FWD_HPP 46 #define KOKKOS_TASKSCHEDULER_FWD_HPP 51 #include <Kokkos_Macros.hpp> 52 #if defined(KOKKOS_ENABLE_TASKDAG) 54 #include <Kokkos_Core_fwd.hpp> 61 template <
typename ValueType,
typename Scheduler>
64 template <
class Space,
class Queue>
65 class SimpleTaskScheduler;
67 template <
class Space,
class Queue>
68 class BasicTaskScheduler;
70 template <
typename Space>
71 struct is_scheduler :
public std::false_type {};
73 template <
class Space,
class Queue>
74 struct is_scheduler<BasicTaskScheduler<Space, Queue>> :
public std::true_type {
77 template <
class Space,
class Queue>
78 struct is_scheduler<SimpleTaskScheduler<Space, Queue>> :
public std::true_type {
81 enum class TaskPriority : int { High = 0, Regular = 1, Low = 2 };
89 template <
class Device>
94 template <
class TaskQueueTraits>
113 template <
typename Space,
typename ResultType,
typename FunctorType>
118 template <
typename Space,
typename MemorySpace>
121 template <
typename ExecSpace,
typename MemorySpace>
122 class TaskQueueMultiple;
124 template <
typename ExecSpace,
typename MemSpace,
typename TaskQueueTraits,
126 Kokkos::MemoryPool<Kokkos::Device<ExecSpace, MemSpace>>>
127 class SingleTaskQueue;
129 template <
typename ExecSpace,
typename MemSpace,
typename TaskQueueTraits,
131 class MultipleTaskQueue;
133 struct TaskQueueTraitsLockBased;
135 template <
size_t CircularBufferSize = 64>
136 struct TaskQueueTraitsChaseLev;
138 template <
typename ResultType>
141 struct TaskSchedulerBase;
143 template <
class ExecSpace>
144 struct default_tasking_memory_space_for_execution_space {
145 using type =
typename ExecSpace::memory_space;
148 #if defined(KOKKOS_ENABLE_CUDA) 150 struct default_tasking_memory_space_for_execution_space<
Kokkos::Cuda> {
151 using type = Kokkos::CudaUVMSpace;
155 template <
class ExecSpace>
156 using default_tasking_memory_space_for_execution_space_t =
157 typename default_tasking_memory_space_for_execution_space<ExecSpace>::type;
166 template <
typename Space>
167 using DeprecatedTaskScheduler = BasicTaskScheduler<
171 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>;
173 template <
typename Space>
174 using DeprecatedTaskSchedulerMultiple = BasicTaskScheduler<
176 Impl::TaskQueueMultiple<
178 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>;
180 template <
typename Space>
181 using TaskScheduler = SimpleTaskScheduler<
183 Impl::SingleTaskQueue<
184 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
185 Impl::TaskQueueTraitsLockBased>>;
187 template <
typename Space>
188 using TaskSchedulerMultiple = SimpleTaskScheduler<
190 Impl::MultipleTaskQueue<
191 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
192 Impl::TaskQueueTraitsLockBased,
193 Kokkos::MemoryPool<Kokkos::Device<
195 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>>>;
197 template <
typename Space>
198 using ChaseLevTaskScheduler = SimpleTaskScheduler<
200 Impl::MultipleTaskQueue<
201 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
202 Impl::TaskQueueTraitsChaseLev<>,
203 Kokkos::MemoryPool<Kokkos::Device<
205 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>>>;
207 template <
class Space,
class QueueType>
208 void wait(BasicTaskScheduler<Space, QueueType>
const&);
212 struct TaskSchedulerBase {};
214 class TaskQueueBase {};
216 template <
typename Scheduler,
typename EnableIfConstra
int =
void>
217 class TaskQueueSpecializationConstrained {};
219 template <
typename Scheduler>
220 struct TaskQueueSpecialization : TaskQueueSpecializationConstrained<Scheduler> {
223 template <
int,
typename>
224 struct TaskPolicyData;