17#ifndef KOKKOS_IMPL_PUBLIC_INCLUDE
18#include <Kokkos_Macros.hpp>
20 "Including non-public Kokkos header files is not allowed.");
22#ifndef KOKKOS_TASKSCHEDULER_FWD_HPP
23#define KOKKOS_TASKSCHEDULER_FWD_HPP
28#include <Kokkos_Macros.hpp>
29#if defined(KOKKOS_ENABLE_TASKDAG)
31#include <Kokkos_Core_fwd.hpp>
38template <
typename ValueType,
typename Scheduler>
41template <
class Space,
class Queue>
42class SimpleTaskScheduler;
44template <
class Space,
class Queue>
45class BasicTaskScheduler;
47template <
typename Space>
48struct is_scheduler :
public std::false_type {};
50template <
class Space,
class Queue>
51struct is_scheduler<BasicTaskScheduler<Space, Queue>> :
public std::true_type {
54template <
class Space,
class Queue>
55struct is_scheduler<SimpleTaskScheduler<Space, Queue>> :
public std::true_type {
58enum class TaskPriority :
int { High = 0, Regular = 1, Low = 2 };
66template <
class Device>
71template <
class TaskQueueTraits>
90template <
typename Space,
typename ResultType,
typename FunctorType>
95template <
typename Space,
typename MemorySpace>
98template <
typename ExecSpace,
typename MemorySpace>
99class TaskQueueMultiple;
101template <
typename ExecSpace,
typename MemSpace,
typename TaskQueueTraits,
104class SingleTaskQueue;
106template <
typename ExecSpace,
typename MemSpace,
typename TaskQueueTraits,
108class MultipleTaskQueue;
110struct TaskQueueTraitsLockBased;
112template <
size_t CircularBufferSize = 64>
113struct TaskQueueTraitsChaseLev;
115template <
typename ResultType>
118struct TaskSchedulerBase;
120template <
class ExecSpace>
121struct default_tasking_memory_space_for_execution_space {
122 using type =
typename ExecSpace::memory_space;
125#if defined(KOKKOS_ENABLE_CUDA)
127struct default_tasking_memory_space_for_execution_space<Kokkos::Cuda> {
132template <
class ExecSpace>
133using default_tasking_memory_space_for_execution_space_t =
134 typename default_tasking_memory_space_for_execution_space<ExecSpace>::type;
143template <
typename Space>
144using DeprecatedTaskScheduler = BasicTaskScheduler<
148 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>;
150template <
typename Space>
151using DeprecatedTaskSchedulerMultiple = BasicTaskScheduler<
153 Impl::TaskQueueMultiple<
155 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>;
157template <
typename Space>
158using TaskScheduler = SimpleTaskScheduler<
160 Impl::SingleTaskQueue<
161 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
162 Impl::TaskQueueTraitsLockBased>>;
164template <
typename Space>
165using TaskSchedulerMultiple = SimpleTaskScheduler<
167 Impl::MultipleTaskQueue<
168 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
169 Impl::TaskQueueTraitsLockBased,
170 Kokkos::MemoryPool<Kokkos::Device<
172 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>>>;
174template <
typename Space>
175using ChaseLevTaskScheduler = SimpleTaskScheduler<
177 Impl::MultipleTaskQueue<
178 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
179 Impl::TaskQueueTraitsChaseLev<>,
180 Kokkos::MemoryPool<Kokkos::Device<
182 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>>>;
184template <
class Space,
class QueueType>
185void wait(BasicTaskScheduler<Space, QueueType>
const&);
189struct TaskSchedulerBase {};
191class TaskQueueBase {};
193template <
typename Scheduler,
typename EnableIfConstra
int =
void>
194class TaskQueueSpecializationConstrained {};
196template <
typename Scheduler>
197struct TaskQueueSpecialization : TaskQueueSpecializationConstrained<Scheduler> {
200template <
int,
typename>
201struct TaskPolicyData;
A thread safe view to a bitset.