18#if defined(VCP_SPSP) or \
19 defined(VCP_SPDP) or \
21 #error conflicting precision definitions
28#if defined(MARDYN_SPSP)
29 #define VCP_PREC VCP_SPSP
30#elif defined(MARDYN_SPDP)
31 #define VCP_PREC VCP_SPDP
32#elif defined(MARDYN_DPDP)
33 #define VCP_PREC VCP_DPDP
35 #error Precision macro not defined.
39#if defined(VCP_VEC_TYPE) || defined(VCP_NOVEC) || defined(VCP_VEC_SSE3) || defined(VCP_VEC_AVX) || defined(VCP_VEC_AVX2) || \
40 defined(VCP_VEC_KNL) || defined(VCP_VEC_KNL_GATHER)
41 #error conflicting macro definitions
50#define VCP_VEC_KNL_GATHER 7
51#define VCP_VEC_AVX512F 8
52#define VCP_VEC_AVX512F_GATHER 9
54#define VCP_VEC_W__64 0
55#define VCP_VEC_W_128 1
56#define VCP_VEC_W_256 2
57#define VCP_VEC_W_512 3
59#if defined(__AVX2__) && not defined(__FMA__)
60 #warn AVX2 enabled, but no FMA found. Please enable fma to use avx2.
64#if defined(__AVX512F__) && defined(__AVX512ER__)
65 #if defined(__VCP_GATHER__)
66 #define VCP_VEC_TYPE VCP_VEC_KNL_GATHER
68 #define VCP_VEC_TYPE VCP_VEC_KNL
70#elif defined(__AVX512F__)
71 #if defined(__VCP_GATHER__)
72 #define VCP_VEC_TYPE VCP_VEC_AVX512F_GATHER
74 #define VCP_VEC_TYPE VCP_VEC_AVX512F
76#elif defined(__AVX2__) && defined(__FMA__)
77 #define VCP_VEC_TYPE VCP_VEC_AVX2
78#elif defined(__AVX__) && not defined(AVX128)
79 #define VCP_VEC_TYPE VCP_VEC_AVX
80#elif defined(__AVX__) && defined(AVX128)
81 #define VCP_VEC_TYPE VCP_VEC_SSE3
82#elif defined(__SSE3__)
83 #define VCP_VEC_TYPE VCP_VEC_SSE3
85 #define VCP_VEC_TYPE VCP_NOVEC
90 #warn Multiple vectorization methods specified. Will not use vectorization at all!
93 #define VCP_VEC_TYPE VCP_NOVEC
97#if VCP_VEC_TYPE==VCP_NOVEC
99#elif VCP_VEC_TYPE==VCP_VEC_SSE3
100 #include "pmmintrin.h"
103 #include "immintrin.h"
112typedef int countertype32;
114#if VCP_VEC_TYPE==VCP_NOVEC
116 #define VCP_VEC_WIDTH VCP_VEC_W__64
118 typedef uint8_t vcp_mask_vec;
119 typedef uint8_t vcp_mask_single;
120 typedef vcp_mask_vec vcp_lookupOrMask_vec;
121 typedef vcp_mask_single vcp_lookupOrMask_single;
123#elif VCP_VEC_TYPE==VCP_VEC_SSE3
125 #define VCP_VEC_WIDTH VCP_VEC_W_128
129 typedef __m128i vcp_mask_vec;
130 typedef vcp_mask_vec vcp_lookupOrMask_vec;
131 typedef vcp_mask_single vcp_lookupOrMask_single;
133#elif VCP_VEC_TYPE==VCP_VEC_AVX or VCP_VEC_TYPE==VCP_VEC_AVX2
135 #define VCP_VEC_WIDTH VCP_VEC_W_256
139 typedef __m256i vcp_mask_vec;
140 typedef vcp_mask_vec vcp_lookupOrMask_vec;
141 typedef vcp_mask_single vcp_lookupOrMask_single;
143#elif VCP_VEC_TYPE==VCP_VEC_KNL or \
144 VCP_VEC_TYPE==VCP_VEC_KNL_GATHER or \
145 VCP_VEC_TYPE==VCP_VEC_AVX512F or \
146 VCP_VEC_TYPE==VCP_VEC_AVX512F_GATHER
148 #define VCP_VEC_WIDTH VCP_VEC_W_512
151 #if VCP_PREC==VCP_SPSP or VCP_PREC==VCP_SPDP
152 typedef __mmask16 vcp_mask_vec;
153 typedef __mmask16 vcp_mask_single;
155 typedef __mmask8 vcp_mask_vec;
156 typedef __mmask8 vcp_mask_single;
159 #if VCP_VEC_TYPE==VCP_VEC_KNL or VCP_VEC_TYPE==VCP_VEC_AVX512F
160 typedef vcp_mask_vec vcp_lookupOrMask_vec;
161 typedef vcp_mask_single vcp_lookupOrMask_single;
164 typedef __m512i vcp_lookupOrMask_vec;
165 typedef countertype32 vcp_lookupOrMask_single;
175#pragma GCC diagnostic push
176#pragma GCC diagnostic ignored "-Wunused-variable"
Contains macro definitions for the intrinsics used for the vectorization.
typedef::xsd::cxx::tree::type type
C++ type corresponding to the anyType XML Schema built-in type.
Definition: vtk-punstructured.h:119