L’une des histoires autour des premières générations de processeurs Zen d’AMD concernait l’effet du multi-threading simultané (SMT) sur les performances. En fonctionnant avec ce mode activé, comme c’est le cas par défaut dans la plupart des situations, les utilisateurs ont constaté une augmentation significative des performances dans des situations qui pourraient en profiter. Les raisons de cette augmentation des performances reposent sur deux facteurs concurrents: premièrement, pourquoi le noyau est-il conçu pour être si sous-utilisé par un thread, ou deuxièmement, la construction d’une stratégie SMT efficace afin d’augmenter les performances. Dans cette revue, nous examinons la dernière architecture Zen 3 d’AMD pour observer les avantages de SMT.

Qu’est-ce que le multithreading simultané (SMT)?

Nous considérons souvent chaque cœur de processeur comme étant capable de traiter un flux d’instructions série pour n’importe quel programme en cours d’exécution. Le multithreading simultané, ou SMT, permet à un processeur d’exécuter deux flux d’instructions simultanés sur le même cœur de processeur, partageant les ressources et optimisant les temps d’arrêt potentiels sur un ensemble d’instructions en ayant un ensemble secondaire pour entrer et profiter de la sous-utilisation. Deux des facteurs limitants dans la plupart des modèles informatiques sont soit la latence de calcul, soit la latence de la mémoire, et SMT est conçu pour entrelacer des ensembles d’instructions pour optimiser le débit de calcul tout en masquant la latence de la mémoire.


Une vieille diapositive d’Intel, qui a son propre terme marketing pour SMT: Hyper-Threading

Lorsque SMT est activé, selon le processeur, il permettra à deux, quatre ou huit threads de s’exécuter sur ce cœur (nous avons vu des solutions ésotériques de calcul en mémoire avec 24 threads par cœur). Les instructions de n’importe quel thread sont réorganisées pour être traitées dans le même cycle et maintenir l’utilisation des ressources de base élevée. Étant donné que plusieurs threads sont utilisés, cela s’appelle l’extraction du parallélisme au niveau du thread (TLP) à partir d’une charge de travail, alors qu’un seul thread avec des instructions pouvant s’exécuter simultanément est le parallélisme au niveau des instructions (ILP).

Est-ce que SMT est une bonne chose?

Cela dépend à qui vous demandez.

SMT2 (deux threads par cœur) implique la création de structures de base suffisantes pour contenir et gérer deux flux d’instructions, ainsi que la gestion de la manière dont ces structures de base partagent les ressources. Par exemple, si un tampon particulier de votre conception de base est censé gérer jusqu’à 64 instructions dans une file d’attente, si la moyenne est inférieure à cela (par exemple 40), alors le tampon est sous-utilisé et une conception SMT activera le tampon. est nourri en moyenne vers le haut. Ce tampon peut être augmenté à 96 instructions dans la conception pour tenir compte de cela, garantissant que si les deux flux d’instructions fonctionnent à une «moyenne», alors les deux auront une marge suffisante. Cela signifie deux threads utiles, pour seulement 1,5 fois la taille du tampon. Si tout le reste fonctionne, alors c’est le double des performances pour moins du double de la conception de base dans la zone de conception. Mais en mode ST, où la majeure partie de cette mémoire tampon de 96 larges est remplie à moins de 40%, parce que la totalité de la mémoire tampon doit être allumée tout le temps, cela peut être une perte d’énergie.

Mais, si une conception de noyau bénéficie de SMT, alors peut-être que le noyau n’a pas été conçu de manière optimale pour un seul thread de performance en premier lieu. Si l’activation de SMT donne à un utilisateur des performances doubles exactes et une mise à l’échelle parfaite à tous les niveaux, comme s’il y avait deux cœurs, il y a peut-être un problème direct avec la façon dont le cœur est conçu, des unités d’exécution aux tampons en passant par la hiérarchie du cache. Il est connu que les utilisateurs se plaignent du fait qu’ils n’obtiennent qu’un gain de performances de 5 à 10% avec SMT activé, affirmant que cela ne fonctionne pas correctement – cela pourrait simplement être dû au fait que le noyau est mieux conçu pour ST. De même, déclarer qu’un gain de performance de + 70% signifie que le SMT fonctionne bien pourrait être plus un signal vers une conception de noyau déséquilibrée qui gaspille de l’énergie.

