Hyper-Threading: Optimierungen und Fallen

Pingpong Resümee

Das gezeigte Beispiel stellt einen Härtefall für die Thread-Kommunikation dar: Die Nutzlast, das Inkrementieren einer Variablen, ist im Vergleich zum Aufwand für die Synchronisation gering. Zudem wird nur die Extremsituation betrachtet, dass zwei Threads sich gegenseitig den Ball zuwerfen müssen und nie gleichzeitig arbeiten dürfen. In der Praxis sind die Auswirkungen daher normalerweise geringer, aber in ähnlicher Form dennoch vorhanden.

Loops/s mit und ohne Hyper-Threading

Ohne Hyper-Threading

Mit Hyper-Threading

Gemessen mit Pentium 4 3,06 GHz unter Windows XP

Leere Warteschleife

11

8.557.000

Mit Sleep(0)

1.253.000

2.392.000

Mit Pause-Instruction

11

51.058.000

Auf einer Single-CPU-Maschine muss immer das Betriebssystem mit einem Sleep bemüht werden, wenn Threads sich schnell abwechseln müssen. Bemerkenswerterweise ist dieser Weg - zumindest bei geringen Workloads - die schlechteste Wahl für Hyper-Threading-Systeme.

Am besten ist es, derart geringe Workloads zu vermeiden und den Threads genügend Arbeit für einige zig Mikrosekunden mitzugeben. Ist dies möglich, spielt der Overhead zur Synchronisation keine Rolle mehr.