Kokkos Core Kernels Package Version of the Day
Loading...
Searching...
No Matches
Kokkos_TaskScheduler_fwd.hpp
1//@HEADER
2// ************************************************************************
3//
4// Kokkos v. 4.0
5// Copyright (2022) National Technology & Engineering
6// Solutions of Sandia, LLC (NTESS).
7//
8// Under the terms of Contract DE-NA0003525 with NTESS,
9// the U.S. Government retains certain rights in this software.
10//
11// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions.
12// See https://kokkos.org/LICENSE for license information.
13// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
14//
15//@HEADER
16
17#ifndef KOKKOS_IMPL_PUBLIC_INCLUDE
18#include <Kokkos_Macros.hpp>
19static_assert(false,
20 "Including non-public Kokkos header files is not allowed.");
21#endif
22#ifndef KOKKOS_TASKSCHEDULER_FWD_HPP
23#define KOKKOS_TASKSCHEDULER_FWD_HPP
24
25//----------------------------------------------------------------------------
26
27#include <cstddef>
28#include <Kokkos_Macros.hpp>
29#if defined(KOKKOS_ENABLE_TASKDAG)
30
31#include <Kokkos_Core_fwd.hpp>
32//----------------------------------------------------------------------------
33
34namespace Kokkos {
35
36// Forward declarations used in Impl::TaskQueue
37
38template <typename ValueType, typename Scheduler>
39class BasicFuture;
40
41template <class Space, class Queue>
42class SimpleTaskScheduler;
43
44template <class Space, class Queue>
45class BasicTaskScheduler;
46
47template <typename Space>
48struct is_scheduler : public std::false_type {};
49
50template <class Space, class Queue>
51struct is_scheduler<BasicTaskScheduler<Space, Queue>> : public std::true_type {
52};
53
54template <class Space, class Queue>
55struct is_scheduler<SimpleTaskScheduler<Space, Queue>> : public std::true_type {
56};
57
58enum class TaskPriority : int { High = 0, Regular = 1, Low = 2 };
59
60} // namespace Kokkos
61
62//----------------------------------------------------------------------------
63
64namespace Kokkos {
65
66template <class Device>
67class MemoryPool;
68
69namespace Impl {
70
71template <class TaskQueueTraits>
72class TaskNode;
73
74class TaskBase;
75
76/*\brief Implementation data for task data management, access, and execution.
77 * (Deprecated)
78 * CRTP Inheritance structure to allow static_cast from the
79 * task root type and a task's FunctorType.
80 *
81 * TaskBase< Space , ResultType , FunctorType >
82 * : TaskBase< Space , ResultType , void >
83 * , FunctorType
84 * { ... };
85 *
86 * TaskBase< Space , ResultType , void >
87 * : TaskBase< Space , void , void >
88 * { ... };
89 */
90template <typename Space, typename ResultType, typename FunctorType>
91class Task;
92
93class TaskQueueBase;
94
95template <typename Space, typename MemorySpace>
96class TaskQueue;
97
98template <typename ExecSpace, typename MemorySpace>
99class TaskQueueMultiple;
100
101template <typename ExecSpace, typename MemSpace, typename TaskQueueTraits,
102 class MemoryPool =
103 Kokkos::MemoryPool<Kokkos::Device<ExecSpace, MemSpace>>>
104class SingleTaskQueue;
105
106template <typename ExecSpace, typename MemSpace, typename TaskQueueTraits,
107 class MemoryPool>
108class MultipleTaskQueue;
109
110struct TaskQueueTraitsLockBased;
111
112template <size_t CircularBufferSize = 64>
113struct TaskQueueTraitsChaseLev;
114
115template <typename ResultType>
116struct TaskResult;
117
118struct TaskSchedulerBase;
119
120template <class ExecSpace>
121struct default_tasking_memory_space_for_execution_space {
122 using type = typename ExecSpace::memory_space;
123};
124
125#if defined(KOKKOS_ENABLE_CUDA)
126template <>
127struct default_tasking_memory_space_for_execution_space<Kokkos::Cuda> {
128 using type = Kokkos::CudaUVMSpace;
129};
130#endif
131
132template <class ExecSpace>
133using default_tasking_memory_space_for_execution_space_t =
134 typename default_tasking_memory_space_for_execution_space<ExecSpace>::type;
135
136} // namespace Impl
137} // namespace Kokkos
138
139//----------------------------------------------------------------------------
140
141namespace Kokkos {
142
143template <typename Space>
144using DeprecatedTaskScheduler = BasicTaskScheduler<
145 Space,
146 Impl::TaskQueue<
147 Space,
148 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>;
149
150template <typename Space>
151using DeprecatedTaskSchedulerMultiple = BasicTaskScheduler<
152 Space,
153 Impl::TaskQueueMultiple<
154 Space,
155 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>;
156
157template <typename Space>
158using TaskScheduler = SimpleTaskScheduler<
159 Space,
160 Impl::SingleTaskQueue<
161 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
162 Impl::TaskQueueTraitsLockBased>>;
163
164template <typename Space>
165using TaskSchedulerMultiple = SimpleTaskScheduler<
166 Space,
167 Impl::MultipleTaskQueue<
168 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
169 Impl::TaskQueueTraitsLockBased,
170 Kokkos::MemoryPool<Kokkos::Device<
171 Space,
172 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>>>;
173
174template <typename Space>
175using ChaseLevTaskScheduler = SimpleTaskScheduler<
176 Space,
177 Impl::MultipleTaskQueue<
178 Space, Impl::default_tasking_memory_space_for_execution_space_t<Space>,
179 Impl::TaskQueueTraitsChaseLev<>,
180 Kokkos::MemoryPool<Kokkos::Device<
181 Space,
182 Impl::default_tasking_memory_space_for_execution_space_t<Space>>>>>;
183
184template <class Space, class QueueType>
185void wait(BasicTaskScheduler<Space, QueueType> const&);
186
187namespace Impl {
188
189struct TaskSchedulerBase {};
190
191class TaskQueueBase {};
192
193template <typename Scheduler, typename EnableIfConstraint = void>
194class TaskQueueSpecializationConstrained {};
195
196template <typename Scheduler>
197struct TaskQueueSpecialization : TaskQueueSpecializationConstrained<Scheduler> {
198};
199
200template <int, typename>
201struct TaskPolicyData;
202
203} // end namespace Impl
204
205} // namespace Kokkos
206
207//----------------------------------------------------------------------------
208
209#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */
210#endif /* #ifndef KOKKOS_TASKSCHEDULER_FWD_HPP */