Was ist der Unterschied zwischen Multithreading und Hyperthreading? [geschlossen]

10

Ich habe die Begriffe Hyper-Threading und Multithreading gehört, aber was genau ist der Unterschied zwischen ihnen? Welche Art von Intel-Prozessor verwendet sie?

Rose
quelle
2
Sie versuchen, Dinge zu vergleichen, die nicht direkt vergleichbar sind. gerade verwandt. Es ist wie zu fragen: "Was ist der Unterschied zwischen einem Fuß und einem Schuh?" Abgesehen davon, was hat Ihre Forschung bisher ergeben? Wo genau werden Sie aufgehängt, um den Unterschied anhand von Definitionen zu bestimmen, die sich leicht aus dem Internet ableiten lassen?
Ƭᴇcʜιᴇ007
1
Ich weiß weder Multithreading noch Hyperthreading. Ich werde gebeten, sie zu kennen
Rose
1
Die Stapelüberlauf-Nazis haben das Thema als "Off-Thema" geschlossen ... Es ist eine sehr gute Frage, ist beliebt und sollte nicht geschlossen werden.
Robbo_UK
superuser.com/questions/133082/…
Ciro Santilli 法轮功 病毒 病毒 审查 六四 27

Antworten:

19

Multithreading bezieht sich auf die allgemeine Aufgabe, mehr als einen Ausführungsthread innerhalb eines Betriebssystems auszuführen. Multithreading ist allgemeiner als „Multiprocessing“, das mehrere umfassen kann Systemprozesse (ein einfaches Beispiel auf Windows wäre, beispielsweise zur gleichen Zeit Internet Explorer und Microsoft Word ausgeführt wird ), oder es kann aus einem Verfahren bestehen , die mehrere haben Fäden innerhalb es.

Multithreading (oder sollte ich sagen Multiprocessing) ist ein Softwarekonzept . Praktisch jede Turing-vollständige CPU kann Multithreading ausführen, selbst wenn der Computer nur einen CPU-Kern hat und dieser Kern kein Hyperthreading unterstützt. Um die Mehrfachverarbeitung zu unterstützen, verschachtelt die CPU die Ausführung verschiedener Ausführungsthreads, indem sie einen, dann einen anderen und dann einen anderen ausführt, wobei das Betriebssystem die verfügbare Zeit in "Slices" aufteilt und ungefähr die gleiche Zeit dafür bereitstellt Jeder Thread (die Zeit muss nicht gleich sein, aber normalerweise wird dies so gemacht, es sei denn, ein Prozess fordert eine höhere Priorität an).

Beachten Sie, dass diese Software-Threads zwischen den verfügbaren Kernen "verschachtelt" werden , wenn zu einem bestimmten Zeitpunkt mehr Software- Threads ausgeführt werden, die zu einem bestimmten Zeitpunkt ausgeführt werden sollen, als verfügbare Hardware- Threads (gleichzeitig) verfügbar sind. Wenn Sie bei einem "Uniprozessor" (einem CPU-Kern ohne Hyperthreading) mehr als einen Software-Thread haben, werden diese immer angezeigtverschachtelt sein. Wenn Sie eine 4-Kern-CPU mit Hyperthreading haben, sind das 8 "Hardware-Threads", was bedeutet, dass die CPU 8 gleichzeitige Ausführungsthreads gleichzeitig ausführen kann. Wenn also 8 Software-Threads versucht haben, ausgeführt zu werden, können alle gleichzeitig ausgeführt werden ;; Wenn Sie jedoch 9 Software-Threads hätten, müsste einer der Hardware-Threads ein Thread-Paar verschachteln (das genaue ausgewählte Thread-Paar würde von der Scheduler-Implementierung des Betriebssystems abhängen).


Hyperthreading hingegen bezieht sich auf eine sehr spezielle Hardwaretechnologie , die von Intel entwickelt wurde und die es einem einzelnen Prozessorkern ermöglicht, mehrere Ausführungsthreads effizienter zu verschachteln. Mit anderen Worten, eine CPU mit Hyperthreading bietet eine Leistung, die etwas höher ist als eine CPU, die ansonsten dieselbe ist, jedoch ohne Hyperthreading, da die Hyperthread-CPU zwei gleichzeitig ausgleichen kann (manchmal mehr, aber Hyperthreading ist normalerweise 2-) Weg) Threads der Ausführung auf einem bestimmten Kern.

Hyperthreading ist jedoch streng langsamer als vollständig getrennte physische Kerne, da es einige Arten von Vorgängen gibt, die die Leistungsvorteile von Hyperthreading stören können, während es weniger Vorgänge gibt, die ein solches Ereignis mit vollständig getrennten Kernen verursachen können.

Nehmen Sie das folgende Beispiel, in dem angenommen wird, dass "1 Kern" in allen Beispielen genau die gleiche Leistung erbringt:

