J'ai entendu parler de l'hyperthreading ces derniers temps. Qu'est-ce que l'hyperthreading et pourquoi est-il important ?
Réponses
Trop de publicités?L'hyperthreading consiste à faire croire à votre processeur qu'il possède deux cœurs physiques, alors qu'il n'en possède qu'un et quelques autres.
L'intérêt de l'hyperthreading est que, bien souvent, lorsque vous exécutez du code dans le processeur, certaines parties du processeur sont inactives. En incluant un ensemble supplémentaire de registres CPU, le processeur peut agir comme s'il avait deux cœurs et ainsi utiliser toutes les parties du processeur en parallèle. Lorsque les deux cœurs ont tous deux besoin d'utiliser un composant du processeur, l'un d'entre eux finit bien sûr par attendre. C'est pourquoi il ne peut pas remplacer les processeurs à double cœur et autres processeurs de ce type.
Hyper-Threading est le cas où deux threads peuvent fonctionner sur un seul cœur. Lorsqu'un thread sur le cœur en question se bloque ou est en état d'arrêt, l'hyperthreading permet au cœur de travailler sur un second thread à la place.
L'hyperthreading fait croire au système d'exploitation que le processeur possède deux fois plus de cœurs, ce qui entraîne souvent une amélioration des performances, mais seulement de l'ordre de 15 à 30 % dans l'ensemble - bien que dans certaines circonstances, il puisse y avoir une baisse des performances (=<20 %).
Actuellement, la plupart des puces Atom et toutes les puces i7 (et équivalentes aux Xeon) sont dotées de l'hyperthreading, tout comme certains anciens P4. Dans le cas des Atom, il s'agit d'une tentative désespérée d'améliorer les performances sans trop augmenter la consommation d'énergie ; dans le cas des i7, cela les différencie de la gamme de puces i5.
Les travaux de traitement complexes ne bénéficieront pas beaucoup de la HT, mais certaines tâches (simples, hautement multithreadées), comme l'encodage vidéo, en bénéficient. En réalité, il n'y a pas grand-chose dedans...
Pour développer ce qui a déjà été dit, l'hyperthreading signifie qu'un seul cœur de CPU peut maintenir deux contextes d'exécution distincts et passer rapidement de l'un à l'autre, émulant ainsi efficacement deux cœurs au niveau matériel.
Vous bénéficiez d'un avantage modeste en termes de vitesse pour les charges de travail multithreads par rapport à un noyau unique normal. Toutefois, cet avantage est loin d'être comparable à celui de deux cœurs indépendants. En termes de performances, il est préférable de considérer qu'il s'agit d'une légère augmentation des performances multithreads par rapport à un cœur unique plutôt que d'une performance proche de celle de deux cœurs. L'importance de l'augmentation de la vitesse varie en fonction de la charge de travail - en fait, pour certaines charges de travail, l'augmentation des performances est tout à fait décente.
Le noyau hyperthreadé ne comporte qu'une seule unité d'exécution principale, mais certaines autres parties d'une unité centrale associées à la préparation des instructions à traiter et au maintien d'un état d'exécution sont dupliquées.
Les cœurs de processeur disposent d'un pipeline d'instructions, c'est-à-dire d'une file d'attente des futures instructions à exécuter, qui est constamment mise à jour, prête à ce que le CPU exécute l'instruction en tête de cette file. Les processeurs les utilisent pour optimiser la vitesse d'exécution en examinant ces futures instructions et en leur appliquant un prétraitement simple et de bas niveau lorsque cela est possible (ces optimisations comprennent l'"exécution hors ordre" et la "prédiction de branchement").
Les cœurs hyperthreadés sont dotés d'un double pipeline d'instructions, ce qui, avec un deuxième ensemble de registres, permet de bénéficier de la vitesse pour les charges de travail multithread.
Supposons que votre système exécute un certain nombre de fils différents en même temps. Votre système alloue chaque thread à un processeur virtuel, et ce thread partagera le processeur virtuel avec d'autres threads, mais à chaque fois que le processeur virtuel passe d'un thread à l'autre, il doit se débarrasser de tout le contexte d'exécution de ce thread et charger celui d'un autre thread.
Mais avec l'hyper-threading, au lieu que votre cœur ne soit capable de conserver l'état d'un seul thread à un moment donné, vous gagnez la capacité pour ce cœur de conserver les états d'exécution de deux threads à la fois, de sorte que vous pouvez passer d'un thread à l'autre avec beaucoup moins de pénalité parce que cela ne jette pas le pipeline ou les registres, et le pipeline et les registres de l'autre thread restent prêts et "chauds" afin qu'ils puissent être changés et utilisés immédiatement. Si vous exécutez plus de threads que de processeurs virtuels, vous devez toujours effectuer des commutations difficiles, mais moins souvent car vous avez un plus grand nombre de threads à un moment donné dont l'état d'exécution est préservé.
Quand un Single Core peut agir comme un Dual Core
c'est Hyperthreading
En détail
Mise en œuvre par Intel du multithreading simultané est connue sous le nom de technologie Hyper-Threading, ou technologie HT.
La technologie HT fait apparaître un seul processeur, du logiciel
en tant que processeurs logiques multiples. Cela permet aux systèmes d'exploitation et aux applications de programmer plusieurs threads sur les processeurs logiques en tant que
qu'ils le feraient sur des systèmes multiprocesseurs.
L'hyperthreading permet à un processeur unique d'exécuter deux threads simultanément, mais pas dans toutes les conditions.
L'Hyperthreading ne double pas les performances d'un système, il peut les augmenter en utilisant mieux les ressources inutilisées, ce qui permet un meilleur débit pour certains types de charges de travail importantes. Une application fonctionnant sur un processeur logique d'un cœur occupé peut espérer un peu plus de la moitié du débit qu'elle obtient en fonctionnant seule sur un processeur non hyperthreadé. Les améliorations des performances de l'hyperthreading dépendent fortement de l'application, et certaines applications peuvent voir leurs performances se dégrader avec l'hyperthreading car de nombreuses ressources du processeur (comme le cache) sont partagées entre les processeurs logiques.
La technologie Intel Hyper-Threading permet à chaque cœur de disposer de deux processeurs logiques qui partagent la plupart des ressources du cœur, telles que les caches mémoire et les unités fonctionnelles.
Fonction principale
L'hyperthreading consiste à augmenter le nombre d'instructions indépendantes dans le pipeline ; il tire parti de l'architecture superscalaire, dans laquelle plusieurs instructions traitent des données distinctes en parallèle.
Intel affirme que l'hyperthreading est très efficace car il utilise des ressources qui, autrement, seraient inutilisées ou sous-utilisées.
Liens :
Wikipedia
StackOverflow
Multi-Core Programming Digital_Edition pg #8
Si j'ai bien compris, prenons un petit exemple, qui n'est pas vraiment fidèle à la réalité, mais qui met l'accent sur ce point...
Disons que nous avons une unité centrale de traitement, que nous appellerons Todd à partir de maintenant.
Todd a également plusieurs bras, disons quatre (un peu comme Tom Woodruff Jr. Goro ). C'est la version de Todd des portes logiques d'un CPU.
Enfin, Todd n'a qu'une oreille et ne peut donc entendre qu'une seule commande à la fois. C'est la vie de Todd sans hyperthreading, donc un cœur est toujours juste un cœur.
Todd, en tant que personne intelligente, peut effectuer quatre tâches indépendantes simultanément, une tâche avec chacun de ses quatre bras, mais comme il n'a qu'une seule oreille, il ne peut entendre qu'une seule instruction à la fois.
Certaines instructions peuvent exiger qu'il utilise tous ses membres pour accomplir la tâche, mais un grand nombre d'instructions peuvent exiger qu'il utilise uniquement son bras supérieur gauche. C'est plutôt inefficace ! Les autres bras restent inactifs la plupart du temps.
Si nous donnons à Todd une deuxième oreille (pour qu'il ait l'air gentil et symétrique maintenant), il peut recevoir deux instructions à la fois.
C'est génial, car si une instruction lui demande d'utiliser uniquement son bras supérieur gauche, mais qu'une autre instruction lui demande d'utiliser ses deux bras droits, il peut effectuer les deux opérations simultanément ! Il double ainsi son efficacité à accomplir des tâches ! Génial !
Maintenant... Je sais ce que vous pensez peut-être : que se passe-t-il si une instruction lui demande d'utiliser tous ses bras et qu'une deuxième instruction lui demande d'utiliser ses deux bras gauches ?
Malheureusement, Todd a reçu une oreille supplémentaire, mais pas de bras supplémentaires. Dans ce cas, la deuxième instruction devra attendre, et il n'est pas plus (ou moins) efficace que lorsqu'il n'avait qu'une oreille.
Voilà donc comment Todd, notre mutant imitateur d'unité centrale, peut améliorer artificiellement son efficacité (c'est-à-dire ses performances), sans être doté de bras supplémentaires.