- Hyperthreading
-
Hyper-Threading Technology (kurz: HTT, üblicherweise nur Hyper-Threading genannt) ist die Implementierung von hardwareseitigem Multithreading in Intel-Prozessoren. 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 Simultaneous Multithreadings.
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 nötig, das Betriebssystem muss nur (S)MP-fähig sein und sollte Multitasking und Kernel-Level-Threads unterstützen, um Hyper-Threading auszunutzen.
Inhaltsverzeichnis
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 klassischer 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 Leistungsgewinn nur marginal und vom Anwender kaum wahrzunehmen. Sind auf solchen Systemen hingegen mehrere Anwendungen gleichzeitig geöffnet, profitiert der Anwender von Hyper-Threading. 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.
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).
Unterstützung
Zu finden ist Hyper-Threading bei Intel-Prozessoren (neuere Modelle der Pentium-4-Reihe und deren Extreme-Edition-Derivate, NetBurst-Xeons, Core i7 und die Atom-Reihe). Auch die Mehrkernprozessoren von AMD (darunter entsprechende Athlon-64-X2-, Opteron- und Phenom-CPUs) geben sich über ein Flag als hyper-threading-fähig aus, obwohl sie es nicht sind, dadurch können sie aber potenziell von HT-optimierten Programmabläufen profitieren.
Betriebssysteme mit Unterstützung für Hyper-Threading sind unter anderem Windows XP, Windows Vista, Windows Server 2003, Mac OS X, neuere Versionen von FreeBSD und anderen BSDs sowie Linux (ab 2.4.17). 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 GNU Compiler Collection. 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.
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.
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, Programcounter und Instructionpointer.
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.
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.
Siehe auch
Weblinks
Wikimedia Foundation.