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>
49#include <Kokkos_LogicalSpaces.hpp>
51#include <Kokkos_MinMaxClamp.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_MemoryPool.hpp>
58#include <Kokkos_Array.hpp>
59#include <Kokkos_View.hpp>
62#include <Kokkos_hwloc.hpp>
63#include <Kokkos_Timer.hpp>
64#include <Kokkos_Tuners.hpp>
65#include <Kokkos_TaskScheduler.hpp>
66#include <Kokkos_Complex.hpp>
67#include <Kokkos_CopyViews.hpp>
68#include <impl/Kokkos_TeamMDPolicy.hpp>
69#include <impl/Kokkos_InitializationSettings.hpp>
79void initialize(
int& argc,
char* argv[]);
82 InitializationSettings
const& settings = InitializationSettings());
86void pre_initialize(
const InitializationSettings& settings);
88void post_initialize(
const InitializationSettings& settings);
94void declare_configuration_metadata(
const std::string& category,
95 const std::string& key,
96 const std::string& value);
100[[nodiscard]]
bool is_initialized() noexcept;
101[[nodiscard]]
bool is_finalized() noexcept;
103[[nodiscard]]
int device_id() noexcept;
104[[nodiscard]]
int num_threads() noexcept;
106bool show_warnings() noexcept;
107bool tune_internals() noexcept;
132void push_finalize_hook(std::function<
void()> f);
134void fence(const std::
string& name );
137void print_configuration(std::ostream& os,
bool verbose = false);
150template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
151inline void* kokkos_malloc(
const std::string& arg_alloc_label,
152 const size_t arg_alloc_size) {
153 using MemorySpace =
typename Space::memory_space;
154 return Impl::SharedAllocationRecord<MemorySpace>::allocate_tracked(
155 MemorySpace(), arg_alloc_label, arg_alloc_size);
158template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
159inline void* kokkos_malloc(
const size_t arg_alloc_size) {
160 using MemorySpace =
typename Space::memory_space;
161 return Impl::SharedAllocationRecord<MemorySpace>::allocate_tracked(
162 MemorySpace(),
"no-label", arg_alloc_size);
165template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
166inline void kokkos_free(
void* arg_alloc) {
167 using MemorySpace =
typename Space::memory_space;
168 return Impl::SharedAllocationRecord<MemorySpace>::deallocate_tracked(
172template <
class Space = Kokkos::DefaultExecutionSpace::memory_space>
173inline void* kokkos_realloc(
void* arg_alloc,
const size_t arg_alloc_size) {
174 using MemorySpace =
typename Space::memory_space;
175 return Impl::SharedAllocationRecord<MemorySpace>::reallocate_tracked(
176 arg_alloc, arg_alloc_size);
193inline std::string scopeguard_correct_usage() {
196 " std::unique_ptr<Kokkos::ScopeGuard> guard =\n"
197 " !Kokkos::is_initialized() && !Kokkos::is_finalized()?\n"
198 " new ScopeGuard(argc,argv) : nullptr;\n");
201inline std::string scopeguard_create_while_initialized_warning() {
203 "Kokkos Error: Creating a ScopeGuard while Kokkos is initialized "
205 .append(scopeguard_correct_usage());
208inline std::string scopeguard_create_after_finalize_warning() {
210 "Kokkos Error: Creating a ScopeGuard after Kokkos was finalized "
212 .append(scopeguard_correct_usage());
215inline std::string scopeguard_destruct_after_finalize_warning() {
217 "Kokkos Error: Destroying a ScopeGuard after Kokkos was finalized "
219 .append(scopeguard_correct_usage());
224class KOKKOS_ATTRIBUTE_NODISCARD ScopeGuard {
226 template <
class... Args>
227#if defined(__has_cpp_attribute) && __has_cpp_attribute(nodiscard) >= 201907
230 ScopeGuard(Args&&... args) {
231 if (is_initialized()) {
233 Impl::scopeguard_create_while_initialized_warning().c_str());
235 if (is_finalized()) {
236 Kokkos::abort(Impl::scopeguard_create_after_finalize_warning().c_str());
238 initialize(
static_cast<Args&&
>(args)...);
242 if (is_finalized()) {
243 Kokkos::abort(Impl::scopeguard_destruct_after_finalize_warning().c_str());
248 ScopeGuard& operator=(
const ScopeGuard&) =
delete;
249 ScopeGuard& operator=(ScopeGuard&&) =
delete;
250 ScopeGuard(
const ScopeGuard&) =
delete;
251 ScopeGuard(ScopeGuard&&) =
delete;
257namespace Experimental {
262template <
class ExecSpace,
class... Args>
263std::vector<ExecSpace> partition_space(ExecSpace
const& space, Args...) {
264 static_assert(is_execution_space<ExecSpace>::value,
265 "Kokkos Error: partition_space expects an Execution Space as "
268 (... && std::is_arithmetic_v<Args>),
269 "Kokkos Error: partitioning arguments must be integers or floats");
270 std::vector<ExecSpace> instances(
sizeof...(Args));
271 for (
int s = 0; s < int(
sizeof...(Args)); s++) instances[s] = space;
275template <
class ExecSpace,
class T>
276std::vector<ExecSpace> partition_space(ExecSpace
const& space,
277 std::vector<T>
const& weights) {
278 static_assert(is_execution_space<ExecSpace>::value,
279 "Kokkos Error: partition_space expects an Execution Space as "
282 std::is_arithmetic<T>::value,
283 "Kokkos Error: partitioning arguments must be integers or floats");
285 std::vector<ExecSpace> instances(weights.size());
286 for (
int s = 0; s < int(weights.size()); s++) instances[s] = space;
292#include <Kokkos_Crs.hpp>
293#include <Kokkos_WorkGraphPolicy.hpp>
298#include <impl/Kokkos_Combined_Reducer.hpp>
301#include <Kokkos_AcquireUniqueTokenImpl.hpp>
304#include <KokkosCore_Config_PostInclude.hpp>
309#if defined(KOKKOS_IMPL_PUSH_MACRO_MIN)
310#pragma pop_macro("min")
311#undef KOKKOS_IMPL_PUSH_MACRO_MIN
313#if defined(KOKKOS_IMPL_PUSH_MACRO_MAX)
314#pragma pop_macro("max")
315#undef KOKKOS_IMPL_PUSH_MACRO_MAX
321#ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
322#undef KOKKOS_IMPL_PUBLIC_INCLUDE
323#undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
Declaration and definition of Kokkos::pair.
Declaration and definition of Kokkos::Vectorization interface.
ScopeGuard Some user scope issues have been identified with some Kokkos::finalize calls; ScopeGuard a...