L’hyperthreading était autrefois une fonctionnalité que l’on ne trouvait que sur les processeurs professionnels haut de gamme. Cependant, l’hyperthreading se trouve désormais également sur les processeurs grand public grand public. Alors, qu’est-ce que l’hyperthreading exactement et devriez-vous le rechercher dans votre prochain processeur ?
Qu’est-ce qu’un thread logiciel ?
Un thread logiciel est une séquence d’instructions qui sont traitées par une CPU. C’est l’unité de base des instructions programmées gérées par l’ordonnanceur. Le planificateur est un composant du système d’exploitation qui alloue des ressources matérielles aux différents types de logiciels exécutés sur un ordinateur.
Chaque application exécutée sur votre ordinateur existe sous la forme d’un ou plusieurs processus. Les threads sont en fait des segments de ces processus envoyés au processeur pour exécution. Le planificateur affecte rapidement les threads de différents programmes en cours d’exécution pour s’assurer que chacun obtient les ressources dont il a besoin pour s’exécuter en temps réel.
C’est ainsi que votre ordinateur peut « effectuer plusieurs tâches » et (par exemple) exécuter un traitement de texte tout en jouant de la musique et en téléchargeant un jeu vidéo en arrière-plan. Techniquement, un cœur de processeur ne fait pas toutes ces tâches en même temps.
Donc, si votre système n’a qu’un processeur monocœur, il jongle rapidement avec plusieurs ensembles d’instructions, passant si rapidement de l’un à l’autre que pour notre cerveau humain lent, tout semble se produire en parallèle.
Traitement véritablement parallèle dans les ordinateurs personnels
Pendant la majeure partie de l’histoire de l’informatique personnelle, votre ordinateur n’avait qu’un seul cœur de processeur. Eh bien, à l’époque, nous ne parlions pas de « cœurs » puisqu’il n’y en avait qu’un et c’était l’ensemble du processeur. Cependant, au milieu des années 2000, les fabricants de processeurs ont eu la brillante idée de regrouper deux processeurs complets dans un seul package de processeurs. Ces processeurs dual-core pourraient en fait traiter deux threads d’instructions en même temps. Cela signifiait que, par exemple, votre jeu vidéo pouvait avoir 100 % d’un noyau et que votre système d’exploitation pouvait avoir l’autre noyau pour lui tout seul.
Aujourd’hui, le nombre de cœurs de processeur augmente rapidement. Les processeurs grand public à 6, 8 et même 10 cœurs sont courants. Les processeurs haut de gamme offrent des dizaines de cœurs et des processeurs comme l’AMD Threadripper 3990X sont bourrés de 64 cœurs.
Le développement du logiciel a également changé pour mieux tirer parti de toute cette puissance CPU parallèle. Les dernières consoles de jeux vidéo sont également équipées de huit cœurs de processeur, de sorte que les jeux vidéo pouvant utiliser autant de cœurs deviennent rapidement courants.
Mettre les cœurs de processeur en surmultipliée avec l’hyperthreading
Un processeur traditionnel ne peut gérer qu’un seul thread, mais si vous avez plusieurs cœurs de processeur différents dans votre système, vous pouvez gérer un nombre de threads égal au nombre de cœurs dont vous disposez. Cela semble bien, mais il présente un problème majeur.
Tous les threads ne nécessitent pas la même puissance de traitement. Par exemple, un fil qui rend la vidéo utilisera 100 % de la capacité disponible d’un cœur de processeur, mais le fil qui exécute votre traitement de texte ou votre page Web de médias sociaux n’a besoin que d’une fraction de la puissance offerte par un cœur de processeur moderne.
De même, un jeu vidéo peut avoir plusieurs threads qui s’exécutent en parallèle, comme un qui gère la physique et un autre qui gère l’intelligence artificielle des personnages. Ce sont des tâches importantes, mais elles n’ont peut-être pas besoin d’un seul cœur pour bien fonctionner.
Cela conduit à une situation où tous vos cœurs de processeur peuvent être occupés par des threads, mais ne vous donnent pas toute la puissance de traitement dont ils sont capables. C’est là que l’hyperthreading entre en jeu.
Le nom générique approprié pour l’hyperthreading est le multithreading simultané. « Hyperthreading » est en fait un nom marketing propriétaire utilisé par Intel, mais tout comme « Hoover », il est devenu un langage courant pour la technologie dans son ensemble.
Un processeur équipé du bon circuit interne pour permettre l’hyperthreading peut exécuter deux threads distincts en même temps. Il ne s’agit pas de basculer entre eux comme avec le multitâche monocœur traditionnel. Il exécute chacun en parallèle.
Pour le système d’exploitation, il semble que chaque cœur de processeur physique soit en fait constitué de deux cœurs, ce qui permet au planificateur d’attribuer deux threads à chacun. Cependant, la quantité totale de puissance de traitement par cœur reste exactement la même.
Pourquoi voudriez-vous de l’hyperthreading
Comme nous l’avons mentionné ci-dessus, l’hyperthreading consiste principalement à s’assurer que vous ne laissez pas la puissance de traitement sur la table. Laisser chaque cœur gérer deux threads permet à votre système d’exploitation de tirer le meilleur parti de votre matériel et évite une situation où chaque cœur ne fonctionne pas à pleine capacité ou presque.
Dans le passé, seuls les logiciels professionnels tels que les éditeurs vidéo ou les travaux de traitement de données scientifiques avaient vraiment besoin d’hyperthreading. Les utilisateurs grand public avaient à peine assez d’applications en cours d’exécution pour avoir besoin d’autant de threads. Les jeux vidéo ont également mis du temps à adopter l’utilisation de plusieurs threads, mais maintenant les systèmes de jeu à 8 cœurs sont courants et le nombre de threads continuera d’augmenter.
En tant que tels, les nouveaux processeurs grand public disposent désormais de l’hyperthreading et c’est une fonctionnalité que la plupart des utilisateurs devraient souhaiter. Cependant, si vous obtenez une bonne affaire sur un processeur plus ancien qui n’a pas d’hyperthreading, ce n’est pas encore si essentiel que vous ne puissiez pas vous permettre de le laisser passer.