12namespace alpaka::onHost::internal
19 template<
typename T_Type>
20 constexpr size_t stdSimdWidth()
24#if ALPAKA_HAS_STD_SIMD
25 template<
typename T_Type>
26 requires requires { alpakaStdSimd::native_simd<T_Type>::size(); }
27 constexpr size_t stdSimdWidth()
29 return alpakaStdSimd::native_simd<T_Type>::size() *
sizeof(T_Type);
34 template<
typename T_Type>
35 constexpr uint32_t getCPUSimdWidth()
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__)
71 constexpr size_t simdWidthInByte = stdSimdWidth<T_Type>() ? stdSimdWidth<T_Type>() : possibleSimdWidthBytes;
76 constexpr uint32_t getCPUNumPipelines()
84 constexpr uint32_t numPipes = 4u;
88 constexpr uint32_t getCPUCachelineSize()
90 constexpr uint32_t cachlineBytes =
91#ifdef __cpp_lib_hardware_interference_size
92 std::hardware_constructive_interference_size;
ALPAKA_FN_HOST_ACC constexpr auto divExZero(Integral a, Integral b) -> Integral
Returns the max(a / b, 1) as integer.