17 #ifndef KOKKOS_CORE_HPP
18 #define KOKKOS_CORE_HPP
19 #ifndef KOKKOS_IMPL_PUBLIC_INCLUDE
20 #define KOKKOS_IMPL_PUBLIC_INCLUDE
21 #define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
30 #pragma push_macro("min")
32 #define KOKKOS_IMPL_PUSH_MACRO_MIN
35 #pragma push_macro("max")
37 #define KOKKOS_IMPL_PUSH_MACRO_MAX
43 #include <Kokkos_Core_fwd.hpp>
45 #include <KokkosCore_Config_DeclareBackend.hpp>
47 #include <Kokkos_Half.hpp>
48 #include <Kokkos_AnonymousSpace.hpp>
50 #include <Kokkos_Clamp.hpp>
51 #include <Kokkos_MinMax.hpp>
52 #include <Kokkos_MathematicalConstants.hpp>
53 #include <Kokkos_MathematicalFunctions.hpp>
54 #include <Kokkos_MathematicalSpecialFunctions.hpp>
55 #include <Kokkos_NumericTraits.hpp>
56 #include <Kokkos_BitManipulation.hpp>
57 #include <Kokkos_Swap.hpp>
58 #include <Kokkos_MemoryPool.hpp>
59 #include <Kokkos_Array.hpp>
60 #include <Kokkos_View.hpp>
63 #include <Kokkos_hwloc.hpp>
64 #include <Kokkos_Timer.hpp>
65 #include <Kokkos_Tuners.hpp>
66 #include <Kokkos_TaskScheduler.hpp>
67 #include <Kokkos_Complex.hpp>
68 #include <Kokkos_CopyViews.hpp>
69 #include <impl/Kokkos_TeamMDPolicy.hpp>
70 #include <impl/Kokkos_InitializationSettings.hpp>
80 void initialize(
int& argc,
char* argv[]);
83 InitializationSettings
const& settings = InitializationSettings());
87 void pre_initialize(
const InitializationSettings& settings);
89 void post_initialize(
const InitializationSettings& settings);
95 void declare_configuration_metadata(
const std::string& category,
96 const std::string& key,
97 const std::string& value);
101 [[nodiscard]]
bool is_initialized() noexcept;
102 [[nodiscard]]
bool is_finalized() noexcept;
104 [[nodiscard]]
int device_id() noexcept;
105 [[nodiscard]]
int num_devices() noexcept;
106 [[nodiscard]]
int num_threads() noexcept;
108 bool show_warnings() noexcept;
109 bool tune_internals() noexcept;
134 void push_finalize_hook(std::function<
void()> f);
136 void fence(const std::
string& name );
139 void print_configuration(std::ostream& os,
bool verbose = false);
152 template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
153 inline void* kokkos_malloc(
const std::string& arg_alloc_label,
154 const size_t arg_alloc_size) {
155 using MemorySpace =
typename Space::memory_space;
156 return Impl::SharedAllocationRecord<MemorySpace>::allocate_tracked(
157 MemorySpace(), arg_alloc_label, arg_alloc_size);
160 template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
161 inline void* kokkos_malloc(
const size_t arg_alloc_size) {
162 using MemorySpace =
typename Space::memory_space;
163 return Impl::SharedAllocationRecord<MemorySpace>::allocate_tracked(
164 MemorySpace(),
"no-label", arg_alloc_size);
167 template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
168 inline void kokkos_free(
void* arg_alloc) {
169 using MemorySpace =
typename Space::memory_space;
170 return Impl::SharedAllocationRecord<MemorySpace>::deallocate_tracked(
174 template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
175 inline void* kokkos_realloc(
void* arg_alloc,
const size_t arg_alloc_size) {
176 using MemorySpace =
typename Space::memory_space;
177 return Impl::SharedAllocationRecord<MemorySpace>::reallocate_tracked(
178 arg_alloc, arg_alloc_size);
195 inline std::string scopeguard_correct_usage() {
198 " std::unique_ptr<Kokkos::ScopeGuard> guard =\n"
199 " !Kokkos::is_initialized() && !Kokkos::is_finalized()?\n"
200 " new ScopeGuard(argc,argv) : nullptr;\n");
203 inline std::string scopeguard_create_while_initialized_warning() {
205 "Kokkos Error: Creating a ScopeGuard while Kokkos is initialized "
207 .append(scopeguard_correct_usage());
210 inline std::string scopeguard_create_after_finalize_warning() {
212 "Kokkos Error: Creating a ScopeGuard after Kokkos was finalized "
214 .append(scopeguard_correct_usage());
217 inline std::string scopeguard_destruct_after_finalize_warning() {
219 "Kokkos Error: Destroying a ScopeGuard after Kokkos was finalized "
221 .append(scopeguard_correct_usage());
226 class KOKKOS_ATTRIBUTE_NODISCARD ScopeGuard {
228 template <
class... Args>
229 #if defined(__has_cpp_attribute) && __has_cpp_attribute(nodiscard) >= 201907
232 ScopeGuard(Args&&... args) {
233 if (is_initialized()) {
235 Impl::scopeguard_create_while_initialized_warning().c_str());
237 if (is_finalized()) {
238 Kokkos::abort(Impl::scopeguard_create_after_finalize_warning().c_str());
240 initialize(static_cast<Args&&>(args)...);
244 if (is_finalized()) {
245 Kokkos::abort(Impl::scopeguard_destruct_after_finalize_warning().c_str());
250 ScopeGuard& operator=(
const ScopeGuard&) =
delete;
251 ScopeGuard& operator=(ScopeGuard&&) =
delete;
252 ScopeGuard(
const ScopeGuard&) =
delete;
253 ScopeGuard(ScopeGuard&&) =
delete;
259 namespace Experimental {
264 template <
class ExecSpace,
class... Args>
265 std::vector<ExecSpace> partition_space(ExecSpace
const& space, Args...) {
266 static_assert(is_execution_space<ExecSpace>::value,
267 "Kokkos Error: partition_space expects an Execution Space as "
270 (... && std::is_arithmetic_v<Args>),
271 "Kokkos Error: partitioning arguments must be integers or floats");
272 std::vector<ExecSpace> instances(
sizeof...(Args));
273 for (
int s = 0; s < int(
sizeof...(Args)); s++) instances[s] = space;
277 template <
class ExecSpace,
class T>
278 std::vector<ExecSpace> partition_space(ExecSpace
const& space,
279 std::vector<T>
const& weights) {
280 static_assert(is_execution_space<ExecSpace>::value,
281 "Kokkos Error: partition_space expects an Execution Space as "
284 std::is_arithmetic<T>::value,
285 "Kokkos Error: partitioning arguments must be integers or floats");
287 std::vector<ExecSpace> instances(weights.size());
288 for (
int s = 0; s < int(weights.size()); s++) instances[s] = space;
294 #include <Kokkos_Crs.hpp>
295 #include <Kokkos_WorkGraphPolicy.hpp>
300 #include <impl/Kokkos_Combined_Reducer.hpp>
303 #include <Kokkos_AcquireUniqueTokenImpl.hpp>
308 #if defined(KOKKOS_IMPL_PUSH_MACRO_MIN)
309 #pragma pop_macro("min")
310 #undef KOKKOS_IMPL_PUSH_MACRO_MIN
312 #if defined(KOKKOS_IMPL_PUSH_MACRO_MAX)
313 #pragma pop_macro("max")
314 #undef KOKKOS_IMPL_PUSH_MACRO_MAX
320 #ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
321 #undef KOKKOS_IMPL_PUBLIC_INCLUDE
322 #undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
Declaration and definition of Kokkos::Vectorization interface.
Declaration and definition of Kokkos::pair.