Bereits Anfang des Jahres hat Intel die Xeon-Prozessoren für Server mit der Hyper-Threading-Technik ins Rennen geschickt. Mit dem neuen Pentium-4-Modell soll diese Technik jetzt auch den Massenmarkt erobern. Beim Hyper-Threading fährt im Prozessor quasi ein zweiter Fahrer mit, doch wie beim Tandem hängt das Vorwärtskommen davon ab, ob dieser auch fleißig mit in die Pedalen tritt, sich faul ziehen lässt oder sogar bremst.
2 · 32 ist auch 64 - mit dieser Milchmädchenrechnung wollte Intel zum Weihnachtsgeschäft den zu diesem Zeitpunkt eigentlich erwarteten 64-Bit-Prozessoren von AMD etwas Zugkräftiges entgegensetzen. Und so ersannen Intels Marketing-Strategen das schöne und kaum noch steigerungsfähige Schlagwort ‘Hyper-Threading’ (HT) für ein Verfahren, mit dem der Prozessorhersteller schon lange geheimniskrämerisch unter dem Codenamen ‘Jackson Technology’ herumexperimentiert hat und welches allgemein unter ‘Simultaneous Multithreading’ (SMT) bekannt ist.
Bei SMT arbeiten mehrere logische Prozessoren in einem Chip, bei Intels Hyper-Threading sind es derzeit derer zwei. Beide rechnen weitgehend unabhängig voneinander, was helfen kann, den Durchsatz zu steigern. Dazu packt Intel nicht etwa zwei komplette Prozessor-Cores auf den Silizium-Chip (das ‘Die’), sondern spendiert nur einen zusätzlichen Registersatz sowie einen eigenen Interrupt-Controller (APIC) und einige interne Verwaltungsstrukturen. Sowohl die Anzahl der Rechenwerke als auch Zahl und Größe der Caches bleiben gleich, beide logische Prozessoren nutzen diese gemeinsam. Dadurch ist es kein ‘echtes’ Zwei-Prozessor-System, sondern nur ein virtuelles aus Sicht von Software und Betriebssystem. Diese Erweiterung benötigt nicht einmal mehr als ein Prozent an zusätzlichen Transistoren und erhöht die Die-Fläche lediglich um fünf Prozent. Interessanterweise hat die Konkurrenz bei AMD nach eigenen Angaben den gleichen Anteil der Die-Fläche in die 64-Bit-Architekturerweiterung investiert, ebenfalls in der Hoffnung auf höhere Performance.
Für den Chiphersteller ist es sehr vorteilhaft, dass der Mehraufwand so gering ausfällt, denn dadurch erhöhen sich die Produktionskosten praktisch nicht. Auch wenn die ersten Prozessoren üblicherweise recht teuer vermarktet werden, ist doch langfristig abzusehen, dass Hyper-Threading keinen Aufpreis bedeutet. Bei Performance-Vorteilen, die Intel mit bis zu 35 Prozent angibt, ein willkommenes Geschenk an die Anwender.
Bislang versuchten die Prozessorbauer, die Anwender mit möglichst hohen Gigahertz-Zahlen zu ködern. Vor allem Intel hat das mit dem Pentium 4 erfolgreich vorexerziert und jetzt mit 3 GHz Takt einen neuen Rekord vorgelegt. Allerdings werden höhere Frequenzen zunehmend schwieriger. Ein Taktzyklus dauert jetzt nur noch 0,33 Nanosekunden - in dieser kurzen Zeit schafft selbst das Licht im Vakuum gerade mal 10 Zentimeter und die Wellen in Leitungen, die noch etwas langsamer sind, pflanzen sich vielleicht 6 Zentimeter fort.
Gefragt sind also intelligentere Verfahren statt Gigahertz-Brute-Force und offenbar liegt der Schlüssel zur Performance in der Parallelverarbeitung. Diesen Trend verfolgt Intel nicht erst seit Neuestem, sondern schon seit der Einführung des Pentium vor circa zehn Jahren. Der Pentium konnte im Gegensatz zum betagten 486 ‘superskalar’ arbeiten, was bedeutet, dass er mehrere Instruktionen pro Takt gleichzeitig ausführen kann. Das alleine nützt allerdings noch nicht viel, denn meist ist der Programmcode so strukturiert, dass sich aufeinander folgende Instruktionen - bedingt durch Abhängigkeiten der Befehle und Daten - nicht parallel ausführen lassen. Daher waren auch die beiden Pipelines des Pentium nur selten ausgelastet.
Sein Nachfolger Pentium Pro brachte Abhilfe durch ‘Out-of-Order-Execution’ (OOO), bei der der Prozessor Instruktionen nicht zwingend in der Reihenfolge ausführt, in der sie im Programmcode stehen, sondern nach Bedarf so umordnet, dass sich möglichst viel Parallelität nutzen lässt. Man spricht dabei von ‘Instruction Level Parallelism’ (ILP). Aber auch das ist begrenzt. Studien haben gezeigt, dass sich in üblichem Code maximal 2,5 bis drei Instruktionen pro Takt zur gleichzeitigen Ausführung finden lassen. Und schon dafür sind etliche Tricks nötig, etwa so genanntes Register-Renaming oder spekulative Ausführungen von Befehlen. Diese führen aber zu sehr komplexen Systemen, die sich nur mit enorm viel Aufwand validieren lassen. Die Fehlerlisten moderner Prozessoren sprechen Bände davon.
Um diesem Dilemma zu entkommen, bietet es sich an, die verzweifelte Suche nach Parallelität nicht dem Prozessor zu überlassen, sondern schon im Vorfeld dem Compiler oder dem Programmierer aufzubürden. Bei IA-64 (Itanium) beispielsweise versucht der Compiler, möglichst viele unabhängige Sequenzen zu entdecken und diese dem Prozessor in Bündeln zu übergeben (EPIC: Explicit Parallel Instruction Computing).
Zusätzlich kann man die Software in weit größerem Maßstab in logisch voneinander unabhängige Teile zerlegen, die als Threads gleichzeitig ablaufen können. Im Gegensatz zu ILP spricht man hier von ‘Thread Level Parallelism’ (TLP). Obwohl das Verwalten mehrerer Threads (Multithreading) für heutige Betriebssysteme keine Herausforderung mehr darstellt, bleibt der erhoffte Geschwindigkeitsvorteil allerdings aus, wenn mehrere Threads um die Ausführung auf nur einem Prozessor konkurrieren. Das ändert sich, wenn man zu Mehrprozessorsystemen mit ‘Symmetrischem Multi-Processing’ (SMP) übergeht. Doch dafür sind spezielle, teure SMP-Boards nötig und nicht zuletzt fallen zusätzliche Kosten für mehrere SMP-taugliche (und daher meist viel teurere) Prozessoren an.
Man könnte annehmen, mit einem SMP-System das Optimum erreicht zu haben. Allerdings zeigt sich in der Praxis, dass diese Rechner oft nur zu einem verschwindend geringen Teil ausgelastet sind, sodass das Preis/Performance-Verhältnis sehr ungünstig ausfällt. Um die wirkliche Auslastung der Prozessoren feststellen zu können, reicht es keinesfalls aus, auf den Windows Task-Manager zu schauen. Die meiste Zeit verplempern nämlich die Prozessoren mit Warten, Warten, Warten - zumeist auf den Hauptspeicher. Der Task-Manager bewertet diese unendlichen Wartezeiten aber auch als Arbeit. Für ihn ist der Prozessor nur dann ‘idle’, wenn der ganze Thread gerade auf Eis liegt.
Um die echte interne Auslas-tung eines Pentium-4- bzw. Xeon-Prozessors festzustellen, muss man schon tiefer in seine Innereien hineinschauen. Hierzu haben wir das Utility ‘PerfWatch’ (siehe Softlink) entwickelt, das die Performance-Zähler des Prozessors benutzt.
Die Messungen mit PerfWatch werfen ein trauriges Bild auf die tatsächliche interne Prozessorauslastung. Denn selbst der rechenintensive SPEC2000-Benchmark langweilt einen Prozessorkern über weite Strecken, ganz zu schweigen von einem möglicherweise vorhandenen zweiten, der bei diesem Benchmark vollkommen ungenutzt bleibt. Da hilft es auch nicht, hoch optimierende Intel-Compiler einzusetzen, auch damit steigt die interne Last über den gesamten Verlauf der Suite selten über 30 Prozent, mehr als 60 Prozent werden nie erreicht. Bei höherem Takt wartet der Prozessor einfach nur schneller.
Damit wird klar, dass es nicht reicht, auf die Fähigkeiten des Prozessors zu vertrauen, die Arbeit zu parallelisieren, sondern dass man das brachliegende Potenzial auf andere Art nutzen muss, wenn man die interne Auslastung des Prozessors verbessern will. Und genau dazu sind mehrere Threads in Form des feinkörnigen Multithreading nützlich, bei denen die Threads nicht um ganze Prozessoren, sondern um die vorhandenen Rechenwerke innerhalb eines Prozessors konkurrieren. Dieses Konkurrenzverhalten bei SMT wird allerdings auch immer wieder als Gegenargument ins Feld geführt, da es ja nicht viel nützt, wenn sich die zwei Threads mehr behindern als nützliche Arbeit verrichten. Das tritt beispielsweise auf, wenn bereits ein Thread so gut programmiert ist, dass er die Einheiten stark auslastet und er dank geschicktem Cache-Management und Prefetches kaum Speicherwartezeiten erleidet. Richtig hoch optimierter Code lässt also wenig Raum für Lückenfüller wie Hyper-Threading.
Den kompletten Artikel finden Sie in der aktuellen Printausgabe.
[1] VTune, kostenloser Download der 30-Tage-Version
[2] Intel Technology Journal zum Thema HyperThreading
[3] Intel Pentium 4 and Intel Xeon Processor Optimization Reference Manual
[4] Andreas Stiller, Gipfelstürmer, c't 6/02, S. 224
Version zum Drucken | Per E-Mail versenden | Heft bestellen
Permalink: http://heise.de/-288572
Kommentare lesen (40 Beiträge)
Das aktuelle Heft ist jetzt im Handel erhältlich.
Ältere Artikel können Sie über unser Zeitschriften-Archiv bestellen.