Kokkos Core Kernels Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Kokkos_Macros.hpp
1 /*
2 //@HEADER
3 // ************************************************************************
4 //
5 // Kokkos v. 3.0
6 // Copyright (2020) National Technology & Engineering
7 // Solutions of Sandia, LLC (NTESS).
8 //
9 // Under the terms of Contract DE-NA0003525 with NTESS,
10 // the U.S. Government retains certain rights in this software.
11 //
12 // Redistribution and use in source and binary forms, with or without
13 // modification, are permitted provided that the following conditions are
14 // met:
15 //
16 // 1. Redistributions of source code must retain the above copyright
17 // notice, this list of conditions and the following disclaimer.
18 //
19 // 2. Redistributions in binary form must reproduce the above copyright
20 // notice, this list of conditions and the following disclaimer in the
21 // documentation and/or other materials provided with the distribution.
22 //
23 // 3. Neither the name of the Corporation nor the names of the
24 // contributors may be used to endorse or promote products derived from
25 // this software without specific prior written permission.
26 //
27 // THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
28 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
31 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 //
39 // Questions? Contact Christian R. Trott (crtrott@sandia.gov)
40 //
41 // ************************************************************************
42 //@HEADER
43 */
44 
45 #ifndef KOKKOS_MACROS_HPP
46 #define KOKKOS_MACROS_HPP
47 
48 //----------------------------------------------------------------------------
63 #ifndef KOKKOS_DONT_INCLUDE_CORE_CONFIG_H
64 #include <KokkosCore_config.h>
65 #endif
66 
67 #include <impl/Kokkos_OldMacros.hpp>
68 
69 //----------------------------------------------------------------------------
100 //----------------------------------------------------------------------------
101 
102 #if defined(KOKKOS_ENABLE_SERIAL) || defined(KOKKOS_ENABLE_THREADS) || \
103  defined(KOKKOS_ENABLE_OPENMP) || defined(KOKKOS_ENABLE_HPX) || \
104  defined(KOKKOS_ENABLE_ROCM) || defined(KOKKOS_ENABLE_OPENMPTARGET) || \
105  defined(KOKKOS_ENABLE_HIP)
106 #define KOKKOS_INTERNAL_ENABLE_NON_CUDA_BACKEND
107 #endif
108 
109 #if !defined(KOKKOS_ENABLE_THREADS) && !defined(KOKKOS_ENABLE_CUDA) && \
110  !defined(KOKKOS_ENABLE_OPENMP) && !defined(KOKKOS_ENABLE_HPX) && \
111  !defined(KOKKOS_ENABLE_ROCM) && !defined(KOKKOS_ENABLE_OPENMPTARGET) && \
112  !defined(KOKKOS_ENABLE_HIP)
113 #define KOKKOS_INTERNAL_NOT_PARALLEL
114 #endif
115 
116 #define KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA
117 
118 #if defined(KOKKOS_ENABLE_CUDA) && defined(__CUDACC__)
119 // Compiling with a CUDA compiler.
120 //
121 // Include <cuda.h> to pick up the CUDA_VERSION macro defined as:
122 // CUDA_VERSION = ( MAJOR_VERSION * 1000 ) + ( MINOR_VERSION * 10 )
123 //
124 // When generating device code the __CUDA_ARCH__ macro is defined as:
125 // __CUDA_ARCH__ = ( MAJOR_CAPABILITY * 100 ) + ( MINOR_CAPABILITY * 10 )
126 
127 #include <cuda_runtime.h>
128 #include <cuda.h>
129 
130 #if !defined(CUDA_VERSION)
131 #error "#include <cuda.h> did not define CUDA_VERSION."
132 #endif
133 
134 #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 300)
135 // Compiling with CUDA compiler for device code.
136 #error "Cuda device capability >= 3.0 is required."
137 #endif
138 
139 #ifdef KOKKOS_ENABLE_CUDA_LAMBDA
140 #define KOKKOS_LAMBDA [=] __host__ __device__
141 
142 #if defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20)
143 #define KOKKOS_CLASS_LAMBDA [ =, *this ] __host__ __device__
144 #endif
145 
146 #if defined(__NVCC__)
147 #define KOKKOS_IMPL_NEED_FUNCTOR_WRAPPER
148 #endif
149 #else // !defined(KOKKOS_ENABLE_CUDA_LAMBDA)
150 #undef KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA
151 #endif // !defined(KOKKOS_ENABLE_CUDA_LAMBDA)
152 
153 #if (10000 > CUDA_VERSION)
154 #define KOKKOS_ENABLE_PRE_CUDA_10_DEPRECATION_API
155 #endif
156 
157 #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 700)
158 // PTX atomics with memory order semantics are only available on volta and later
159 #if !defined(KOKKOS_DISABLE_CUDA_ASM)
160 #if !defined(KOKKOS_ENABLE_CUDA_ASM)
161 #define KOKKOS_ENABLE_CUDA_ASM
162 #if !defined(KOKKOS_DISABLE_CUDA_ASM_ATOMICS)
163 #define KOKKOS_ENABLE_CUDA_ASM_ATOMICS
164 #endif
165 #endif
166 #endif
167 #endif
168 
169 #endif // #if defined( KOKKOS_ENABLE_CUDA ) && defined( __CUDACC__ )
170 
171 #if defined(KOKKOS_ENABLE_HIP)
172 
173 #define KOKKOS_IMPL_HIP_CLANG_WORKAROUND
174 
175 #define HIP_ENABLE_PRINTF
176 #include <hip/hip_runtime.h>
177 #include <hip/hip_runtime_api.h>
178 
179 #define KOKKOS_LAMBDA [=] __host__ __device__
180 #endif // #if defined(KOKKOS_ENABLE_HIP)
181 
182 //----------------------------------------------------------------------------
183 // Mapping compiler built-ins to KOKKOS_COMPILER_*** macros
184 
185 #if defined(__NVCC__)
186 // NVIDIA compiler is being used.
187 // Code is parsed and separated into host and device code.
188 // Host code is compiled again with another compiler.
189 // Device code is compile to 'ptx'.
190 #define KOKKOS_COMPILER_NVCC __NVCC__
191 #endif // #if defined( __NVCC__ )
192 
193 #if !defined(KOKKOS_LAMBDA)
194 #define KOKKOS_LAMBDA [=]
195 #endif
196 
197 #if (defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20)) && \
198  !defined(KOKKOS_CLASS_LAMBDA)
199 #define KOKKOS_CLASS_LAMBDA [ =, *this ]
200 #endif
201 
202 //#if !defined( __CUDA_ARCH__ ) // Not compiling Cuda code to 'ptx'.
203 
204 // Intel compiler for host code.
205 
206 #if defined(__INTEL_COMPILER)
207 #define KOKKOS_COMPILER_INTEL __INTEL_COMPILER
208 #elif defined(__ICC)
209 // Old define
210 #define KOKKOS_COMPILER_INTEL __ICC
211 #elif defined(__ECC)
212 // Very old define
213 #define KOKKOS_COMPILER_INTEL __ECC
214 #endif
215 
216 // CRAY compiler for host code
217 #if defined(_CRAYC)
218 #define KOKKOS_COMPILER_CRAYC _CRAYC
219 #endif
220 
221 #if defined(__IBMCPP__)
222 // IBM C++
223 #define KOKKOS_COMPILER_IBM __IBMCPP__
224 #elif defined(__IBMC__)
225 #define KOKKOS_COMPILER_IBM __IBMC__
226 #endif
227 
228 #if defined(__APPLE_CC__)
229 #define KOKKOS_COMPILER_APPLECC __APPLE_CC__
230 #endif
231 
232 #if defined(__clang__) && !defined(KOKKOS_COMPILER_INTEL)
233 #define KOKKOS_COMPILER_CLANG \
234  __clang_major__ * 100 + __clang_minor__ * 10 + __clang_patchlevel__
235 #endif
236 
237 #if !defined(__clang__) && !defined(KOKKOS_COMPILER_INTEL) && defined(__GNUC__)
238 #define KOKKOS_COMPILER_GNU \
239  __GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__
240 
241 #if (472 > KOKKOS_COMPILER_GNU)
242 #error "Compiling with GCC version earlier than 4.7.2 is not supported."
243 #endif
244 #endif
245 
246 #if defined(__PGIC__)
247 #define KOKKOS_COMPILER_PGI \
248  __PGIC__ * 100 + __PGIC_MINOR__ * 10 + __PGIC_PATCHLEVEL__
249 
250 #if (1540 > KOKKOS_COMPILER_PGI)
251 #error "Compiling with PGI version earlier than 15.4 is not supported."
252 #endif
253 #endif
254 
255 #if defined(_MSC_VER) && !defined(KOKKOS_COMPILER_INTEL)
256 #define KOKKOS_COMPILER_MSVC _MSC_VER
257 #endif
258 
259 //#endif // #if !defined( __CUDA_ARCH__ )
260 //----------------------------------------------------------------------------
261 // Language info: C++, CUDA, OPENMP
262 
263 #if defined(KOKKOS_ENABLE_CUDA)
264 // Compiling Cuda code to 'ptx'
265 
266 #define KOKKOS_FORCEINLINE_FUNCTION __device__ __host__ __forceinline__
267 #define KOKKOS_IMPL_FORCEINLINE __forceinline__
268 #define KOKKOS_INLINE_FUNCTION __device__ __host__ inline
269 #define KOKKOS_FUNCTION __device__ __host__
270 #if defined(KOKKOS_COMPILER_NVCC)
271 #define KOKKOS_INLINE_FUNCTION_DELETED inline
272 #else
273 #define KOKKOS_INLINE_FUNCTION_DELETED __device__ __host__ inline
274 #endif
275 #if (CUDA_VERSION < 10000)
276 #define KOKKOS_DEFAULTED_FUNCTION __host__ __device__ inline
277 #else
278 #define KOKKOS_DEFAULTED_FUNCTION inline
279 #endif
280 #endif
281 
282 #if defined(KOKKOS_ENABLE_HIP)
283 
284 #define KOKKOS_FORCEINLINE_FUNCTION __device__ __host__ __forceinline__
285 #define KOKKOS_INLINE_FUNCTION __device__ __host__ inline
286 #define KOKKOS_DEFAULTED_FUNCTION __device__ __host__ inline
287 #define KOKKOS_INLINE_FUNCTION_DELETED __device__ __host__ inline
288 #define KOKKOS_FUNCTION __device__ __host__
289 #if defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20)
290 #define KOKKOS_CLASS_LAMBDA [ =, *this ] __host__ __device__
291 #endif
292 #endif // #if defined( KOKKOS_ENABLE_HIP )
293 
294 #if defined(KOKKOS_ENABLE_ROCM) && defined(__HCC__)
295 
296 #define KOKKOS_FORCEINLINE_FUNCTION __attribute__((amp, cpu)) inline
297 #define KOKKOS_INLINE_FUNCTION __attribute__((amp, cpu)) inline
298 #define KOKKOS_FUNCTION __attribute__((amp, cpu))
299 #define KOKKOS_LAMBDA [=] __attribute__((amp, cpu))
300 #define KOKKOS_DEFAULTED_FUNCTION __attribute__((amp, cpu)) inline
301 #endif
302 
303 #if defined(_OPENMP)
304 // Compiling with OpenMP.
305 // The value of _OPENMP is an integer value YYYYMM
306 // where YYYY and MM are the year and month designation
307 // of the supported OpenMP API version.
308 #endif // #if defined( _OPENMP )
309 
310 //----------------------------------------------------------------------------
311 // Intel compiler macros
312 
313 #if defined(KOKKOS_COMPILER_INTEL)
314 #define KOKKOS_ENABLE_PRAGMA_UNROLL 1
315 #define KOKKOS_ENABLE_PRAGMA_LOOPCOUNT 1
316 #define KOKKOS_ENABLE_PRAGMA_VECTOR 1
317 #if (1800 > KOKKOS_COMPILER_INTEL)
318 #define KOKKOS_ENABLE_PRAGMA_SIMD 1
319 #endif
320 
321 #if (__INTEL_COMPILER > 1400)
322 #define KOKKOS_ENABLE_PRAGMA_IVDEP 1
323 #endif
324 
325 #if !defined(KOKKOS_MEMORY_ALIGNMENT)
326 #define KOKKOS_MEMORY_ALIGNMENT 64
327 #endif
328 
329 #define KOKKOS_RESTRICT __restrict__
330 
331 #ifndef KOKKOS_IMPL_ALIGN_PTR
332 #define KOKKOS_IMPL_ALIGN_PTR(size) __attribute__((align_value(size)))
333 #endif
334 
335 #if (1400 > KOKKOS_COMPILER_INTEL)
336 #if (1300 > KOKKOS_COMPILER_INTEL)
337 #error \
338  "Compiling with Intel version earlier than 13.0 is not supported. Official minimal version is 14.0."
339 #else
340 #warning \
341  "Compiling with Intel version 13.x probably works but is not officially supported. Official minimal version is 14.0."
342 #endif
343 #endif
344 
345 #if !defined(KOKKOS_ENABLE_ASM) && !defined(_WIN32)
346 #define KOKKOS_ENABLE_ASM 1
347 #endif
348 
349 #if !defined(KOKKOS_FORCEINLINE_FUNCTION)
350 #if !defined(_WIN32)
351 #define KOKKOS_FORCEINLINE_FUNCTION inline __attribute__((always_inline))
352 #define KOKKOS_IMPL_FORCEINLINE __attribute__((always_inline))
353 #else
354 #define KOKKOS_FORCEINLINE_FUNCTION inline
355 #endif
356 #endif
357 
358 #if defined(KOKKOS_ARCH_AVX512MIC)
359 #define KOKKOS_ENABLE_RFO_PREFETCH 1
360 #if (KOKKOS_COMPILER_INTEL < 1800) && !defined(KOKKOS_KNL_USE_ASM_WORKAROUND)
361 #define KOKKOS_KNL_USE_ASM_WORKAROUND 1
362 #endif
363 #endif
364 
365 #if (1800 > KOKKOS_COMPILER_INTEL)
366 #define KOKKOS_IMPL_INTEL_WORKAROUND_NOEXCEPT_SPECIFICATION_VIRTUAL_FUNCTION
367 #endif
368 
369 #if defined(__MIC__)
370 // Compiling for Xeon Phi
371 #endif
372 #endif
373 
374 //----------------------------------------------------------------------------
375 // Cray compiler macros
376 
377 #if defined(KOKKOS_COMPILER_CRAYC)
378 #endif
379 
380 //----------------------------------------------------------------------------
381 // IBM Compiler macros
382 
383 #if defined(KOKKOS_COMPILER_IBM)
384 #define KOKKOS_ENABLE_PRAGMA_UNROLL 1
385 //#define KOKKOS_ENABLE_PRAGMA_IVDEP 1
386 //#define KOKKOS_ENABLE_PRAGMA_LOOPCOUNT 1
387 //#define KOKKOS_ENABLE_PRAGMA_VECTOR 1
388 //#define KOKKOS_ENABLE_PRAGMA_SIMD 1
389 
390 #if !defined(KOKKOS_ENABLE_ASM)
391 #define KOKKOS_ENABLE_ASM 1
392 #endif
393 #endif
394 
395 //----------------------------------------------------------------------------
396 // CLANG compiler macros
397 
398 #if defined(KOKKOS_COMPILER_CLANG)
399 //#define KOKKOS_ENABLE_PRAGMA_UNROLL 1
400 //#define KOKKOS_ENABLE_PRAGMA_IVDEP 1
401 //#define KOKKOS_ENABLE_PRAGMA_LOOPCOUNT 1
402 //#define KOKKOS_ENABLE_PRAGMA_VECTOR 1
403 //#define KOKKOS_ENABLE_PRAGMA_SIMD 1
404 
405 #if !defined(KOKKOS_FORCEINLINE_FUNCTION)
406 #define KOKKOS_FORCEINLINE_FUNCTION inline __attribute__((always_inline))
407 #define KOKKOS_IMPL_FORCEINLINE __attribute__((always_inline))
408 #endif
409 
410 #if !defined(KOKKOS_IMPL_ALIGN_PTR)
411 #define KOKKOS_IMPL_ALIGN_PTR(size) __attribute__((aligned(size)))
412 #endif
413 
414 #endif
415 
416 //----------------------------------------------------------------------------
417 // GNU Compiler macros
418 
419 #if defined(KOKKOS_COMPILER_GNU)
420 //#define KOKKOS_ENABLE_PRAGMA_UNROLL 1
421 //#define KOKKOS_ENABLE_PRAGMA_IVDEP 1
422 //#define KOKKOS_ENABLE_PRAGMA_LOOPCOUNT 1
423 //#define KOKKOS_ENABLE_PRAGMA_VECTOR 1
424 //#define KOKKOS_ENABLE_PRAGMA_SIMD 1
425 
426 #if defined(KOKKOS_ARCH_AVX512MIC)
427 #define KOKKOS_ENABLE_RFO_PREFETCH 1
428 #endif
429 
430 #if !defined(KOKKOS_FORCEINLINE_FUNCTION)
431 #define KOKKOS_FORCEINLINE_FUNCTION inline __attribute__((always_inline))
432 #define KOKKOS_IMPL_FORCEINLINE __attribute__((always_inline))
433 #endif
434 
435 #define KOKKOS_RESTRICT __restrict__
436 
437 #if !defined(KOKKOS_ENABLE_ASM) && !defined(__PGIC__) && \
438  (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || \
439  defined(__x86_64__) || defined(__PPC64__))
440 #define KOKKOS_ENABLE_ASM 1
441 #endif
442 #endif
443 
444 //----------------------------------------------------------------------------
445 
446 #if defined(KOKKOS_COMPILER_PGI)
447 #define KOKKOS_ENABLE_PRAGMA_UNROLL 1
448 #define KOKKOS_ENABLE_PRAGMA_IVDEP 1
449 //#define KOKKOS_ENABLE_PRAGMA_LOOPCOUNT 1
450 #define KOKKOS_ENABLE_PRAGMA_VECTOR 1
451 //#define KOKKOS_ENABLE_PRAGMA_SIMD 1
452 #endif
453 
454 //----------------------------------------------------------------------------
455 
456 #if defined(KOKKOS_COMPILER_NVCC)
457 #if defined(__CUDA_ARCH__)
458 #define KOKKOS_ENABLE_PRAGMA_UNROLL 1
459 #endif
460 #endif
461 
462 //----------------------------------------------------------------------------
463 // Define function marking macros if compiler specific macros are undefined:
464 
465 #if !defined(KOKKOS_FORCEINLINE_FUNCTION)
466 #define KOKKOS_FORCEINLINE_FUNCTION inline
467 #endif
468 
469 #if !defined(KOKKOS_IMPL_FORCEINLINE)
470 #define KOKKOS_IMPL_FORCEINLINE inline
471 #endif
472 
473 #if !defined(KOKKOS_INLINE_FUNCTION)
474 #define KOKKOS_INLINE_FUNCTION inline
475 #endif
476 
477 #if !defined(KOKKOS_FUNCTION)
478 #define KOKKOS_FUNCTION
479 #endif
480 
481 #if !defined(KOKKOS_INLINE_FUNCTION_DELETED)
482 #define KOKKOS_INLINE_FUNCTION_DELETED inline
483 #endif
484 
485 #if !defined(KOKKOS_DEFAULTED_FUNCTION)
486 #define KOKKOS_DEFAULTED_FUNCTION inline
487 #endif
488 //----------------------------------------------------------------------------
489 // Define empty macro for restrict if necessary:
490 
491 #if !defined(KOKKOS_RESTRICT)
492 #define KOKKOS_RESTRICT
493 #endif
494 
495 //----------------------------------------------------------------------------
496 // Define Macro for alignment:
497 
498 #if !defined(KOKKOS_MEMORY_ALIGNMENT)
499 #define KOKKOS_MEMORY_ALIGNMENT 64
500 #endif
501 
502 #if !defined(KOKKOS_MEMORY_ALIGNMENT_THRESHOLD)
503 #define KOKKOS_MEMORY_ALIGNMENT_THRESHOLD 1
504 #endif
505 
506 #if !defined(KOKKOS_IMPL_ALIGN_PTR)
507 #define KOKKOS_IMPL_ALIGN_PTR(size) /* */
508 #endif
509 
510 //----------------------------------------------------------------------------
511 // Determine the default execution space for parallel dispatch.
512 // There is zero or one default execution space specified.
513 
514 #if 1 < ((defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA) ? 1 : 0) + \
515  (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP) ? 1 : 0) + \
516  (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM) ? 1 : 0) + \
517  (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET) ? 1 : 0) + \
518  (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP) ? 1 : 0) + \
519  (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS) ? 1 : 0) + \
520  (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX) ? 1 : 0) + \
521  (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL) ? 1 : 0))
522 #error "More than one KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_* specified."
523 #endif
524 
525 // If default is not specified then chose from enabled execution spaces.
526 // Priority: CUDA, HIP, ROCM, OPENMPTARGET, OPENMP, THREADS, HPX, SERIAL
527 #if defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA)
528 #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP)
529 #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM)
530 #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET)
531 #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP)
532 #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS)
533 #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX)
534 #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL)
535 #elif defined(KOKKOS_ENABLE_CUDA)
536 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA
537 #elif defined(KOKKOS_ENABLE_HIP)
538 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP
539 #elif defined(KOKKOS_ENABLE_ROCM)
540 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM
541 #elif defined(KOKKOS_ENABLE_OPENMPTARGET)
542 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET
543 #elif defined(KOKKOS_ENABLE_OPENMP)
544 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP
545 #elif defined(KOKKOS_ENABLE_THREADS)
546 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS
547 #elif defined(KOKKOS_ENABLE_HPX)
548 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX
549 #else
550 #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL
551 #endif
552 
553 //----------------------------------------------------------------------------
554 // Determine for what space the code is being compiled:
555 
556 #if defined(__CUDACC__) && defined(__CUDA_ARCH__) && defined(KOKKOS_ENABLE_CUDA)
557 #define KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA
558 #elif defined(__HCC__) && defined(__HCC_ACCELERATOR__) && \
559  defined(KOKKOS_ENABLE_ROCM)
560 #define KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_ROCM_GPU
561 #elif defined(__HIPCC__) && \
562  (defined(__HCC_ACCELERATOR__) || defined(__CUDA_ARCH__)) && \
563  defined(KOKKOS_ENABLE_HIP)
564 #define KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HIP_GPU
565 #else
566 #define KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST
567 #endif
568 
569 //----------------------------------------------------------------------------
570 
571 #if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) || \
572  (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600)
573 #if defined(KOKKOS_ENABLE_PERFORMANCE_POSIX_MEMALIGN)
574 #define KOKKOS_ENABLE_POSIX_MEMALIGN 1
575 #endif
576 #endif
577 
578 //----------------------------------------------------------------------------
579 // If compiling with CUDA, we must use relocateable device code
580 // to enable the task policy.
581 
582 #if defined(KOKKOS_ENABLE_CUDA)
583 #if defined(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE)
584 #define KOKKOS_ENABLE_TASKDAG
585 #endif
586 #else
587 #ifndef KOKKOS_ENABLE_HIP
588 #define KOKKOS_ENABLE_TASKDAG
589 #endif
590 #endif
591 
592 #if defined(KOKKOS_ENABLE_CUDA)
593 #define KOKKOS_IMPL_CUDA_VERSION_9_WORKAROUND
594 #if (__CUDA_ARCH__)
595 #define KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK
596 #endif
597 #endif
598 
599 #define KOKKOS_INVALID_INDEX (~std::size_t(0))
600 
601 #ifdef KOKKOS_ENABLE_DEPRECATED_CODE
602 #define KOKKOS_IMPL_CTOR_DEFAULT_ARG 0
603 #else
604 #define KOKKOS_IMPL_CTOR_DEFAULT_ARG KOKKOS_INVALID_INDEX
605 #endif
606 
607 #if (defined(KOKKOS_ENABLE_CXX14) || defined(KOKKOS_ENABLE_CXX17) || \
608  defined(KOKKOS_ENABLE_CXX20))
609 #define KOKKOS_CONSTEXPR_14 constexpr
610 #define KOKKOS_DEPRECATED [[deprecated]]
611 #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE
612 #else
613 #define KOKKOS_CONSTEXPR_14
614 #if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG)
615 #define KOKKOS_DEPRECATED
616 #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE __attribute__((deprecated))
617 #else
618 #define KOKKOS_DEPRECATED
619 #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE
620 #endif
621 #endif
622 
623 // DJS 05/28/2019: Bugfix: Issue 2155
624 // Use KOKKOS_ENABLE_CUDA_LDG_INTRINSIC to avoid memory leak in RandomAccess
625 // View
626 #if defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_CUDA_LDG_INTRINSIC)
627 #define KOKKOS_ENABLE_CUDA_LDG_INTRINSIC
628 #endif
629 
630 #if defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20)
631 #define KOKKOS_ATTRIBUTE_NODISCARD [[nodiscard]]
632 #else
633 #define KOKKOS_ATTRIBUTE_NODISCARD
634 #endif
635 
636 #if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) || \
637  defined(KOKKOS_COMPILER_INTEL) || defined(KOKKOS_COMPILER_PGI)
638 #define KOKKOS_IMPL_ENABLE_STACKTRACE
639 #define KOKKOS_IMPL_ENABLE_CXXABI
640 #endif
641 
642 // WORKAROUND for AMD aomp which apparently defines CUDA_ARCH when building for
643 // AMD GPUs with OpenMP Target ???
644 #if defined(__CUDA_ARCH__) && !defined(__CUDACC__) && \
645  !defined(KOKKOS_ENABLE_HIP) && !defined(KOKKOS_ENABLE_CUDA)
646 #undef __CUDA_ARCH__
647 #endif
648 
649 #if defined(KOKKOS_COMPILER_MSVC)
650 #define KOKKOS_THREAD_LOCAL __declspec(thread)
651 #else
652 #define KOKKOS_THREAD_LOCAL __thread
653 #endif
654 
655 #endif // #ifndef KOKKOS_MACROS_HPP