Advanced Vector Extensions
Advanced Vector Extensions (AVX) est un jeu d'instructions de l'architecture x86 d'Intel et AMD, proposé par Intel en . Il est supporté par les processeurs Intel Sandy Bridge et par les processeurs AMD Bulldozer en 2011. AVX offre de nouvelles fonctionnalités, de nouvelles instructions et un nouveau schéma de codage « VEX ».
AVX2 élargit la plupart des commandes SSE et AVX 128 bits en 256 bits. Il est supporté par les processeurs Intel Haswell en 2013 et par les processeurs AMD Excavator en 2015.
AVX-512 étend le nombre de registres SIMD à 32 et les élargit à 512 bits. Il utilise un nouveau codage utilisant le préfixe EVEX (en) proposé par Intel en . Les premiers processeurs le supportant sont les Knights Landing.
Advanced Vector Extensions
La largeur des registres SIMD est passée de 128 bits à 256 bits, renommant les registres XMM0-XMM7 en YMM0-YMM7 en mode 32 bits et ajoutant 8 registres YMM8-YMM15 en mode 64 bits. Sur les processeurs supportant AVX, les instructions SSE (qui opéraient auparavant sur les registres XMM de 128 bits) peuvent être étendues en utilisant le préfixe VEX (en) pour fonctionner sur les 128 bits de poids faibles des registres YMM.
AVX introduit un format d'instruction SIMD à trois opérandes, dans lequel le registre de destination est distinct des deux opérandes source. Par exemple, une instruction SSE classique à deux opérandes sous la forme A = A + B devra écrire par-dessus l'opérande A pour stocker le résultat. AVX est capable de préserver les opérandes source en utilisant un opérande destination différent, par le biais de la forme C = A + B. Le format SIMD à trois opérandes de AVX est limité aux registres YMM, et ne comprend pas d'instruction avec les registres d'usage général (par exemple EAX).
Le nouveau schéma de codage VEX introduit une nouvelle série de préfixes de code qui étend l'espace d'opcode, permettant d'avoir des instructions ayant plus de deux opérandes, et permet aux registres SIMD d'utiliser des vecteurs à plus de 128 bits. Le préfixe VEX peut également être utilisé sur les anciennes instructions SSE en leur donnant une forme à trois opérandes, et leur permettre d’interagir plus efficacement avec des instructions AVX sans utiliser nécessairement VZEROUPPER
et VZEROALL
.
Les instructions AVX supportent des valeurs à la fois 128 bits et 256 bits. Les versions 128 bits peuvent être utiles pour améliorer d'anciens codes sans avoir besoin d'accroître la vectorisation et pour éviter la pénalité du passage de SSE à AVX, Ce mode est parfois connu comme AVX-128.
Applications
- Convient pour les calculs intensifs à virgule flottante dans le multimédia, les applications scientifiques et financières (les opérations entières sont attendues dans une extension ultérieure).
- Augmentation du parallélisme et le débit dans les calculs SIMD en virgule flottante.
- Réduction de charge du registre due aux instructions non destructives.
- Améliore les performances du RAID logiciel sous Linux (AVX2 nécessaire, AVX ne suffit pas).
- Prime95 / MPrime, et le logiciel GIMPS ayant permis de trouver le plus grand nombre premier à ce jour, utilisent les instructions AVX depuis la version 27.x.
Nouvelles instructions
Processeurs supportant AVX
- Intel
- Processeurs Sandy Bridge (Q1 2011) et plus récents, sauf les modèles de marques Celeron et Pentium
- Processeurs de marques Celeron et Pentium à partir de Tiger Lake (Q3 2020) et plus récents
- AMD
- Processeurs basés sur Bulldozer (Q4 2011) et plus récents
Les questions relatives à la compatibilité entre les futurs processeurs Intel et AMD sont examinées vis-à-vis du jeu d'instructions XOP (en) proposé par AMD sur Bulldozer mais retiré à partir de l'architecture Zen.[pas clair]
Support des compilateurs et assembleurs
Le compilateur GCC intègre le support AVX à partir de la version 4.6 (même si la version 4.3 intégrait partiellement AVX), Intel Suite l'intègre à partir de la version 11.1, le compilateur Visual Studio l'intègre à partir de la version 2010/2012, La version du compilateur d'Open64 4.5.1 le prend en charge si le flag -mavx est activé, PathScale supporte lui aussi AVX si le flag -mavx ainsi que Vector Pascal (en) via le flag -cpuAVX32.
Free Pascal supporte AVX et AVX2 depuis la version 2.7.1 avec les paramètres -CfAVX et -CfAVX2.
D'autres assembleurs tels que NASM, MASM VS2010, Yasm, FASM, MSNA et JWASM supportent AVX.
Système d'exploitation
La version des systèmes d'exploitation à partir duquel le jeu d'instructions AVX est pris en charge.
- Apple OS X : 10.6.8 (Snow Leopard) mise à jour publié le .
- Linux : supporté depuis la version du noyau 2.6.30, publié le .
- Windows : Windows 7 SP1 et Windows Server 2008 R2 SP1, Windows 8, Windows Server 2008 R2 SP1 avec Hyper-V nécessite un correctif pour soutenir AMD AVX (Opteron 6200 et série 4200), KB2568088.
- FreeBSD dans un patch présenté le , qui a été inclus dans la version stable 9.1.
- DragonFly BSD supporté au début 2013.
- OpenBSD ajouté le .
- Solaris 10 Mise à jour 10 et Solaris 11.
Advanced Vector Extensions 2
Advanced Vector Extensions 2 (AVX2), aussi connues sous le nom nouvelles instructions Haswell, sont une extension du jeu d'instructions AVX introduite dans l'architecture Haswell. AVX2 supporte notamment :
- l'extension de la plupart des instructions AVX sur 128 bits sur les entiers à 256 bits,
- la récupération de données 32 ou 64 bits en mémoire non contiguës,
- la diffusion ou la permutation de données entre plusieurs mots de 128 bits,
- le décalage à gauche ou à droite d'éléments avec une valeur de décalage par élément.
Nouvelles instructions
CPU supportant AVX2
- Intel
- Processeurs Haswell (Q2 2013) et plus récents, à l'exception des modèles de marques Celeron et Pentium.
- Processeurs de marques Celeron et Pentium à partir de Tiger Lake (Q3 2020) et plus récents
- AMD
- Processeurs Excavator (Q2 2015) et plus récents.
AVX-512
AVX-512 désigne des extensions 512 bits des instructions SIMD 256 bits Advanced Vector Extensions pour l’architecture du jeu d’instructions x86 proposées par Intel en juillet 2013, et sont prises en charge par le processeur Knights Landing d’Intel.
Les instructions d’AVX-512 sont encodées avec le nouveau préfixe EVEX (en). Il permet 4 opérandes, 8 nouveaux registres opmask 64 bits, un mode de mémoire scalaire avec diffusion automatique, un contrôle d’arrondi explicite et un mode d'adressage de mémoire à déplacement compressé. La largeur du fichier de registre est augmentée à 512 bits et le nombre total de registres est porté à 32 (registres ZMM0-ZMM31) en mode x86-64.
AVX-512 se compose de plusieurs sous-ensembles d’instructions, qui ne sont pas tous destinés à être pris en charge par tous les processeurs qui les implémentent. Le jeu d’instructions se compose des éléments suivants :
- AVX-512 Foundation (F) – ajoute plusieurs nouvelles instructions et étend la plupart des instructions SSE-SSE4.1 et AVX/AVX2 en virgule flottante 32 bits et 64 bits avec le schéma de codage EVEX (en) pour prendre en charge les registres 512 bits, les opmasks, la diffusion des paramètres et le contrôle intégré des arrondis et des exceptions
- AVX-512 Conflict Detection Instructions (CD) – détection de conflit efficace pour permettre la vectorisation d’un plus grand nombre de boucles, supportées par Knights Landing
- AVX-512 Exponential and Reciprocal Instructions (ER) – fonctions exponentielles et réciproques conçues pour aider à mettre en œuvre des fonctions transcendantes, supportées par Knights Landing
- AVX-512 Prefetch Instructions (PF) – nouvelles capacités de précharge, supportées par Knights Landing
- AVX-512 Vector Length Extensions (VL) – étend la plupart des AVX-512 pour fonctionner également sur les registres XMM (128 bits) et YMM (256 bits) (dont XMM16-XMM31 et YMM16-YMM31 en mode x86-64)
- AVX-512 Byte and Word Instructions (BW) – étend AVX-512 pour couvrir les opérations sur entiers 8 bits et 16 bits
- AVX-512 Doubleword and Quadword Instructions (DQ) – opérations améliorées sur les entiers 32 bits et 64 bits
- AVX-512 Integer Fused Multiply Add (IFMA) – multiplication-addition fusionnée pour les entiers 512 bits
- AVX-512 Vector Byte Manipulation Instructions (VBMI) ajoute des instructions vectorielles de permutation d’octets qui ne sont pas présentes dans AVX-512BW
- AVX-512 Vector Neural Network Instructions Word variable precision (4VNNIW) – instructions vectorielles pour l'apprentissage profond.
- AVX-512 Fused Multiply Accumulation Packed Single precision (4FMAPS) – instructions vectorielles pour l'apprentissage profond.
- VPOPCNTDQ – compte du nombre de bits valant 1
- VPCLMULQDQ – multiplication sans retenue de quadruples mots
- AVX-512 Vector Neural Network Instructions (VNNI) – instructions vectorielles pour l'apprentissage profond
- AVX-512 Galois Field New Instructions (GFNI) – instructions vectorielles por le calcul du champ de Galois
- AVX-512 Vector AES instructions (VAES) – instructions vectorielles pour le codage AES
- AVX-512 Vector Byte Manipulation Instructions 2 (VBMI2) – chargement, stockage et concaténation d’octets/mots avec décalage
- AVX-512 Bit Algorithms (BITALG) – instructions de manipulation de bits sur octet/mot étendant VPOPCNTDQ
- AVX-512 Bfloat16 (en) Floating-Point Instructions (BF16) – instructions vectorielles pour l'accélération IA.
- AVX-512 Half-Precision Floating-Point Instructions (FP16) – instructions vectorielles opérant sur des nombres en virgule flottante et complexes en précision réduite.
Seule l’extension de base AVX-512F (AVX-512 Foundation) est requise par toutes les implémentations, bien que toutes les implémentations actuelles prennent également en charge le CD (détection de conflit). Tous les CPU avec AVX-512 prennent également en charge VL, DQ et BW. Les extensions de jeu d’instructions ER, PF, 4VNNIW et 4FMAPS ne sont actuellement implémentées que dans les coprocesseurs de calcul Intel.
Les instructions SSE/AVX mises à jour dans AVX-512F utilisent les mêmes mnémoniques que les versions AVX ; elles peuvent fonctionner sur des registres ZMM 512 bits, et prendront également en charge les registres XMM/YMM 128/256 bits (avec AVX-512VL) et les opérandes entiers sur octets, mots, doubles mots et de quadruples mots (avec AVX-512BW/DQ et VBMI).
Tableau de compatibilité des CPU aux instructions AVX-512
AVX-VNNI, AVX-IFMA
AVX-VNNI est une variante codée VEX (en) de l’extension du jeu d’instructions AVX512-VNNI. De même, AVX-IFMA est une variante codée VEX du jeu d'instructions AVX512-IFMA. Ces extensions fournissent les mêmes ensembles d’opérations que leurs homologues AVX-512, mais sont limitées aux vecteurs 256 bits et ne prennent pas en charge les fonctionnalités supplémentaires de l’encodage EVEX, telles que la diffusion, les registres opmask ou l’accès à plus de 16 registres vectoriels. Ces extensions permettent la prise en charge des opérations VNNI et IFMA même lorsque la prise en charge complète d’AVX-512 n’est pas implémentée dans le processeur.
Processeurs avec AVX-VNNI
- Intel
- Processeurs Alder Lake (T4 2021) et plus récents.
- AMD
- Processeurs Zen 5 (S2 2024) et plus récents.
Processeurs avec AVX-IFMA
- Intel
- Processeurs Xeon Sierra Forest (en) à E-core uniquement (S2 2024) et plus récents.
- Processeurs à usage spécial Grand Ridge et plus récents.
- Processeurs pour PC portables Meteor Lake (4e trimestre 2023) et versions ultérieures.
- Processeurs pour PC de bureau Arrow Lake et plus récents.
Références
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Advanced Vector Extensions » (voir la liste des auteurs).