44 #ifndef KOKKOS_TASKSCHEDULER_FWD_HPP
45 #define KOKKOS_TASKSCHEDULER_FWD_HPP
49 #include <Kokkos_Macros.hpp>
50 #if defined( KOKKOS_ENABLE_TASKDAG )
52 #include <Kokkos_Core_fwd.hpp>
59 template <
typename ValueType,
typename Scheduler>
62 template <
class Space,
class Queue>
63 class SimpleTaskScheduler;
65 template <
class Space,
class Queue>
66 class BasicTaskScheduler;
68 template<
typename Space >
69 struct is_scheduler :
public std::false_type {};
71 template<
class Space,
class Queue>
72 struct is_scheduler<BasicTaskScheduler<Space, Queue>> :
public std::true_type {};
74 template<
class Space,
class Queue>
75 struct is_scheduler<SimpleTaskScheduler<Space, Queue>> :
public std::true_type {};
77 enum class TaskPriority : int {
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;
125 typename ExecSpace,
typename MemSpace,
typename TaskQueueTraits,
126 class MemoryPool = Kokkos::MemoryPool<Kokkos::Device<ExecSpace, MemSpace>>
128 class SingleTaskQueue;
130 template<
typename ExecSpace,
typename MemSpace,
typename TaskQueueTraits,
class MemoryPool>
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
146 using type =
typename ExecSpace::memory_space;
149 #if defined( KOKKOS_ENABLE_CUDA )
151 struct default_tasking_memory_space_for_execution_space<Kokkos::Cuda>
153 using type = Kokkos::CudaUVMSpace;
157 template <
class ExecSpace>
158 using default_tasking_memory_space_for_execution_space_t =
159 typename default_tasking_memory_space_for_execution_space<ExecSpace>::type;
168 template<
typename Space >
169 using DeprecatedTaskScheduler = BasicTaskScheduler<
171 Impl::TaskQueue<Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>>
174 template<
typename Space >
175 using DeprecatedTaskSchedulerMultiple = BasicTaskScheduler<
177 Impl::TaskQueueMultiple<Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>>
180 template<
typename Space >
181 using TaskScheduler = SimpleTaskScheduler<
183 Impl::SingleTaskQueue<
185 Impl::default_tasking_memory_space_for_execution_space_t<Space>,
186 Impl::TaskQueueTraitsLockBased
190 template<
typename Space >
191 using TaskSchedulerMultiple = SimpleTaskScheduler<
193 Impl::MultipleTaskQueue<
195 Impl::default_tasking_memory_space_for_execution_space_t<Space>,
196 Impl::TaskQueueTraitsLockBased,
200 Impl::default_tasking_memory_space_for_execution_space_t<Space>
206 template<
typename Space >
207 using ChaseLevTaskScheduler = SimpleTaskScheduler<
209 Impl::MultipleTaskQueue<
211 Impl::default_tasking_memory_space_for_execution_space_t<Space>,
212 Impl::TaskQueueTraitsChaseLev<>,
216 Impl::default_tasking_memory_space_for_execution_space_t<Space>
222 template<
class Space,
class QueueType>
223 void wait(BasicTaskScheduler<Space, QueueType>
const&);
227 struct TaskSchedulerBase { };
229 class TaskQueueBase { };
231 template <
typename Scheduler,
typename EnableIfConstra
int=
void>
232 class TaskQueueSpecializationConstrained { };
234 template <
typename Scheduler>
235 struct TaskQueueSpecialization : TaskQueueSpecializationConstrained<Scheduler> { };
237 template <
int,
typename>
238 struct TaskPolicyData;