Hyper-Threading: Optimierungen und Fallen

30 Prozent Fehler

Im folgenden Beispiel soll eine simple globale Integervariable iLoops als Schleifenzähler von mehreren Threads aus verändert werden. Zudem inkrementiert die Testschleife noch einen für jeden Thread individuellen Integer iLoopThread[ ] mit einer individuellen Thread-Nummer als Index. In der Theorie sollte iLoops und die Summe aller individuellen Zähler gleich sein.

Lassen wir mit diesem Programm einen Pentium 4 ohne Hyper-Threading laufen, scheint zunächst alles in Ordnung. Mit zwei Threads ist die Summe der individuellen Zähler gleich der Gesamtanzahl. Mit aktiviertem Hyper-Threading zählt iLoops jedoch in einer Sekunde bis 30 Millionen, die Summe der beiden iLoopThread[ ] ergibt 48 Millionen. Unser Testprogramm verzählt sich also in rund 30 Prozent der Fälle.