Intel® Hyper-Threading Technology

Home » Server-Hardware » Intel® Hyper-Threading Technology
Server-Hardware, Server-Prozessoren Keine Kommentare

Wollte man früher die Performance eines Prozessor (-Kerns) steigern, so hat man hauptsächlich entweder die Anzahl der Recheneinheiten oder aber die Taktfrequenz erhöht. Dabei konnten jedoch die Recheneinheiten eines Prozessor (-Kerns) durch einen Thread oft nicht mehr als 60% ausgelastet werden. Aus diesem Hintergrund sind mehrere Multithreading-Ansätze entstanden, welche die Rechenwerke durch das parallele abarbeiten mehrerer Threads besser auslasten sollen. Drei wesentliche Ansätze sind Fine-Grained Multithreading (FGMT),Coarse-Grained Multithreading (CGMT) und Simultaneous Multi-Threading (SMT) – auf der Intels Hyper-Threading Technology basiert.

 

 

Abgrenzung zu Multitasking

Multitasking erlaubt es einem Prozessor mehrere Prozesse (Tasks) gleichzeitig aber nicht parallel auszuführen. Dazu kann der Server-Prozessor einen Task pausieren um in der Zwischenzeit einen anderen Task abzuarbeiten. Da der Prozessor sehr schnell zwischen verschiedenen Tasks hin- und herspringen kann, wirkt es fast so, als würde er diese gleichzeitig abarbeiten. Dies ist jedoch tatsächlich nicht der Fall.

 

Ein Beispiel von Multithreading anhand von Intel Hyperthreading

Im Rahmen der Super-Skalarität können moderne Server-Prozessoren mehrere Befehle eines Threads gleichzeitig abarbeiten. Wie eingangs beschrieben, ist es daher eine gängige Methode die Prozessor-Leistung durch das Hinzufügen von weiteren Recheneinheiten weiter zu steigern. Dadurch erhöhen sich aber der Platzbedarf und auch der Energieverbrauch stark. Die Steigerung der Taktrate, also die Geschwindigkeit mit der die Rechenwerke die Befehle verarbeiten, trägt ebenso stark zur Steigerung der Leistung bei. Jedoch erhöhen diese den Stromverbrauch und somit die abzuführende Abwärme.

Eine weitere Möglichkeit die Performance eines Server-Prozessors zu steigern, ist es Techniken zu entwickeln um die Rechenwerke besser auszulasten. Wie eingangs erwähnt können in der Regel trotz diverser Optimierungen nicht alle Rechenwerke voll ausgelastet werden – auch wenn beispielsweise der Windows-Taskmanager eine Auslastung von 100% anzeigt. Dieser kann nämlich nur die Auslastung des Prozessors durch Threads wiedergeben, um die Auslastung der eigentlichen Rechenwerke nachzuvollziehen, werden spezielle Tools benötigt.

 

Quelle: https://software.intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology

Quelle: https://software.intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology

Die Grafik zeigt einen Vergleich zwischen einem Intel Xeon Prozessor ohne und mit aktiviertem Hyperthrading. Wie Sie sehen ist dieser Prozessor 4-fach Superskalar, kann bei optimaler Auslastung der Rechenwerke 4 Rechenoperationen eines Threads parallel ausführen. Auf beiden laufen 2 Threads, der schwarze Thread besteht aus 12 und der grüne Thread aus 10 Befehlen.

Links: ohne Hyperthreading

Die Threads in schwarz und grün werden innerhalb der Pipeline nacheinander ausgeführt. Ist auch nur eine der 4 Recheneinheiten einer Pipeline-Stufe mit einem Thread beschäftigt, können in dieser Zeit Recheneinheiten der gleichen Stufe nur Befehle des gleichen Threads ausführen. Gibt es zu diesem Zeitpunkt keine ausführbaren Befehle, warten diese Recheneinheiten und tun nichts.

Rechts: mit Hyperthreading

Mit aktiviertem Hyperthrading ist es mögliche untätige Rechenwerke innerhalb der Pipeline mit Befehlen eines zweiten Threads auszulasten. Wie gut das funktioniert ist von den „Vorhersage- und Sortier-Features“ des Hyperthrading-fähigen Prozessors und der eingesetzten Software abhängig.

 

Grundlagen der Verarbeitung von Prozessen

 

Prozesse, Threads und Befehle

Die folgende Tabelle zeigt das vereinfachte Prozess-Modell, nachdem ein Prozess aus mindestens einem (in der Regel aber mehreren) Threads besteht. Ein Thread wiederum beinhaltet mindestens einen (in der Regel aber viele) vom Prozessor abzuarbeitende Befehle.

Prozess 1
Thread 1Thread 2
Befehl 1Befehl 2Befehl 3Befehl 1Befehl 2

Ein „normaler“ nicht-Multithreading fähiger Prozessor (-Kern) kann nur einen Thread nach dem Anderen abarbeiten.

 

Die Pipeline

Die Abarbeitung der Befehle eines Threads und dessen Befehlen laufen nicht willkürlich ab, sondern nach einer festen Reihenfolge – in einer sogenannten Pipeline. Die folgende Abbildung zeigt eine vereinfachte Pipeline eines Intel Xeon Prozessors mit Hyperthrading. Im Unterschied zu einer „regulären“ Pipeline sind der Architektur State und die darin enthaltenen Register zweifach ausgeführt – das Betriebssystem sieht somit zwei logische Prozessoren.

 

Quelle: http://developer.intel.com/

Quelle: http://developer.intel.com/

 

Weitere Informationen / Quellen

Intel® Hyper-Threading-Technik

Performance Insights to Intel® Hyper-Threading Technology

Hyper-Threading Technology Architecture and Microarchitecture