Hyper-Threading

aus Wikipedia, der freien Enzyklopädie

(Weitergeleitet von Hyperthreading)
Wechseln zu: Navigation, Suche

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 (SMT).

Inhaltsverzeichnis

[Bearbeiten] Idee

Hinter Hyper-Threading oder SMT allgemein steht die Idee, die Rechenwerke eines Prozessors besser auszulasten, indem man die Lücken in der Pipeline mit Befehlen eines anderen Threads möglichst gut auffüllt. Solche Lücken können zum Beispiel entstehen, wenn ein Prozess oder Thread durch einen Cache-Miss auf den Hauptspeicher warten muss. Hier kann dann mittels Hyper-Threading ein zweiter Prozess oder Thread „eingeschoben“ werden und somit parallel laufen. Softwareseitig verhält sich eine CPU mit Hyper-Threading wie ein symmetrisches Multiprozessor-System – die Aufteilung der hereinkommenden Daten auf den freien Raum erzeugt zwei logische Prozessoren (im HT-Jargon siblings genannt), die vom Betriebssystem mittels klassischer Multiprocessing-Verfahren verwaltet werden können. Ist das Betriebssystem also bereits (S)MP-fähig, bedarf es keiner Anpassung, um Hyper-Threading grundlegend nutzen zu können.

Insbesondere bei der NetBurst-Mikroarchitektur belastet ein typischer Thread nur etwa 35 % der Ausführungsressourcen. Hyper-Threading erhöht diese Auslastung durch notwendige Logik und Ressourcen, die der CPU hinzugefügt werden. Während bei nur einer geöffneten (unoptimierten) Anwendung der Leistungsgewinn nur marginal und vom Anwender kaum wahrzunehmen ist, profitiert der Anwender bei mehreren gleichzeitig geöffneten Anwendungen 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. Laut Aussage von Intel kann Hyper-Threading im Multitasking-Betrieb normale Programme um 10 bis 20 %, optimierte Programme um bis zu 33 % beschleunigen.

[Bearbeiten] Funktionsweise

Beim Hyper-Threading werden die CPU-Ressourcen in drei Kategorien eingeteilt:

  • replicated resources (replizierte Ressources): Diese werden von jedem Sibling unabhängig in eigener Kopie vorgehalten. Dazu zählen in jedem Fall der vollständige Registersatz inklusive Stackpointer, Programcounter und Instructionpointer.
  • partitioned resources (unterteilte Ressourcen): Diese werden durch Unterteilung zwischen den Siblings aufgeteilt, das heißt, sie sind zwar nur einmal vorhanden, aber einzelne Teile der Ressourcen lassen sich genau einem Sibling zuordnen. Zu diesen gehören die Instruction Queues, der Reorder Buffer und die Load/Store Buffer.
  • shared resources (geteilte Ressourcen): Alle übrigen Ressourcen gehören zu den geteilten Ressourcen und werden von beiden Siblings benutzt, meist dergestalt, dass sie nur von einem der Siblings gleichzeitig verwendet werden können. Hierzu zählen derzeit insbesondere die ALUs und FPU.

[Bearbeiten] Unterstützung

[Bearbeiten] Hardware

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-, 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.

[Bearbeiten] Software

Der Geschwindigkeitsvorteil von Hyper-Threading gegenüber dem klassischen Singlethreading ist nur nutzbar, wenn man ein SMP-fähiges Betriebssystem und Anwendungen einsetzt, die idealerweise auf Hyper-Threading optimiert sind. Gegenüber klassischem Multiprozessorsystemen 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 erheblich kostengünstiger zu realisieren.

Betriebssysteme mit Unterstützung für Hyper-Threading sind unter anderem Windows-Betriebssysteme ab Windows XP, Mac OS X, neuere Versionen von FreeBSD und anderen BSDs sowie Linux (ab 2.4.17). Windows 2000 ist zwar kompatibel zu Hyper-Threading, profitiert aber selten davon, weil es nicht zwischen physikalischen und logischen Prozessoren unterscheidet (keine so genannte „SMT awareness“). Die Leistung kann wegen Effekten wie Cache-Thrashing sogar 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, das heißt die Berechnung eines Threads ist nicht abhängig vom Ergebnis eines anderen.

[Bearbeiten] Siehe auch

[Bearbeiten] Weblinks

Persönliche Werkzeuge
Buch erstellen