Mehr Performance durch automatisches Übertakten

Test: Intels Turbo-Technologie bei Core-i7-Prozessoren

Thread-Handling in der Praxis

Die Turbo-Theorie mit einen, zwei, drei oder vier sauber ausgelasteten Kernen hört sich plausibel an. In der Praxis gestaltet sich die nach Kernen abgestufte Auslastung allerdings schwierig. Denn die Betriebssysteme weisen einen Thread nicht einem bestimmten Kern dediziert zu. Oft wird ein Single-Thread wechselweise von allen vorhandenen Kernen abgearbeitet.

Noch komplexer wird es, wenn beim Core i7 Hyper-Threading aktiviert ist. Nur ein Kern des Quad-Core-Prozessors arbeitet also selbst bei einer Dual-Thread-Anwendung unter voller Last. Die übrigen drei Kerne „schlafen“ – theoretisch. Die Betriebssysteme weisen eine Anwendung, die zwei Threads nutzt, nicht dediziert einem physikalischen Kern zu. Dieser physikalische Kern könnte durch Hyper-Threading den Dual-Thread alleine abarbeiten. Allerdings wäre dies auch langsamer als die Aufteilung auf zwei „echte“ Kerne. In der Praxis wird ein Dual-Thread also im Wechsel von verschiedenen physikalischen Kernen abgearbeitet.

Dieses vom Betriebssystem verursachte Thread-Switching kann je nach Anwendung ein paar Prozent Performance kosten. Zwar gibt es beim Taskmanager von Windows Vista die Möglichkeit, Prozessen über „Set Affinity“ eine bestimmte Anzahl von Kernen zuzuweisen. Automatisch sind jedem Prozess, egal ob single- oder multithreaded, alle verfügbaren Kerne zugeordnet. Entsprechend kann Windows die einzelnen Prozesse jedem Kern zuweisen. Um das Thread-Switching einer Single-Thread-Anwendung zu verhindern, lässt sich manuell nur eine CPU zuordnen.

Processor Affinity: Im Taskmanager von Windows lassen sich jedem Prozess (per Rechtsklick) die ausführenden CPUs zuordnen.
Processor Affinity: Im Taskmanager von Windows lassen sich jedem Prozess (per Rechtsklick) die ausführenden CPUs zuordnen.

Wird beim Core i7 allerdings ein Single-Thread wie Rendering mit Set Affinity beispielsweise “CPU0” zugewiesen, so sinkt die Performance um bis zu drei Prozent. Liefe allein der Rendering-Thread auf CPU0, würde die Rechengeschwindigkeit steigen. Jedoch lässt Windows trotz Bindung des Rendering-Threads an CPU0 alle anderen Dienste weiterhin wechselweise auf allen CPUs laufen – auch auf CPU0. Durch diese Unterbrechungen des Rendering-Threads sinkt die Performance stärker, als wenn Windows den Thread zu den Kernen wechselt, wo gerade weniger Dienste aktiv sind.

„Set Affinity“ erwirkt aber bis zu zehn Prozent mehr Performance, wenn der Prozessor von verschiedenen Threads voll ausgelastet wird. Arbeiten beispielsweise auf einem Quad-Core-Prozessor (CPU0 bis CPU3) vier unabhängige Threads jeweils unter voller Last, so ermöglicht die Thread-Zuweisung diesen Geschwindigkeitsschub.

Ist beim Core i7 ein Single-Thread einem Kern zugewiesen, so arbeitet dieser mit zwei „Speed Bins“ höher. Allerdings selbst ohne „Set Affinity“ – der Thread wechselt zwischen den Kernen – funktioniert der Turbo Mode. Der Core, auf dem der Single-Thread gerade arbeitet, übertaktet um zwei Speed Bins. Wechselt der Thread auf einen anderen Kern, so wird hier der Turbo Mode aktiv. Voraussetzung ist, dass keine weiteren Threads mit höherer CPU-Auslastung aktiv sind. Ansonsten würde der Single-Thread nur mit einem Speed Bin höher abgearbeitet werden.