Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Hyper-Threading

aus Wikipedia, der freien Enzyklopädie

Hyper-Threading Technology (kurzHTT, üblicherweise nurHyper-Threading und dannHT genannt) ist eine spezielle Implementierung vonhardwareseitigem Multithreading inIntel-Prozessoren, die auch vonAMD übernommen wurde. Durch mehrere vollständigeRegistersätze und ein komplexes Steuerwerk werden intern parallel arbeitendePipeline-Stufen zwei parallelen Befehls- und Datenströmen zugeteilt. Hyper-Threading entspricht konzeptuell demSimultaneous Multithreading (SMT).[1]

Zu beachten: DerProzessorkern kann sowohl einen einzelnenThread (zweiter Thread abgeschaltet) als auch zwei verschiedene Threads parallel bearbeiten, benötigt im letzteren Fall somit jeweils eigeneSeitentabellen. Diese Threads können auch von einem einzigenProzess stammen und somit im selbenProzesskontext rechnen.

Konzept

[Bearbeiten |Quelltext bearbeiten]
Hyper-Threading-Schema in Intel-Prozessoren

Hinter Hyper-Threading steht die Idee, die Rechenwerke eines Prozessors besser auszulasten, indem zweiThreads sich die Ressourcen teilen, die für einen vollständigen Kern notwendig wären. Dabei kann ein Thread die Ressourcen verwenden, die der andere im Moment nicht belegt – insbesondereALU-Komponenten und FPU; auch Pipeline-Lücken, die zum Beispiel entstehen können, wenn ein Prozess oder Thread durch einenCache-Miss auf denArbeitsspeicher warten muss. Hier kann dann mittels Hyper-Threading solange der zweite Prozess oder Thread rechnen und somit parallel laufen. Softwareseitig verhält sich eineCPU mit Hyper-Threading ähnlich wie einSymmetrisches Multiprozessorsystem (SMP) – die Aufteilung der hereinkommenden Daten auf den freien Raum erzeugen zwei logische Prozessoren (im HT-Jargonsiblings genannt), die vom Betriebssystem mittels klassischer Multiprocessing-Verfahren verwaltet werden können. Auch wenn ein SMP-fähiges Betriebssystem somit theoretisch ohne Anpassung mit HT umgehen kann, ist ein angepasstes Betriebssystem sinnvoll, da ansonsten nicht die volle Performance ausgenutzt werden und es in Einzelfällen sogar zu einer Leistungsreduzierung kommen kann.[2]

Insbesondere bei derNetBurst-Mikroarchitektur belastet ein typischer Thread nur etwa 35 % der Ausführungsressourcen. Hyper-Threading kann diese Auslastung erhöhen: Während bei nur einer laufenden (unoptimierten) Anwendung der Leistungsgewinn nur marginal und vom Anwender kaum wahrzunehmen ist, profitiert der Anwender bei mehreren gleichzeitig laufenden Anwendungen bzw. Threads von Hyper-Threading. Dem Leistungsgewinn steht ein vergleichsweise geringer Mehraufwand in der Logik des Prozessors gegenüber: Lediglich die Threading-Logik und zusätzliche Registersätze für die weiteren Threads müssen vorhanden sein, jedoch keine zusätzlichen Rechenwerke.

Die logischen Prozessoren sind gleichwertig;[1] aufgrund der gemeinsam zu verwendenden Recheneinheiten können sie sich gegenseitig behindern, wodurch die Gesamtrechenleistung deutlich unter der doppelten Einzelleistung liegt. Wird eine der beiden Thread-Ausführungseinheiten abgeschaltet, so kann die andere gänzlich ungestört mit voller Geschwindigkeit rechnen. Das Betriebssystem sollte daher rechenintensive Threads explizit einem Kern zuweisen, der keinen weiteren Thread bearbeitet (und die zweite Ausführungseinheit abschalten). Die mögliche Rechenleistung eines Prozessors mitn{\displaystyle n} HT-fähigen Kernen (mit jeweils zwei logischen Prozessoren) liegt im Allgemeinen deutlich unter der eines Prozessors mit2n{\displaystyle 2n} „vollwertigen“ Kernen.

Auch beiIn-Order-Architekturen wie etwa demAtom-Prozessor kann Hyper-Threading erhebliche Leistungsgewinne bringen. Da eine In-Order-Architektur keine Operationen innerhalb eines Threads vorziehen kann und somit alles innerhalb des Threads der Reihe nach abgearbeitet wird, kommt es häufig zu „Lücken“ in der Pipeline, die dann mit Operationen eines anderen Threads gefüllt werden können. Hier wirkt Hyper-Threading ähnlich wieout-of-order execution, allerdings lediglich auf Thread-Ebene. Die einzelnen Threads werden aufgrund der In-Order-Ausführung weiterhin nur langsam ausgeführt, Hyper-Threading erhöht also nicht die Single-Thread-, sondern die Multi-Thread-Leistung.

