web-dev-qa-db-fra.com

Quelle est la différence entre multithreading et hyperthreading?

J'ai entendu les termes hyper-threading et multi-threading, mais quelle est exactement la différence entre eux? Quel type de processeur Intel les utilise?

8
rose

Multithreading fait référence à la tâche générale qui consiste à exécuter plusieurs threads d'exécution au sein d'un système d'exploitation. Le multithreading est plus généralement appelé "multitraitement", ce qui peut inclure plusieurs processus système (un exemple simple sous Windows serait, par exemple, l'exécution d'Internet Explorer et de Microsoft Word en même temps), ou peut consister en un processus qui a plusieurs threads en son sein.

Le multithreading (ou devrais-je dire, le multitraitement) est un concept logiciel. Pratiquement tous les processeurs complets de Turing peuvent effectuer plusieurs lectures, même si l'ordinateur ne possède qu'un seul cœur de processeur et que ce dernier ne prend pas en charge l'hyperthreading. Afin de prendre en charge le multitraitement, la CPU va entrelacer exécuter différents threads d’exécution, en exécutant un, puis un autre, puis un autre, dans lesquels le système d’exploitation divisera le temps disponible en "tranches" et donnera une durée à peu près égale pour chaque thread (le temps ne doit pas nécessairement être égal, mais c'est généralement comme cela que le processus est effectué sauf si un processus demande une priorité plus élevée).

Notez que, chaque fois qu'il y a plus de logiciels threads d'exécution essayant de s'exécuter à un moment donné que disponibles matériel (simultanés) threads d'exécution, ces threads logiciels seront alors "entrelacé" parmi les cœurs disponibles. Dans le cas d'un "uniprocesseur" (un cœur de processeur sans hyperthreading), si vous avez plusieurs threads logiciels, ils seront toujours entrelacés. Si vous avez un processeur 4 cœurs avec hyperthreading, cela correspond à 8 "threads matériels", ce qui signifie que le CPU peut exécuter simultanément 8 threads d'exécution simultanément. Par conséquent, si vous aviez 8 threads logiciels à exécuter, ils pourraient tous s'exécuter en même temps. ; mais si vous avez 9 threads logiciels, l'un des threads matériels devra entrelacer une paire de threads (la paire exacte de threads choisie dépend de l'implémentation du planificateur du système d'exploitation).


L’hyperthreading, quant à lui, fait référence à une technologie très spécifique matériel créée par Intel, qui permet à un seul cœur de processeur d’entrelacer plus efficacement plusieurs threads d’exécution. En d’autres termes, un processeur avec hyperthreading fournira des performances quelque peu supérieures à celles d’un processeur identique, mais sans hyperthreading, car le processeur hyperthreadé pourra concilier simultanément deux (parfois plus, mais l'hyperthreading manière) les fils d'exécution sur un noyau donné.

Cependant, l'hyperthreading est strictement plus lent que d'avoir des cœurs physiques complètement séparés, car certains types d'opérations peuvent perturber les avantages de performance de l'hyperthreading, alors qu'il y a moins d'opérations qui peuvent provoquer un tel événement avec des cœurs complètement séparés.

Prenons l'exemple suivant, où "1 noyau" est supposé fonctionner exactement de la même manière dans tous les exemples:

Exemple 1: 2 noyaux, pas d'hyperthreading.
Exemple 2: 4 cœurs, pas d'hyperthreading.
Exemple 3: 2 noyaux avec hyperthreading.
Exemple 4: 4 cœurs avec hyperthreading.

Dans ce cas, l'exemple 4 sera toujours le plus rapide. L'exemple 2 peut parfois être aussi rapide que l'exemple 4, sur des charges de travail extrêmement mal adaptées pour tirer parti des optimisations de l'hyperthreading.

En revanche, l’exemple 3 peut parfois, sur des charges de travail où l’hyperthreading est le plus avantageux, être presque aussi rapide que l’exemple 2, même s’il contient deux fois moins de cœurs physiques.

Bien sûr, l'exemple 1 sera le plus lent de tous les exemples, mais il peut parfois être aussi rapide que l'exemple 3, lorsque vous exécutez une charge de travail mal adaptée à l'hyperthreading.

Dans les tests réels avec les processeurs Intel modernes, nous constatons généralement que l’hyperthreading se traduit, en termes très généraux, par une amélioration des performances de 20% à 40% par rapport à l’absence d’hyperthreading (le cas "no hyperthreading" étant comparé en désactivant la fonction hyperthreading du BIOS). Occasionnellement il y aura des charges de travail pour lesquelles la désactivation de l'hyperthreading indique une performance avantage, mais ces charges de travail peuvent être rares dans les conditions réelles d'utilisation. Mais si j'avais le choix entre 4 cœurs avec hyperthreading ou 8 cœurs, en supposant que chaque cœur a la même performance, je choisirais le processeur à 8 cœurs à chaque fois.

17
allquixotic

Le multithreading est un terme pour le traitement en parallèle au niveau du système d'exploitation. Le processeur n'a rien à voir avec le multithreading.

L'hyperthreading est un concept d'Intel qui implémente le traitement "simultané" de plusieurs threads dans un seul cœur de processeur. Le système d'exploitation voit deux cœurs de processeur, bien qu'il n'y ait qu'un seul cœur physique.

4
Tero Kilkanen