Ceci est un court article sur une étude du comportement de l'AVX2 et de l'AVX-512 par rapport au déverrouillage sous licence de nouvelles puces Intel Ice Lake.
Le verrouillage sous licence 1 est un effet peu connu dans lequel les limites de fréquence tombent en dessous de la valeur nominale lorsque certaines instructions SIMD sont exécutées, en particulier des instructions à virgule flottante lourdes ou des instructions d'une largeur de 512 bits.
Vous pouvez en savoir plus sur ce type de déverrouillage dans cette réponse sur StackOverflow , et nous avons déjà expliqué les mécanismes de bas niveau de ces transitions en détail . Vous pouvez également trouver des instructionscomment tirer parti de larges SIMD (Single Instruction Multiple Data: un type ou une extension de l'architecture du jeu d'instructions, par exemple Intel AVX ou ARM NEON, capable d'effectuer plusieurs opérations identiques sur des éléments emballés dans un registre SIMD) avec ce problème à l'esprit 2 .
Les informations sur les liens sont écrites dans le contexte de Skylake-SP (SKX, architecture de serveur Intel Skylake qui comprend Skylake-SP, Skylake-X et Skylake-W), qui étaient la première génération de puces à prendre en charge AVX-512.
Quelle est la situation avec Ice Lake, avec les dernières puces prenant en charge à la fois les instructions AVX-512 de SKX et le tout nouveau jeu d'instructions AVX-512 ? Devrons-nous regarder ces nouvelles instructions de loin et ne pourrons jamais les utiliser en raison du downlocking?
Lisez l'article pour le comprendre, ou passez simplement à la section Résumé.
AVX-Turbo
Nous utiliserons l' utilitaire avx-turbo pour mesurer la dépendance en fréquence du nombre de cœurs et du jeu d'instructions. Cet outil fonctionne simplement: il exécute un jeu d'instructions donné sur un nombre donné de cœurs, mesurant la fréquence atteinte lors du test.
Par exemple, un benchmark
avx256_fma_t
qui mesure le coût d' instructions lourdes de 256 bits avec un ILP élevé (Parallélisme au niveau des instructions: la quantité de parallélisme au niveau inter-instruction d'un processeur superscalaire) exécute la séquence FMA suivante:
vfmadd132pd ymm0,ymm10,ymm11
vfmadd132pd ymm1,ymm10,ymm11
vfmadd132pd ymm2,ymm10,ymm11
vfmadd132pd ymm3,ymm10,ymm11
vfmadd132pd ymm4,ymm10,ymm11
vfmadd132pd ymm5,ymm10,ymm11
vfmadd132pd ymm6,ymm10,ymm11
vfmadd132pd ymm7,ymm10,ymm11
vfmadd132pd ymm8,ymm10,ymm11
vfmadd132pd ymm9,ymm10,ymm11
; repeat 10x for a total of 100 FMAs
Au total, nous utilisons cinq tests pour tester chaque combinaison d'instructions légères et lourdes de 256 bits et 512 bits, ainsi que des instructions scalaires (SIMD 128 bits se comporte de la même manière que les instructions scalaires) en tapant sur la ligne de commande:
./avx-turbo --test=scalar_iadd,avx256_iadd,avx512_iadd,avx256_fma_t,avx512_fma_t
Résultats du lac de glace
J'ai exécuté avx-turbo comme décrit ci-dessus sur un Ice Lake i5-1035G4, un processeur client Ice Lake de milieu de gamme fonctionnant jusqu'à 3,7 GHz. Les résultats complets sont cachés dans l'essentiel , et je présente ici les résultats les plus importants pour les fréquences obtenues (toutes les valeurs sont en GHz):
Jeu d'instructions | Noyaux actifs | |||
---|---|---|---|---|
1 | 2 | 3 | 4 | |
Scalaire / 128 bits | 3,7 | 3,6 | 3,3 | 3,3 |
Léger 256 bits | 3,7 | 3,6 | 3,3 | 3,3 |
256 bits lourd | 3,7 | 3,6 | 3,3 | 3,3 |
Léger 512 bits | 3,6 | 3,6 | 3,3 | 3,3 |
512 bits lourd | 3,6 | 3,6 | 3,3 | 3,3 |
Comme prévu, la baisse maximale de la fréquence se produit lorsque le nombre de cœurs actifs augmente, mais regardez chaque colonne pour voir l'impact sur les catégories d'instructions. Presque aucun verrouillage vers le bas ne se produit le long de cet axe! Avec un seul cœur actif, il y a une diminution avec des instructions larges, et seulement d'un maigre 100 MHz: de 3 700 MHz à 3 600 MHz en utilisant des instructions de 512 bits.
Dans tous les autres cas, y compris avec plusieurs cœurs actifs, ainsi que des cœurs lourds de 256 bits, le downlocking sous licence est nul : tout fonctionne aussi vite qu'avec des instructions scalaires.
Types de licences
Il y a un autre changement ici. L'architecture SKX a trois licences ou catégories d'instructions de déverrouillage: L0, L1 et L2. Ici, dans l'ICL client, il n'y en a que deux 3 et ils ne correspondent pas exactement aux trois catégories de SKX.
Les licences en SKX correspondent à la largeur et au poids des instructions comme suit:
Largeur | Poumons | Lourd |
---|---|---|
Scalaire / 128 | L0 | L0 |
256 | L0 | L1 |
512 | L1 | L2 |
En particulier, notez que les instructions lourdes de 256 bits sont concédées sous la même licence que les instructions légères de 512 bits.
Dans les ICL client, le schéma est le suivant:
Largeur | Poumons | Lourd |
---|---|---|
Scalaire / 128 | L0 | L0 |
256 | L0 | L0 |
512 | L1 | L1 |
Ici, les instructions lourdes de 256 bits et légères de 512 bits sont dans différentes catégories! En fait, le concept d'instructions légères versus lourdes ne semble pas s'appliquer ici: la catégorisation dépend entièrement de la largeur 4 .
Et alors?
Alors qu'en est-il de cela?
À tout le moins, cela signifie que nous devons changer notre modèle mental du coût des instructions AVX-512 par rapport aux fréquences. Plutôt que de dire qu'ils «causent généralement un downlocking significatif», on peut dire que cette puce Ice Lake a AVX-512 causant peu ou pas de downlock sous licence, et je suppose que cela est également vrai pour les autres puces client Ice Lake.
Cependant, ce changement dans nos attentes comporte un défaut important: le downlocking sous licence n'est pas le seul.source de déverrouillage. Nous pouvons également rencontrer des limitations de puissance, de chaleur ou de courant. Certaines configurations ne peuvent exécuter des instructions SIMD larges sur tous les cœurs que pendant une courte période, puis dépasser les limites de puissance de fonctionnement. Dans mon cas, l'ordinateur portable à 250 $ que je testais était extrêmement mal refroidi et, au lieu de limitations de puissance, je me suis heurté à une limite de dissipation thermique (100 ° C) quelques secondes après avoir exécuté des instructions lourdes sur tous les cœurs.
Cependant, ces autres restrictions sont qualitativement différentes des restrictions de licence. Fondamentalement, ils limitent 5 sur la base du salaire pour ce que vous utilisez: Si vous utilisez des instructions larges ou lourdes (ou les deux), cela ne provoque qu'une augmentation microscopique de la puissance ou de la production de chaleur associée à ces seules instructions. Ceci est différent de certains effets de licence dans lesquels des changements de fréquence se produisent dans un cœur ou une puce entière, affectant de manière significative l'exécution ultérieure sans rapport avec ces types d'instructions.
Etant donné que les opérations larges sont généralement moins gourmandes en énergie qu'un nombre similaire d'opérations étroites 6 , il est immédiatement clair si les opérations larges en valent la peine ; au moins dans les cas qui évoluent bien avec une largeur croissante. Quoi qu'il en soit, ce problème est principalement local: il ne dépend pas du comportement du code voisin.
Résultat
Voici mes conclusions.
- Le processeur Ice Lake i5-1035 ne démontre qu'un downlockage sous licence de 100 MHz avec un cœur actif lors de l'exécution d'instructions 512 bits.
- Dans tous les autres cas, il n'y a pas de déverrouillage.
- La fréquence turbo d'exécution des instructions 512 bits sur tous les cœurs est de 3,3 GHz, soit 89% de la fréquence maximale d'exécution des opérations scalaires sur un cœur (3,7 GHz), donc, dans les limites de la puissance et de la dissipation thermique, cette puce a une fréquence très «plate» dépendance.
- Contrairement à l'architecture SKX, cette puce Ice Lake n'utilise pas la division en
instructions «légères» et «lourdes» pour la mise à l'échelle des fréquences: les opérations FMA sont effectuées de la même manière que les opérations plus légères.
Autrement dit, il n'y a pas besoin d'avoir peur du déverrouillage sur les ICL client. Seul l'avenir nous dira si cela s'applique également aux ICL côté serveur.
Discussions et communication
Ce message peut être discuté sur Hacker News .
Si vous avez des questions ou d'autres commentaires, vous pouvez laisser un commentaire sur l'article original . Je serais également intéressé par les résultats sur d' autres puces ICL, par exemple sur les versions i3 et i7: faites-moi savoir si vous les avez et nous pourrons obtenir les résultats.
Remarques
- Je suis déjà fatigué de répéter constamment le verrouillage vers le bas sous licence , donc j'utiliserai souvent le terme "verrouillage vers le bas", mais il devrait être clair qu'il s'agit d'une version sous licence de celui-ci, et non d'autres types de limitation de fréquence
- Notez que Daniel a écrit au sujet de ce bien plus , que , une fois.
- : , - ( ) , , .
- , , ICL FMA : 512- . , 256- : - 2x256- FMA , , 1x512- FMA . , , 512- .
- , , , , , . , , ,
vzeroupper
vzeroall
. - Par exemple, une addition d'entier de 512 bits sera généralement moins gourmande en énergie que les deux opérations de 256 bits nécessaires pour calculer le même résultat, car la surcharge d'exécution augmente de manière non linéaire avec une largeur croissante (elles incluent presque tout sauf l'exécution elle-même).