Ce fichier contient les déclarations des types utilisés pour gérer la vectorisation. Comme il existe plusieurs mécanismes possibles, il faut faire un choix en fonction de l'architecture machine et des options de compilation. Chaque mécanisme utilise des vecteurs de taille différente. Dans notre cas comme la vectorisation est utilisée principalement pour les calculs sur des doubles, la taille d'un vecteur sera égale au nombre de double qu'on peut mettre dans un vecteur.
Actuellement, on supporte les modes suivants par ordre de priorité. Si un mode est supporté, les autres ne sont pas utilisés.
- AVX512 pour les architectures de type Intel Knight Landing (KNL) ou Xeon Skylake. La taille des vecteurs est de 8 dans ce mode.
- AVX. Pour ce mode, il faut compiler Arcane avec l'option '–with-avx'. Il existe deux modes, l'AVX classique et l'AVX2. Pour l'instant, seul le premier est utilisé, faute de machines pour tester le second. La taille des vecteurs est de 4 dans ce mode.
- SSE. Ce mode est disponible par défaut car il existe sur toutes les plateformes x64. La aussi il existe plusieurs versions et on se limite à la version 2. La taille des vecteurs est de 2 dans ce mode
- aucun mode. Dans ce cas il n'y a pas de vectorisation spécifique. Néanmoins pour tester le code, on permet une émulation avec des vecteurs de taille de 2.
Définition dans le fichier Simd.h.