Hyper-Threading
aus Wikipedia, der freien Enzyklopädie
Hyper-Threading Technology (HTT, kurz:Hyper-Threading) ist die Implementierung von hardwareseitigem Multithreading in Intels Prozessoren der NetBurst-Architektur (z. B. Pentium 4/Pentium_D, Xeon). Durch mehrere vollständige Registersätze und ein komplexes Steuerwerk werden intern parallel arbeitende Pipeline-Stufen mehreren parallelen Befehls- und Datenströmen zugeteilt. Hyperthreading ist damit Parallelverarbeitung auf der Ebene des thread-level parallelisms.
Mit Hyper-Threading können sowohl Threads als auch Prozesse parallel verarbeitet werden. Beispielsweise kann ein Task/Thread durch einen Cache Miss auf den Hauptspeicher warten, während ein zweiter Thread/Task parallel mittels Hyper-Threading laufen kann. Softwareseitig verhält sich eine CPU mit Hyper-Threading wie ein symmetrisches Multiprozessor-System. Es ist also keine Anpassung der Software von nöten, das Betriebssystem muss nur (S)MP-fähig sein und sollte Multitasking und kernel-level Threads unterstützen, um Hyper-Threading auszunutzen.
Inhaltsverzeichnis |
[Bearbeiten] Funktionsweise
Intels Hyper-Threading Technologie verbessert den Durchsatz von multi-threaded Applikationen und im Multitasking, indem sie die Auslastung der On-Chip Ressourcen erhöht, die in der Intel NetBurst-Mikroarchitektur verfügbar sind.
Ein typischer Thread belastet nur etwa 35 % der NetBurst Ausführungsressourcen, Hyper-Threading erhöht die Auslastung durch notwendige Logik und Ressourcen, die der CPU hinzugefügt werden. Die Aufteilung der einkommenden Daten auf den freien Raum erzeugt somit zwei logische Prozessoren, die vom Betriebssystem mittels klassischen Multiprocessing-Verfahren verwaltet werden.
Anzumerken gilt noch, dass das Betriebssystem selbst eine Multithreading Anwendung ist, so dass eine durch Hyper-Threading gestaltete Systemumgebung selbst von dieser Technologie profitiert. Bei nur einer geöffneten (unoptimierten) Anwendung ist der Gewinn an Performance nur marginal und vom Anwender kaum wahrzunehmen. Sind auf solchen Systemen hingegen mehrere Anwendungen gleichzeitig geöffnet, profitiert der Anwender erheblich von Hyper-Threading (Dual-Core/Multi-CPU). Je stärker das einzelne Programm Ressourcen für sich in Anspruch nimmt, desto besser greift die Multi-Threading Technologie im System, da dieses die Ressourcen auf die Threads aufteilt. Bei Anwendungen, die speziell für Multi-CPU-Systeme konzipiert sind, kann die Leistung theoretisch um die Anzahl der verfügbaren logischen wie physikalischen Prozessoreinheiten vervielfacht werden, abzüglich des anfallenden Verwaltungsaufwandes.
[Bearbeiten] Ressourcen
Beim Hyper-Threading werden die CPU-Ressourcen in drei Kategorien eingeteilt:
- Replicated Resources (nachgebildete Ressourcen)
- Partitioned Resources (unterteilte Ressourcen)
- Shared Resources (geteilte Ressourcen)
Die Siblings (Geschwister) besitzen einige der Ressourcen in eigener Kopie (Replicated Resources), einige der Ressourcen werden unterteilt (Partitioned Resources) und einige der Ressourcen müssen sie sich mit dem anderen Sibling teilen (Shared Resources).
[Bearbeiten] Unterstützung
Zu finden ist Hyper-Threading derzeit bei Intel-Prozessoren (neuere Modelle der Pentium 4-Reihe, Xeon 603/604), auch die AMD Athlon 64 X2 und Opteron Dual-Core-Prozessoren geben sich als Hyper-Threading-fähig aus, um von diversen darauf optimierten Programmabläufen zu profitieren.
Betriebssysteme mit Unterstützung für Hyper-Threading sind unter anderem Linux ab Kernel 2.4.17, neuere Versionen von FreeBSD und anderen BSDs sowie Windows XP. Windows 2000 ist zwar kompatibel mit Hyper-Threading, profitiert aber selten davon, weil es nicht zwischen physikalischen und logischen Prozessoren unterscheidet (keine SMT-Awareness). Die Leistung kann sogar durch Effekte wie Cache-Thrashing sinken.
Compiler, die Code mit Hyper-Threading-Unterstützung erzeugen können, sind die Intel-Compiler und die gcc. Hyper-Threading bringt jedoch nur für Anwendungen einen Geschwindigkeitsvorteil, deren Berechnungen parallelisierbar sind, d. h. die Berechnung eines Threads ist nicht abhängig vom Ergebnis eines anderen.
[Bearbeiten] Hyper-Threading im Detail
Die folgenden Informationen beziehen sich auf Hyper-Threading. Andere Prozessoren mit Simultaneous Multithreading können, müssen aber nicht eine vergleichbare Aufteilung verwenden.
[Bearbeiten] Replicated Resources
Zu den replizierten Ressourcen, also den pro Sibling unabhängig von den anderen Siblings vorhandenen Ressourcen, gehört in jedem Fall der vollständige Registersatz inkl. Stackpointer und Programcounter, Instructionpointer.
[Bearbeiten] Partitioned Resources
Zu den partitioned Resources, also den Ressourcen, die durch Unterteilung zwischen den Siblings aufgeteilt werden, zählen die Instruction Queues, der Reorder Buffer und die Load/Store Buffer.
[Bearbeiten] Shared Resources
Alle übrigen Ressourcen sind Shared Resources, also Ressourcen, die sich die Siblings wirklich teilen müssen, meist dadurch, dass sie nur von einem der Siblings gleichzeitig verwendet werden können. Hierzu zählen derzeit insbesondere die ALUs und FPU.
Der volle Geschwindigkeitsvorteil von Hyper-Threading gegenüber dem klassischen Singlethreading ist nur nutzbar, wenn man ein SMP-fähiges Betriebssystem und auf Hyper-Threading optimierte Software einsetzt. Gegenüber klassischem Multi-Prozessorsystemen ist Hyper-Threading im Nachteil, da beide logische Prozessoren sich die Ressourcen teilen müssen und dabei in Konflikt geraten können. Allerdings ist Hyper-Threading ganz erheblich kostengünstiger zu realisieren.
Laut Aussage von Intel kann Hyper-Threading im Multitasking-Betrieb normale Programme um 10 bis 20 %, optimierte Programme um bis zu 33 % beschleunigen.