Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:33:17

0001 #ifndef VECCORE_SIMD_SIZES_H
0002 #define VECCORE_SIMD_SIZES_H
0003 
0004 namespace vecCore {
0005 
0006 // traits to choose a default vector size depending on the architecture
0007 // TODO: this has to be completed for types and architectures
0008 // TODO: we may replace this by calculating from compiler types ( if this is compiler-portable )
0009 template <typename T>
0010 constexpr size_t SIMDWidth()
0011 {
0012   return 1;
0013 }
0014 #ifdef __AVX512__
0015 template <>
0016 constexpr size_t SIMDWidth<double>()
0017 {
0018   return 8;
0019 }
0020 template <>
0021 constexpr size_t SIMDWidth<float>()
0022 {
0023   return 16;
0024 }
0025 template <>
0026 constexpr size_t SIMDWidth<uint32_t>()
0027 {
0028   return 16;
0029 }
0030 template <>
0031 constexpr size_t SIMDWidth<Int32_s>()
0032 {
0033   return 16;
0034 }
0035 template <>
0036 constexpr size_t SIMDWidth<uint16_t>()
0037 {
0038   return 32;
0039 }
0040 template <>
0041 constexpr size_t SIMDWidth<Int16_s>()
0042 {
0043   return 32;
0044 }
0045 #elif __AVX2__
0046 template <>
0047 constexpr size_t SIMDWidth<double>()
0048 {
0049   return 4;
0050 }
0051 template <>
0052 constexpr size_t SIMDWidth<float>()
0053 {
0054   return 8;
0055 }
0056 template <>
0057 constexpr size_t SIMDWidth<uint32_t>()
0058 {
0059   return 8;
0060 }
0061 template <>
0062 constexpr size_t SIMDWidth<Int32_s>()
0063 {
0064   return 8;
0065 }
0066 template <>
0067 constexpr size_t SIMDWidth<uint16_t>()
0068 {
0069   return 16;
0070 }
0071 template <>
0072 constexpr size_t SIMDWidth<Int16_s>()
0073 {
0074   return 16;
0075 }
0076 #elif __AVX__
0077 template <>
0078 constexpr size_t SIMDWidth<double>()
0079 {
0080   return 4;
0081 }
0082 template <>
0083 constexpr size_t SIMDWidth<float>()
0084 {
0085   return 8;
0086 }
0087 template <>
0088 constexpr size_t SIMDWidth<uint32_t>()
0089 {
0090   return 4;
0091 }
0092 template <>
0093 constexpr size_t SIMDWidth<Int32_s>()
0094 {
0095   return 4;
0096 }
0097 template <>
0098 constexpr size_t SIMDWidth<uint16_t>()
0099 {
0100   return 16;
0101 }
0102 template <>
0103 constexpr size_t SIMDWidth<Int16_s>()
0104 {
0105   return 16;
0106 }
0107 #elif __SSE__
0108 template <>
0109 constexpr size_t SIMDWidth<double>()
0110 {
0111   return 2;
0112 }
0113 template <>
0114 constexpr size_t SIMDWidth<float>()
0115 {
0116   return 4;
0117 }
0118 template <>
0119 constexpr size_t SIMDWidth<uint32_t>()
0120 {
0121   return 4;
0122 }
0123 template <>
0124 constexpr size_t SIMDWidth<Int32_s>()
0125 {
0126   return 4;
0127 }
0128 template <>
0129 constexpr size_t SIMDWidth<uint16_t>()
0130 {
0131   return 8;
0132 }
0133 template <>
0134 constexpr size_t SIMDWidth<Int16_s>()
0135 {
0136   return 8;
0137 }
0138 #endif
0139 }
0140 
0141 #endif