Warum bietet Hyper-Threading zwei virtuelle Kerne, aber nicht mehr?

1620
A.L

Hier ist eine Erklärung von Hyper-Threading in Wikipedia :

Für jeden physisch vorhandenen Prozessorkern adressiert das Betriebssystem zwei virtuelle (logische) Kerne und teilt nach Möglichkeit die Arbeitslast zwischen ihnen auf.

Ich frage mich, warum wir kein Hyper-Threading haben, das 3 oder 4 logische Kerne pro physischem Kern bereitstellt.

1
[Sparc hat 8 Thread / Core-Design mit 16-Core-128-Thread-CPUs] (https://en.wikipedia.org/wiki/Simultaneous_multithreading). IMHO hilft es jedoch nur, wenn Sie viele Blockierungsbedingungen wie Cache-Misses haben. Ansonsten reicht 2 Thread / Core phuclv vor 7 Jahren 0

4 Antworten auf die Frage

1
xavier_fakerat

Diese Diskussion wurde bei ServerFault SE angesprochen: Wie viele CPUs sollten mit Hyperthreading verwendet werden?

Wann führt die Verwendung von zwei verschiedenen Threads dazu, dass einer schlechter läuft?

Obwohl sich die Abhängigkeiten zwischen Anweisungen nicht ändern, gibt es ein neues Problem - den Wettbewerb . Diese unterschiedlichen Threads konkurrieren um den Speicherzugriff, sowohl in Bezug auf die Cacheauslastung als auch in der Bandbreite, was etwas kontraproduktiv ist.

Der logische Kern kann nicht viel tun, bietet aber ein wenig mehr Parallelität. Es ist weit davon entfernt, ein echter Kern zu sein. Tatsächlich bietet es etwa 30% der Leistung eines echten physischen Kerns.

Ihr Zweck bestand einfach darin, den Parallelismus in einer Welt zu erhöhen, die von E / A-gebundenen (nicht CPU-intensiven) Prozessen dominiert wird. Wenn ein CPU-intensiver (CPU-gebundener) Thread auf einen dieser Kerne umgeschaltet wird, wird seine Leistung erheblich beeinträchtigt.

Stellen Sie sich nun ein Szenario vor, in dem ein solcher Thread um mehrere logische Kerne herumgeschleudert wird. Dies kann die Leistungsfähigkeit beeinträchtigen.

Quelle: Wenn HyperThreading wehtut

1
harrymc

Das Handbuch für das technische Benutzerhandbuch für die Intel Hyper-Threading-Technologie enthält einige Hinweise, warum Intel nicht mehr als zwei Threads pro Core in seinen Consumer-CPUs versucht, was bei einigen Server-CPUs der Fall war.

Bei der Erklärung der Hyper-Threading-Technologie heißt es:

Jeder logische Prozessor

  • Hat einen eigenen Architekturzustand
  • Führt gleichzeitig einen eigenen Code-Stream aus
  • Kann unabhängig unterbrochen und angehalten werden

Die beiden logischen Prozessoren haben dasselbe

  • Ausführungs-Engine und die Caches
  • Firmware- und Systembus-Schnittstelle

Der wichtige Teil ist, dass die beiden logischen Prozessoren dieselbe Execution Engine verwenden, was bedeutet, dass die Einheiten, aus denen der Kern besteht, nicht doppelt vorhanden sind. Sobald die Recheneinheit beispielsweise von einem Thread verwendet wird, kann sie nicht von dem anderen Thread verwendet werden. Dadurch wird eine vollständige Parallelität verhindert, sodass zwei Threads nicht in parallelen Anweisungen desselben Typs ausgeführt werden können - einer muss warten, bis der andere fertig ist.

Intel hat den durchschnittlichen Leistungsgewinn der Threads wie folgt quantifiziert:

Ein Prozessor mit Hyper-Threading-Technologie kann bei der Ausführung von Multi-Threading-Betriebssystem und Anwendungscode gegenüber einem vergleichbaren Prozessor mit Intel-Architektur ohne Hyper-Threading-Technologie eine Leistungssteigerung von 30 Prozent erzielen.

Der statistische Gewinn von zwei Threads gegenüber einem liegt daher nur in der Größenordnung von 30%, was sehr weit von den 100% entfernt ist, die man erwarten würde, wenn zwei Threads auf demselben Kern die Arbeit eines Threads verdoppeln könnten.

Ich würde daher schätzen, dass, wenn Intel drei Threads auf dem Kern aktiviert hätte, der statistische Gewinn viel niedriger wäre, vielleicht in der Größenordnung von 10% oder weniger.

In Anbetracht der Tatsache, dass einige Hardware für jeden Thread dupliziert werden muss, nämlich den Architekturstatus und die Interrupt-Logik, ist der Gewinn wahrscheinlich nicht die Kosten wert, die diese zusätzliche Hardware zum Preis des Kerns hinzufügen würde.

Für ein effektives Hyper-Threading hätte Intel die Anzahl der Einheiten desselben Typs in jedem Kern erhöhen müssen. In der Haswell-Mikroarchitektur, die 4 Ports für Laden / Speichern, 4 für Ganzzahl und 2 für Verzweigungen aufweist, hat dies genau das getan, so dass selbst zwei Threads, die identische Ganzzahl-Workloads ausführen, wahrscheinlich keine großen Konflikte verursachen würden. Allerdings hat sich Intel immer noch an das Modell von zwei Hyper-Threads pro Kern gehalten. Ich würde wahrscheinlich annehmen, um die Hardware zu sparen, die benötigt wird, um mehr Hyper-Threads zuzulassen, oder vielleicht sogar, weil moderne Betriebssysteme einen solchen nicht wirklich effizient nutzen können die Architektur.

0
Ramhound

Ich frage mich, warum wir kein Hyper-Threading haben, das 3 oder 4 logische Kerne pro physischem Kern bereitstellt.

Der Grund wäre, dass Intel-Ingenieure die Intel Hyper-Threading-Technologie entwickelt haben, um bei Aktivierung nur 2 Threads pro physischem Kern zu verarbeiten.

Hier ist Intels offizielle Beschreibung dieser Funktion:

Die Intel Hyper-Threading-Technologie (Intel HT-Technologie) liefert zwei Verarbeitungsthreads pro physischem Kern. Anwendungen mit hohem Thread können mehr Arbeit parallel erledigen und Aufgaben früher erledigen.

enter image description here

Quelle: Intel® Core ™ i7-4770 Prozessor - Klicken Sie auf das? neben der Listenfunktion auf der Spezifikationsseite eines Intel-Prozessors.

Danke für die Antwort, aber ich frage mich immer noch, warum Intel HT nicht für 3 oder 4 Threads vorgesehen hat. A.L vor 7 Jahren 0
Weil das schwieriger ist. Hyperthreading ist am einfachsten, es erlaubt den Teilen des Kerns, die derzeit nicht für den Haupt-Thread verwendet werden, Teile des Sekundär-Threads. Es gibt nur so viele Abschnitte in einem Kern (kein Punkt mit redundanten Komponenten, besser, um einen anderen Kern zu erstellen) Der sekundäre Thread wird innerhalb des Overheads des ersten Kerns verarbeitet, was bereits geringer ist als die Ressourcen für den Hauptthread. tldr: nicht genug Platz, besser, um einen anderen Kern als mehr Platz zu machen. Baldrickk vor 7 Jahren 1
@AL - Wenn Sie wissen möchten, warum Intels Ingenieure diese Funktion so entworfen haben, wie sie es getan haben, sollten Sie sich mit Intel in Verbindung setzen. Die Kontakte, die ich für Intel gearbeitet habe, können mir nicht den Grund nennen. Ramhound vor 7 Jahren 0
0
otislafayette

Warum nicht 3 oder 4 Threads? Oder 8? Verminderte Renditen. Sun hat 8 Threads pro Kern und für Dinge, die viele Threads benötigen, aber keine hohe Leistung, hat es gut funktioniert, aber Sie werden feststellen, dass die Taktrate viel niedriger war als die Intel-Chips der gleichen Zeit. Das Duplizieren von Teilen des Kerns für mehr Fäden trägt zu zusätzlicher Wärmeentwicklung bei. Die neueren Chips von Sun und Oracle bieten die Möglichkeit, einige oder alle anderen Threads eines bestimmten Kerns dynamisch zu deaktivieren, um eine hohe Leistung für eine einzelne Threadaufgabe bereitzustellen.