NVIDIA IndeX API nvidia_logo_transpbg.gif Up
cuda_shared_qualifier.h
1/******************************************************************************
2 * Copyright 2023 NVIDIA Corporation. All rights reserved.
3 *****************************************************************************/
4
5#ifndef NVIDIA_INDEX_CUDA_SHARED_QUALIFIER_H
6#define NVIDIA_INDEX_CUDA_SHARED_QUALIFIER_H
7
8// force inline
9#if defined(__CUDACC__) || defined(__CUDABE__)
10#define NV_IDX_FORCEINLINE __forceinline__
11#elif defined(__GNUC__)
12#define NV_IDX_FORCEINLINE inline
13#elif defined(_WIN32)
14#define NV_IDX_FORCEINLINE __forceinline
15#else
16#define NV_IDX_FORCEINLINE inline
17#endif
18
19// noinline
20#if defined(__CUDACC__) || defined(__CUDABE__)
21#define NV_IDX_NOINLINE __noinline__
22#elif defined(__GNUC__)
23#define NV_IDX_NOINLINE static
24#elif defined(_WIN32) && defined(_MSC_VER)
25#define NV_IDX_NOINLINE static __declspec(noinline)
26#else
27#define NV_IDX_NOINLINE static
28#endif
29
30#if defined(__CUDACC__) || defined(__CUDABE__)
31
32// CUDA code path
33#define NV_IDX_DEVICE_INLINE __device__ __forceinline__ // REVIEW THIS, should not be forceinline
34#define NV_IDX_DEVICE_NOINLINE __device__ __noinline__
35#define NV_IDX_DEVICE_FORCEINLINE __device__ __forceinline__
36
37#define NV_IDX_DEVICE_HOST_INLINE __host__ NV_IDX_DEVICE_INLINE
38#define NV_IDX_DEVICE_HOST_NOINLINE __host__ NV_IDX_DEVICE_NOINLINE
39#define NV_IDX_DEVICE_HOST_FORCEINLINE __host__ NV_IDX_DEVICE_FORCEINLINE
40
41#define NV_IDX_HOST_INLINE __host__ inline
42#define NV_IDX_HOST_NOINLINE __host__ NV_IDX_NOINLINE
43#define NV_IDX_HOST_FORCEINLINE __host__ NV_IDX_FORCEINLINE
44
45#define NV_IDX_CONSTANT static __device__ __constant__
46
47#else
48
49// CPU code path
50#define NV_IDX_DEVICE_INLINE inline
51#define NV_IDX_DEVICE_NOINLINE NV_IDX_NOINLINE
52#define NV_IDX_DEVICE_FORCEINLINE NV_IDX_FORCEINLINE
53
54#define NV_IDX_DEVICE_HOST_INLINE inline
55#define NV_IDX_DEVICE_HOST_NOINLINE NV_IDX_NOINLINE
56#define NV_IDX_DEVICE_HOST_FORCEINLINE NV_IDX_FORCEINLINE
57
58#define NV_IDX_HOST_INLINE inline
59#define NV_IDX_HOST_NOINLINE NV_IDX_NOINLINE
60#define NV_IDX_HOST_FORCEINLINE NV_IDX_FORCEINLINE
61
62#define NV_IDX_CONSTANT static const
63
64#endif // __CUDACC__
65
66// derived definitions:
67#define NV_IDX_DEVICE_INLINE_MEMBER NV_IDX_DEVICE_INLINE
68
69// CUDA requires 16 byte alignment. This shall be used for all structs that are shared between host
70// and device.
71#define NV_IDX_DEVICE_ALIGN alignas(16)
72
73#endif // NVIDIA_INDEX_CUDA_SHARED_QUALIFIER_H