Beispiel 1: 2 Kerne, kein Hyperthreading.
Beispiel 2: 4 Kerne, kein Hyperthreading.
Beispiel 3: 2 Kerne mit Hyperthreading.
Beispiel 4: 4 Kerne mit Hyperthreading.

In diesem Fall ist Beispiel 4 immer am schnellsten. Beispiel 2 ist manchmal ungefähr so ​​schnell wie Beispiel 4 bei Workloads, die äußerst schlecht geeignet sind, die Optimierungen von Hyperthreading zu nutzen.

Beispiel 3 hingegen kann bei Workloads, bei denen Hyperthreading am vorteilhaftesten ist, manchmal fast so schnell sein wie Beispiel 2, obwohl es halb so viele physische Kerne aufweist.

Beispiel 1 ist natürlich das langsamste aller Beispiele, aber manchmal ist es ungefähr so ​​schnell wie Beispiel 3, wenn eine Workload ausgeführt wird, die für Hyperthreading schlecht geeignet ist.

In realen Benchmarks mit modernen Intel-CPUs stellen wir normalerweise fest, dass Hyperthreading im Allgemeinen zu einer Leistungsverbesserung von 20% bis 40% im Vergleich zu keinem Hyperthreading führt (wobei der Fall "kein Hyperthreading" durch Deaktivieren der Hyperthreading-Funktion in der Tabelle verglichen wird) BIOS). Gelegentlich wird es Workloads, wo eine Leistung Hyper - Threading zu deaktivieren zeigt Vorteil , aber diese Workloads können in der tatsächlichen Nutzung selten. Wenn ich jedoch die Wahl zwischen 4 Kernen mit Hyperthreading oder 8 Kernen hätte, vorausgesetzt, jeder Kern selbst hat die gleiche Leistung, würde ich jedes Mal die 8-Kern-CPU wählen.

allquixotic
quelle
2
Um genau zu sein, sind Multithreading und Multiprocessing nicht dasselbe. Threads teilen den Ausführungskontext mit dem Prozess, dem sie zugeordnet sind, während Prozesse ihre eigenen Ausführungskontexte haben. Für diese Antwort ist diese Unterscheidung jedoch nicht so wichtig.
Tero Kilkanen
1
Die Hyperthreading-Technologie wurde nicht "von Intel entwickelt". Für Mainline x86 ist dies nur ein Markenname für gleichzeitiges Multithreading. Wenn der Alpha 21464 hergestellt worden wäre, wäre er einer der ersten prominenten Benutzer von SMT gewesen. Intel hat die erste veröffentlichte Verwendung von SMT (möglicherweise mit Ausnahme weniger bekannter Prozessoren) mit einigen Pentium 4s hergestellt, aber die Grundidee war keine Erfindung von Intel.
Paul A. Clayton
2
Quibble: Hyperthreading ist nicht strikt langsamer als separate Kerne. Man kann (künstliche) Fälle entwickeln, in denen das Teilen von L1-Caches ein größerer Vorteil ist als die vollständige Nutzung der Ressourcen eines Kerns. Ein anderer besonderer Fall kann sein, wenn ein Thread dauerhaft aktiv ist und ein anderer kurz intermittierende Ereignisse behandelt; Das intermittierende Aufwecken eines Kerns ist teurer als das Aufwecken eines Threads auf einem aktiven Kern. Wenn bei Threads mit extrem niedrigem ILP kein Cache-Konflikt ein Problem darstellt, kann die höhere Energieeffizienz bei Verwendung eines einzelnen Kerns ein höheres Turboboosting (bessere Leistung) ermöglichen.
Paul A. Clayton
3
Die Antworten können auf SU bearbeitet werden. Wenn ihr es also verbessern wollt, fühlt euch bitte frei. Denken Sie auch an den offensichtlichen Kenntnisstand des OP. Selbst meine Antwort ist wahrscheinlich technischer als erwartet oder gewollt. Ich habe absichtlich einige Details beschönigt, um die Erklärung zu vereinfachen. Ich bezweifle, dass das OP bald Prozessoren entwerfen wird und all diese Details unbedingt kennen muss. Trotzdem interessante Kommentare.
Allquixotic
1
Vorgeschlagene Änderungen, die den Inhalt ändern (dh nicht nur Grammatik- / Tippfehlerkorrekturen oder Umformulierungen aus Gründen der Klarheit), werden wahrscheinlich abgelehnt.
Paul A. Clayton
4

Multithreading ist ein Begriff für die parallele Verarbeitung auf Betriebssystemebene. Der Prozessor hat nichts mit Multithreading zu tun.

Hyperthreading ist ein Intel-Konzept, das die "gleichzeitige" Verarbeitung mehrerer Threads in einem einzelnen Prozessorkern implementiert. Das Betriebssystem sieht zwei Prozessorkerne, obwohl es nur einen physischen Kern gibt.

Tero Kilkanen
quelle