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