Hyper-Threading: Optimierungen und Fallen

An Thread-optimierten Programmen führt in Zukunft kein Weg mehr vorbei. Doch selbst wer diese Kunst bereits beherrscht und einsetzt, muss für Intels Hyper-Threading kräftig umdenken.

Noch vor zehn Jahren mussten sich PC-Programmierer mit zahlreichen Prozessordetails herumschlagen: Die Größe von Pointern, Integer-Variablen und die Speicherung von Variablen (big endian, little endian) variierte von Plattform zu Plattform. Ohne dieses Wissen ließ sich kein vernünftiges Programm schreiben.

Objektorientierte Programmiersprachen bewahren den Software-Entwickler heutzutage meist vor derlei Unbill. Doch mit Intels Hyper-Threading kommt eine neue Herausforderung auf die Entwickler zu. Künftige Programme werden vermehrt multithreaded sein und ihre Arbeit in echt parallel ablaufende Blöcke unterteilen. Nur so lässt sich die "zweite" CPU in einem Hyper-Threading-Prozessor sinnvoll beschäftigen und der Programmablauf beschleunigen.

Doch egal ob Java, C++ oder C#, ohne ein gewisses Verständnis für das simulierte Multiprocessing der neuen Intel-CPUs läuft man schnell in einige Fallen. Durch eine ungeschickte Synchronisation der Threads untereinander kann die Software instabil oder unnötig langsam laufen. Was bei einer normalen CPU noch unkritisch ist, wird bei Intels Hyper-Threader plötzlich zur gemeinen Falle. Selbst die Platzierung der Variablen im Speicher wird plötzlich wieder zum Thema, über das es sich nachzudenken lohnt.

Im Folgenden finden Sie einige grundsätzliche Programmiertechniken für Multi- und Hyper-Threading. Mehr zur Prozessortechnologie lesen Sie in unserem Beitrag Hyper-Threading im Detail. Wie viel Mehrleistung Hyperthreading in aktuellen Anwendungen bringt, erfahren Sie im Test Pentium 4 Hyper-Threading Benchmarks.