This file contains the declarations of types used to manage vectorization. Since several possible mechanisms exist, a choice must be made based on the machine architecture and compilation options. Each mechanism uses vectors of different sizes. In our case, since vectorization is primarily used for calculations on doubles, the size of a vector will be equal to the number of doubles that can fit into a vector.
Currently, we support the following modes in order of priority. If a mode is supported, the others are not used.
- AVX512 for Intel Knight Landing (KNL) or Xeon Skylake type architectures. The vector size in this mode is 8.
- AVX. For this mode, Arcane must be compiled with the option '–with-avx'. There are two modes: classic AVX and AVX2. For now, only the former is used, due to a lack of machines to test the latter. The vector size in this mode is 4.
- SSE. This mode is available by default because it exists on all x64 platforms. There are also several versions, and we limit ourselves to version 2. The vector size in this mode is 2.
- no mode. In this case, there is no specific vectorization. Nevertheless, to test the code, we allow emulation with vectors of size 2.
Definition in file Simd.h.