Aber auch bei modernen „breiten“ (vierfach superskalar) Mikroarchitekturen wie etwaNehalem kann Hyper-Threading laut Aussage von Intel imMultitasking-Betrieb normale Programme um 10 bis 20 %, optimierte Programme um bis zu 33 % beschleunigen.

Funktionsweise

[Bearbeiten |Quelltext bearbeiten]

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

  • replicated resources (replizierte Ressourcen): Diese werden von jedem Sibling unabhängig in eigener Kopie vorgehalten. Dazu zählen in jedem Fall der vollständigeRegistersatz inklusiveStackpointer undProgramcounter.
  • 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 dieArithmetisch-logische Einheit (ALU) und dieGleitkommaeinheit (FPU).

Unterstützung

[Bearbeiten |Quelltext bearbeiten]

Hardware

[Bearbeiten |Quelltext bearbeiten]

Zu finden ist Hyper-Threading beiIntel-Prozessoren in neueren Modellen derPentium-4-Reihe und deren Derivaten, beiXeon ab der Netburst-Familie, bei vielen Core-i-Modellen sowie einigenAtom-Prozessoren. Auch die Mehrkernprozessoren vonAMD wieAthlon 64 X2,Opteron und neuer geben sich per Flag als Hyper-Threading-fähig aus, obwohl sie es nicht sind.Bei diversen Mehrkernprozessoren von Intel wie zum BeispielPentium D oderCore 2 Duo ist, je nach Ausführung, Hyper-Threading nicht vorhanden, aber trotzdem das entsprechende Prozessorflag gesetzt.

Hyperthreading kann in der Regel imBIOS oderUEFI abgeschaltet werden, was vor allem im Workstation- und Serverbereich genutzt wird, damit die verbleibenden CPU-Kerne auch jeweils die volle mögliche Rechenleistung erbringen. Dies reduziert zwar im Allgemeinen die Rechenleistung des Gesamtsystems bei vielen Threads, erhöht sie jedoch bei Softwarekonstellationen, die weniger oder gleich viele Threads einsetzen als die verbleibende Kern-Anzahl.

Software

[Bearbeiten |Quelltext bearbeiten]

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 oder allgemein auf Multithreading optimiert sind. Gegenüber klassischen Multiprozessorsystemen ist Hyper-Threading bei der reinen Leistung im Nachteil, da sich die zwei Threads auf einem Prozessorkern die verfügbaren Ressourcen teilen und somit jeweils langsamer ausgeführt werden, als ein einziger Thread auf dem Kern. Die Ausführungsgeschwindigkeit eines Threads auf einem logischen Prozessor ist erheblich davon abhängig, wie günstig sein Ressourcenbedarf zum Bedarf des anderen Threads passt. Daher müssen z. B. Threads mit hartenEchtzeitanforderungen fest einem Kern ohne zweiten Thread zugeordnet werden, oder das Hyperthreading muss abgeschaltet werden.Bei der Einführung der Hyperthreading-Technologie warb Intel mit einer Leistungssteigerung pro zusätzlichem logischen Prozessor von bis zu 33 %. Dies ist vermutlich der Idealfall, im Alltag bringt ein CPU-Kern aus zwei HT-siblings eher Leistungswerte von ca. 120–125 % im Vergleich zu einem einfachen, vollwertigen CPU-Kern.

Hyper-Threading ist erheblich kostengünstiger zu realisieren als zwei vollwertige Kerne. Es hebt bei korrekter Implementierung insbesondere im Betriebssystem die Effizienz des Prozessors in Softwareumgebungen, die viele Threads gleichzeitig ausführen, und bewahrt dennoch die Fähigkeit, bei wenigen Threads eine hohe Single-Thread-Performance zu erreichen. Die Prozessorkerne können recht „breit“ werden – es bietet sich an, Recheneinheiten, die bei einem HT-siblings-Paar im statistischen Mittel häufig zugleich benötigt werden, tatsächlich doppelt in den CPU-Kern einzubauen, um gegenseitiges Behindern zu reduzieren. Dies erhöht die Leistung pro Thread. Erzeugt eine Software mehr Threads als Kerne, so sinkt im Allgemeinen die Rechenleistung, da das Betriebssystem häufig den Thread-Kontext umladen muss. Moderne Betriebssysteme versuchen, einen Thread auch nach einer Unterbrechung wieder demselben CPU-Kern zuzuweisen, auf dem er zuvor ausgeführt wurde. Dies kann stark beschleunigend wirken, wenn notwendige Speicherbereiche zur Ausführung dieses Threads sich noch im zugehörigen Prozessorcache befinden und daher nicht nachgeladen werden müssen.