C’est la dichotomie du multi-threading simultané. Si cela fonctionne bien, un utilisateur obtient des performances supplémentaires. Mais si cela fonctionne trop bien, cela indique peut-être un noyau non adapté à une charge de travail particulière. La réponse à la question «SMT est-elle une bonne chose?» Est plus compliquée qu’il n’y paraît à première vue.

Nous pouvons diviser les systèmes qui utilisent SMT:

  • X86 hautes performances d’Intel
  • X86 hautes performances d’AMD
  • POWER / z haute performance d’IBM
  • Certains modèles à bras haute performance
  • Conceptions de calcul en mémoire hautes performances
  • Matériel AI haute performance

Comparé à ceux qui ne le font pas:

  • X86 haute efficacité d’Intel
  • Tous les processeurs Arm de classe smartphone
  • Conceptions réussies à base de bras haute performance
  • Charges de travail HPC hautement concentrées sur x86 avec des goulots d’étranglement de calcul

(Notez qu’Intel appelle son implémentation SMT «HyperThreading», qui est un terme marketing spécifiquement pour Intel).

À ce stade, nous avons uniquement discuté de SMT où nous avons deux cœurs par thread, appelés SMT2. Certaines des conceptions matérielles les plus ésotériques vont au-delà de deux SMT basés sur les threads par cœur et en utilisent jusqu’à huit. Vous le verrez stylisé dans la documentation comme SMT8, par rapport à SMT2 ou SMT4. C’est ainsi qu’IBM aborde certaines de ses conceptions. Certaines applications de calcul en mémoire vont aussi loin que SMT24 !!

Il existe une tendance claire entre les systèmes compatibles SMT et les systèmes sans SMT, et cela semble être le marqueur de haute performance. La seule exception à cela est le récent processeur Apple M1 et les cœurs Firestorm.

Il convient de noter que pour les systèmes prenant en charge SMT, il peut être désactivé pour le forcer à un thread par cœur, pour s’exécuter en mode SMT1. Cela présente quelques avantages majeurs:

Il permet à chaque thread d’avoir accès à un cœur complet de ressources. Dans certaines situations de charge de travail, avoir deux threads sur le même cœur signifiera le partage des ressources et entraînera une latence involontaire supplémentaire, ce qui peut être important pour les charges de travail critiques de latence où des performances déterministes (les mêmes) sont requises. Cela réduit également le nombre de threads en compétition pour la capacité L3, si cela est un facteur limitant. Un logiciel devrait également être nécessaire pour sonder tous les autres flux de travail à la recherche de données, pour un processeur 16 cœurs comme le 5950X, cela signifie n’atteindre que 15 autres threads plutôt que 31 autres threads, réduisant ainsi la diaphonie potentielle limitée par la connectivité cœur à cœur.

L’autre aspect est le pouvoir. Avec un seul thread sur un cœur et aucun autre thread dans lequel intervenir si les ressources sont sous-utilisées, lorsqu’il y a un retard causé par l’extraction de quelque chose de la mémoire principale, la puissance du cœur serait alors inférieure, ce qui permettrait aux autres cœurs de monter en puissance. en fréquence. C’est un peu une épée à double tranchant si le cœur est toujours à haute tension en attendant des données en mode SMT désactivé. SMT de cette manière peut aider à améliorer les performances par watt, en supposant que l’activation de SMT ne provoque pas de concurrence pour les ressources et sans doute plus de temps d’attente pour les données.

Les charges de travail d’entreprise critiques qui nécessitent des performances déterministes et certains codes HPC qui nécessitent de grandes quantités de mémoire par thread désactivent souvent SMT sur leurs systèmes déployés. Les charges de travail des consommateurs ne sont souvent pas aussi critiques (au moins en termes d’échelle et de $$$), et le sujet n’est donc pas souvent traité en détail.

La plupart des processeurs modernes, lorsqu’ils sont en mode SMT activé, s’ils exécutent un seul flux d’instructions, fonctionneront comme s’ils étaient en mode SMT-off et auront un accès complet aux ressources. Certains logiciels en tirent parti, générant un seul thread pour chaque cœur physique du système. Étant donné que les structures de base peuvent être partitionnées dynamiquement (ajuste les ressources pour chaque thread pendant que les threads sont en cours) ou statiquement partagées (ajuste avant le début d’une charge de travail), les situations où les deux threads sur un noyau créent leur propre goulot d’étranglement gagneraient à n’avoir qu’un seul thread par cœur actif. Savoir comment une charge de travail utilise un cœur peut aider lors de la conception de logiciels conçus pour utiliser plusieurs cœurs.

Voici un exemple de noyau Zen3, montrant toutes les structures. L’un des points de progrès avec chaque nouvelle génération de matériel est de réduire le nombre de structures allouées statiquement au sein d’un cœur, car les structures dynamiques offrent souvent la meilleure flexibilité et des performances de pointe. Dans le cas de Zen3, seules trois structures sont encore partitionnées statiquement: la file d’attente de stockage, la file d’attente de retrait et la file d’attente micro-op. C’est la même chose que Zen2.

SMT sur AMD Zen3 et Ryzen 5000

Tout comme les précédents processeurs Zen d’AMD, la série Ryzen 5000 qui utilise des cœurs Zen3 a également une conception SMT2. Par défaut, cela est activé dans tous les BIOS grand public, mais les utilisateurs peuvent choisir de le désactiver via les options du micrologiciel.

Pour cet article, nous avons utilisé notre processeur AMD Ryzen 5950X, un processeur Zen3 hautes performances à 16 cœurs, en modes SMT Off et SMT On via notre suite de tests et certains benchmarks standard de l’industrie. Les objectifs de ces tests sont de vérifier les réponses aux questions suivantes:

  1. La désactivation de SMT présente-t-elle un avantage à un seul thread?
  2. Quelle est l’augmentation des performances de l’activation de SMT?
  3. Y a-t-il un changement dans les performances par watt lors de l’activation de SMT?
  4. L’activation de SMT entraîne-t-elle une latence de charge de travail plus élevée? *

* plus important pour les charges de travail d’entreprise / base de données / IA

Le meilleur argument pour activer SMT serait un résultat No-Lots-Yes-No. Inversement, le meilleur argument contre SMT serait un Oui-Aucun-Non-Oui. Mais comme les structures de base ont été construites en gardant à l’esprit SMT, les réponses sont rarement aussi claires.

Système de test

Pour notre suite de tests, en raison de l’obtention de nouveaux modules de mémoire DDR4-3200 de 32 Go pour les tests Ryzen, nous avons relancé notre suite de tests standard sur le Ryzen 9 5950X avec SMT activé et SMT désactivé. Conformément à notre méthodologie de test habituelle, nous testons la mémoire selon les spécifications JEDEC officielles pour chaque processeur disponible.

Configuration du test
AMD AM4 Ryzen 9 5950X MSI X570
Divin
1.B3T13
AGESA 1100
Noctua
NH-U12S
ADATA
4×32 Go
DDR4-3200
GPU Sapphire RX 460 2 Go (tests du processeur)
NVIDIA RTX 2080 Ti
PSU OCZ 1250W Or
SSD Crucial MX500 2TB
OS Windows 10 x64 1909
Spectre et Meltdown patché
VRM équipé de ventilateurs Silversone SST-FHP141-VF 173 CFM

Merci également aux entreprises qui ont fait don de matériel pour nos systèmes de test, notamment: