18#if defined(ALPAKA_ACC_GPU_CUDA_ENABLED) || defined(ALPAKA_ACC_GPU_HIP_ENABLED)
20# ifdef ALPAKA_ACC_GPU_CUDA_ENABLED
22# include <cuda_runtime.h>
25# ifdef ALPAKA_ACC_GPU_HIP_ENABLED
26# if ALPAKA_COMP_HIP >= ALPAKA_VERSION_NUMBER(6, 2, 0) && ALPAKA_COMP_HIP < ALPAKA_VERSION_NUMBER(7, 0, 0)
27# define HIP_ENABLE_WARP_SYNC_BUILTINS
29# include <hip/hip_runtime.h>
37 tuple<char1, double1, float1, int1, long1, longlong1, short1, uchar1, uint1, ulong1, ulonglong1, ushort1>;
39 tuple<char2, double2, float2, int2, long2, longlong2, short2, uchar2, uint2, ulong2, ulonglong2, ushort2>;
56# if ALPAKA_COMP_CLANG_CUDA
58 __cuda_builtin_threadIdx_t,
59 __cuda_builtin_blockIdx_t,
60 __cuda_builtin_blockDim_t,
61 __cuda_builtin_gridDim_t
74# if defined(CUDART_VERSION) && (ALPAKA_VVRRP_TO_VERSION(CUDART_VERSION) >= ALPAKA_VERSION_NUMBER(13, 0, 0))
95 Concatenate<CudaHipBuiltinTypes1, CudaHipBuiltinTypes2, CudaHipBuiltinTypes3, CudaHipBuiltinTypes4>;
101# ifdef ALPAKA_ACC_GPU_CUDA_ENABLED
102 namespace cuda::trait
109# ifdef ALPAKA_ACC_GPU_HIP_ENABLED
113 inline constexpr auto isHipBuiltInType = alpaka::detail::isCudaHipBuiltInType<T>;
121 struct DimType<T,
std::enable_if_t<meta::Contains<alpaka::detail::CudaHipBuiltinTypes1, T>::value>>
128 struct DimType<T,
std::enable_if_t<meta::Contains<alpaka::detail::CudaHipBuiltinTypes2, T>::value>>
135 struct DimType<T,
std::enable_if_t<meta::Contains<alpaka::detail::CudaHipBuiltinTypes3, T>::value>>
142 struct DimType<T,
std::enable_if_t<meta::Contains<alpaka::detail::CudaHipBuiltinTypes4, T>::value>>
149 struct ElemType<T,
std::enable_if_t<alpaka::detail::isCudaHipBuiltInType<T>>>
151 using type =
decltype(std::declval<T>().x);
154 template<
typename TCudaHipBuiltin>
155 struct GetExtents<TCudaHipBuiltin,
std::enable_if_t<alpaka::detail::isCudaHipBuiltInType<TCudaHipBuiltin>>>
162 if constexpr(dim == 1)
164 else if constexpr(dim == 2)
165 return {value.y, value.x};
166 else if constexpr(dim == 3)
167 return {value.z, value.y, value.x};
168 else if constexpr(dim == 4)
169 return {value.w, value.z, value.y, value.x};
171 static_assert(
sizeof(value) == 0,
"Not implemented");
177 template<
typename TCudaHipBuiltin>
178 struct GetOffsets<TCudaHipBuiltin,
std::enable_if_t<alpaka::detail::isCudaHipBuiltInType<TCudaHipBuiltin>>>
184 template<
typename TIdx>
185 struct IdxType<TIdx,
std::enable_if_t<alpaka::detail::isCudaHipBuiltInType<TIdx>>>
#define ALPAKA_UNREACHABLE(...)
Before CUDA 11.5 nvcc is unable to correctly identify return statements in 'if constexpr' branches....
#define ALPAKA_FN_HOST_ACC
#define ALPAKA_NO_HOST_ACC_WARNING
Disable nvcc warning: 'calling a host function from host device function.' Usage: ALPAKA_NO_HOST_ACC_...
constexpr auto isCudaBuiltInType
std::tuple< char3, dim3, double3, float3, int3, long3, longlong3, short3, uchar3, uint3, ulong3, ulonglong3, ushort3 > CudaHipBuiltinTypes3
std::tuple< char4, float4, int4, short4, uchar4, uint4, ushort4, double4, long4, longlong4, ulong4, ulonglong4 > CudaHipBuiltinTypes4
constexpr auto isCudaHipBuiltInType
std::tuple< char2, double2, float2, int2, long2, longlong2, short2, uchar2, uint2, ulong2, ulonglong2, ushort2 > CudaHipBuiltinTypes2
std::tuple< char1, double1, float1, int1, long1, longlong1, short1, uchar1, uint1, ulong1, ulonglong1, ushort1 > CudaHipBuiltinTypes1
meta::Concatenate< CudaHipBuiltinTypes1, CudaHipBuiltinTypes2, CudaHipBuiltinTypes3, CudaHipBuiltinTypes4 > CudaHipBuiltinTypes
The alpaka accelerator library.
typename trait::IdxType< T >::type Idx
std::integral_constant< std::size_t, N > DimInt
typename trait::DimType< T >::type Dim
The dimension type trait alias template to remove the ::type.
The dimension getter type trait.
decltype(std::declval< T >().x) type
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto operator()(TCudaHipBuiltin const &value) const -> Vec< Dim< TCudaHipBuiltin >, Idx< TCudaHipBuiltin > >
The GetExtents trait for getting the extents of an object as an alpaka::Vec.
The GetOffsets trait for getting the offsets of an object as an alpaka::Vec.