Betriebssysteme mit Unterstützung für Hyper-Threading sind unter anderemWindows-Betriebssysteme abWindows XP,macOS, neuere Versionen vonFreeBSD und anderenBSDs sowieLinux.Windows 2000 ist zwar kompatibel zu Hyper-Threading, profitiert aber selten davon, weil es nicht zwischen physischen und logischen Prozessoren unterscheidet (keine so genannte „SMT awareness“). Die Leistung kann wegen Effekten wie Cache-Thrashing sogar sinken. Das Betriebssystem Windows ist für Sechskerner mit Hyper-Threading erst abWindows 7 uneingeschränkt empfehlenswert, da der Scheduler vonWindows Vista und älter nicht optimal mit zwölf Threads, die durch Hyper-Threading generiert werden, umgehen kann.[3]

Compiler, die Hyper-Threading-freundlichen Code erzeugen können, sind die Intel-Compiler und dieGNU Compiler Collection. Hyper-Threading bringt jedoch nur für Anwendungen einen Geschwindigkeitsvorteil, deren Berechnungenparallelisierbar sind, das heißt die Berechnung eines Threads ist nicht abhängig vom Ergebnis eines anderen.

Ob Computerspiele von Hyper-Threading profitieren oder nicht, hängt in erster Linie davon ab, wie viele fordernde Threads die betreffenden Spiele dem Prozessor zur Verfügung stellen können und wie viele davon der Prozessor gleichzeitig abarbeiten kann. Während Dual-Core-CPUs mit aktuellen Spielen sehr gut von Hyper-Threading profitieren, da die meisten aktuellen Spiele dem Prozessor mehr als zwei fordernde Threads anbieten,[4] büßt die Mehrheit der Spiele Anfang 2011 bei aktiviertem Hyper-Threading auf einem Vierkernprozessor sogar geringfügig an Performance ein, da sie dem Prozessor kaum mehr als vier Threads anbieten, gleichzeitig aber der Verwaltungsaufwand innerhalb des Prozessors aufgrund von Hyper-Threading steigt.[5] Spätestens seit 2009 gibt es allerdings auch Ausnahmen wieAnno 1404, die dem Prozessor mehr als vier fordernde Threads anbieten, so dass auch Vierkerner von Hyper-Threading profitierten.[6]

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Weblinks

[Bearbeiten |Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. abDeborah T. Marr, Frank Binns, David L. Hill, Glenn Hinton, David A. Koufaty, J. Alan Miller, Michael Upton: Hyper-Threading Technology Architecture and Microarchitecture. In: Intel Technology Journal, Vol. 06, Issue 01. Intel, 14. Februar 2002, abgerufen am 3. Februar 2017 (englisch). 
  2. computerbase.de:Intel Hyper-Threading: Windows XP und Windows 2000 im Vergleich
  3. Nico Ernst, golem.de: Test: Core i7 980X - sechs Kerne, aber selten schneller, Hyperthreading bremst unter Vista. 11. März 2010, abgerufen am 24. Oktober 2011. 
  4. Volker Rißka: Test: Intel Core i3-2100/2120 - Geheimtipp für Spieler. Computerbase, 22. April 2011, abgerufen am 24. Oktober 2011. 
  5. Volker Rißka: Test: Intel „Sandy Bridge“. Computerbase, 3. Januar 2011, abgerufen am 24. Oktober 2011. 
  6. Marc Sauter, PC Games Hardware: Lynnfield im Test: Benchmarks des Intel Core i5-750 und Core i7-860 in Anno 1404. 31. Juli 2009, abgerufen am 5. November 2009: „Anhand des i7-920 mit aktiviertem respektive deaktiviertem Simultaneous Multi Threading verifizieren wir, dass Anno 1404 das erste Spiel ist, welches dank SMT schneller läuft - plus 8 Prozent.“ 
Befehlssatzerweiterungen derx86-Architektur (16 Bit;32 Bit:IA-32;64 Bit:x64)
Betriebsmodi

Real ModeProtected ModeVirtual 8086 ModeSystem Management ModeLong ModeCompatibility Mode

Befehlssatzerweiterungen

x87PAENXAMD64/Intel 64 (x64) ⬝HTTVT-x/AMD-V/VIA VT3DNow!MMXSSESSE2PadLockSSE3SSSE3SSE4SSE4aSSE5F16CAVXCLMULAES-NIFMATSXBMIMPXSGX

Abgerufen von „https://de.wikipedia.org/w/index.php?title=Hyper-Threading&oldid=263648285
Kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp