Intels Hyper-Threading Technologie
Hyperthrading
Als Hyperthreading (abgeleitet von Multithreading) bezeichnet Intel die Fähigkeit einer CPU, auf mittels Duplizierung und Aufteilung bestimmter Ressourcen generierten virtuellen CPUs (Siblings) mehrere (Teil-)Programme parallel auszuführen. Konkurrierende Begriffe, welche dieselbe Technologie umschreiben, sind Symmetric Multithreading und Simultanous Multithreading. Welcher dieser Begriffe sich allgemein durchsetzen wird, bleibt noch abzuwarten.
Nicht zu verwechseln ist die Hyperthreading mit der tatsächlichen Integration mehrerer CPUs auf einem Chip, wie sie vor allem bei Mips und Sparc häufig anzutreffen ist. Dort spricht man von echtem symmetrischem Multiprocessing (SMP). Im Gegensatz zu SMP besitzt der Chip der Hyper-Threading-CPU keine vollständigen CPUs, sondern lediglich zwei Threads.
Die genaue, von Intel vergebene Bezeichnung lautet Hyper-Threading Technology mit der Abkürzung HT-Tech oder HTT. Das fälschlicherweise oft ohne -Tech oder -T benutzte HT ist die Abkürzung für HyperTransport, ein unter der Obhut von AMD entwickeltes, serielles, resp. paralleles, bidirektionales Bussystem.
Beim Hyperthreading 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 Hyperthreading derzeit bei Intel-Prozessoren (neuere Modelle der Pentium 4-Reihe, Xeon 603/604).
Betriebssysteme mit Unterstützung für Hyperthreading sind unter anderem Linux ab Kernel 2.4.17, neuere Versionen von FreeBSD und anderen BSDs sowie neuere Versionen (aktuelle Service Packs) von Windows 2000 und Windows XP.
Compiler, die Code mit Hyperthreading-Unterstützung erzeugen können, sind die Intel-Compiler und gcc. Hyperthreading 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.
Hyperthreading im Detail
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.
Partitioned Resources:
Zu den partitioned Resources, also den Ressourcen, die durch Unterteilung zwischen den Siblings aufgeteilt werden, zählen diverse Zwischenspeicher in der CPU.
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 ALU und FPU. Der 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 SMP ist Hyper-Threading im Nachteil, jedoch ganz erheblich kostengünstiger zu realisieren. Laut Aussage von Intel kann Hyper-Threading im Multitasking-Betrieb normale Programme um 10-20%, optimierte Programme um bis zu 33% beschleunigen.
Funktionsweise
Intels Hyper-Threading Technologie verbessert die Performance von multi-threaded Applikationen, indem sie die Auslastung der On-Chip Ressourcen, welche in der Intel NetBurst Mikroarchitektur verfügbar sind, erhöht. Ein typischer Thread belastet nur etwa 35% der NetBurst Ausführungsressourcen. HTT 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 einen logischen zweiten Prozessor auf einem physikalischen Prozessor.