19 template<
typename T_Type>
24#if ALPAKA_HAS_STD_SIMD
25 template<
typename T_Type>
26 requires requires { alpakaStdSimd::native_simd<T_Type>::size(); }
29 return alpakaStdSimd::native_simd<T_Type>::size() *
sizeof(T_Type);
34 template<
typename T_Type>
37 constexpr size_t possibleSimdWidthBytes =
38#if defined(__AVX512BW__) || defined(__AVX512F__) || defined(__AVX512DQ__) || defined(__AVX512VL__)
40#elif defined(__riscv_vector)
45#elif defined(__AVX2__)
47#elif defined(__SSE__) || defined(__SSE2__) || defined(__SSE4_1__) || defined(__SSE4_2__)
50#elif defined(SVE_VECTOR_BITS)
53#elif defined(__ARM_FEATURE_SVE_BITS)
54 __ARM_FEATURE_SVE_BITS / 8;
56#elif defined(__ARM_FEATURE_SVE2_AES)
59#elif defined(__ARM_FEATURE_SVE)
61#elif defined(__ARM_NEON)
63#elif defined(__ALTIVEC__)
84 constexpr uint32_t numPipes = 4u;
90 constexpr uint32_t cachlineBytes =
91#ifdef __cpp_lib_hardware_interference_size
92 std::hardware_constructive_interference_size;
constexpr uint32_t getCPUSimdWidth()
constexpr size_t stdSimdWidth()
SIMD width in bytes defined by std::simd.
constexpr uint32_t getCPUNumPipelines()
constexpr uint32_t getCPUCachelineSize()
ALPAKA_FN_HOST_ACC constexpr auto divExZero(Integral a, Integral b) -> Integral
Returns the max(a / b, 1) as integer.