Fenster schliessen
 | RSSImpressum | Login logo
logo



Großer Erfolg für Apple: IBM bringt neuen Compiler


28.08.2003   Was ist ein Compiler? Ein Compiler übersetzt den Code, den ein Programmierer geschrieben hat, in eine besondere Sprache, die der Prozessor verstehen kann. Jedes Programm muss compiliert werden, bevor es der Computer ausführen kann.

Der Sinn dieser Aktion ist, dass ein Programmierer befreit wird von technischen Feinheiten des Prozessors. Der Programmierer sagt zum Beispiel: "Berechne die Wurzel aus 25!". Der Prozessor kann aber vermutlich gar keine Wurzel ziehen, sondern erledigt das durch eine Vielzahl sehr simpler Vorgänge. Dieses Zerlegen von komplexen Anweisungen in viele sehr simple Instruktionen macht der Compiler.

Wer es bis hierhin verstanden hat, ist etwa auf dem Stand der 70er-Jahre, und das war eine schöne Zeit. Aber heute ist die Welt komplizierter. Beispielsweise kann ein Prozessor mehrere Befehle gleichzeitig ausführen. Und hier liegt der Hase im Pfeffer.

Der PPC 970 kann sehr viele Befehle gleichzeitig verarbeiten, das ist einer seiner Vorzüge gegenüber dem G4 und den Pentiums. Aber damit das klappt, muss man sehr geschickt vorgehen.

Der PPC 970 hat ungefähr 250 Einheiten (was auch immer), die gleichzeitig etwas tun können (egal was). Stellen wir uns das mal vor wie eine ganz lange Theke bei MacDonalds mit 250 Kassierern. Es liegt auf der Hand, dass das Geschäft am besten läuft, wenn die 250 Kassierer ohne Pause arbeiten können. Damit sie das können, muss man den Laden sehr gut organisieren. Die richtigen Produkte müssen zur richtigen Zeit zur Verfügung stehen. Die Kunden müssen sinnvoll auf die 250 Kassen verteilt werden und zur richtigen Zeit den Geldbeutel zücken, damit keine Wartezeiten entstehen.

Wenn man versuchen wollte, diesen Laden zum Spaß so zu organisieren, dass den Kassierern den ganzen Tag lang keine Sekunde Pause bleibt, dann muss man die Abläufe sehr schlau planen. Vor allem dann, wenn selten verlangte Produkte bestellt werden, die nicht sofort verfügbar sind. Was dann? Man kann ja nicht die ganze Warteschlange Nr. 184 so lange warten lassen, bis die verdammte Apfeltasche endlich warm ist.

Bei einem Prozessor ist das nochmal komplizierter, weil die Einheit Nummer 231 vielleicht auf ein Ergebnis von Nummer 34 angewiesen ist, und das ist schlecht. Nummer 231 sollte erst dann loslegen, wenn das Ergebnis von Nummer 34 schon da ist und solange etwas anderes tun, anstatt darauf zu warten. Nur was?

Um eine hochparallele Rechenmaschine tatsächlich auszulasten, muss man die Berechnungen geschickt organisieren und dafür sorgen, dass zum Beispiel der Speicher schon mal alles in den Prozessor schickt, was kurze Zeit später von Einheit 231 benötigt wird, damit diese nicht erst darauf warten muss. Man sollte also das ganze Wirrwarr noch vorausberechnen können. (Man packt die verdammte Apfeltasche also schon mal in den Ofen, obwohl der entsprechende Kunde erst in drei Minuten an die Reihe kommt. Hellsehen hilft. Tatsächlich beherrschen Prozessoren eine Art "Vorhersage".)

Hier wird ersichtlich, welchen Preis man dafür bezahlen muss, wenn man anstelle von roher Taktfrequenz auf intelligente Architekturen setzt. Und vielleicht ist es dadurch auch verständlich, warum man einen solchen Chip nur sehr bedingt bei einem Benchmark in einen Topf mit "normalen" Prozessoren werfen kann, wenn der Benchmark nicht die Parallelität des Prozessors nutzt. Das nur nebenbei.

Dieses ganze Wirrwarr muss nicht der Programmierer erledigen. Sondern der Compiler nimmt es ihm ab. Der Compiler versucht, die Befehle und Daten so zu zerstückeln und zu organisieren, dass am Schluss ein Programm herauskommt, welches den Prozessor tatsächlich auslasten kann.

Die Frage ist nun, wie gut der Compiler das schafft. Wenn der Compiler stark optimiert ist für diesen Prozessor, dann ist das viel besser, als wenn er einen Code ausspuckt, der gar nicht auf die Bedürfnisse (oder Chancen) des Prozessors eingeht. Theoretisch könnte der Compiler ja auch einfach auf die Parallelität der Prozesse verzichten und alles nacheinander abarbeiten.

Apples bisheriger Compiler, der "gcc 3.3" ist ein Open-Source-Compiler, der zwar sehr verbreitet ist, der jedoch nicht optimal auf den PPC 970 maßgeschneidert wurde. Er kann die Kraft des PPC 970 also nicht richtig ausnützen.

Das ist der Grund, warum alle Welt aufgeregt ist, dass IBM nun seinen sehr guten Compiler auch für den PPC 970 anbietet. Es liegt nahe, dass der Hersteller des Chips auch den besten Compiler dafür schreiben kann. Zusätzlich hat IBM schon sehr viel Erfahrung in den Compiler investiert, da der PPC 970 ja ein Erbe des Power4 ist. Der Compiler ist also schon recht ausgereift.

Was bedeutet das nun in der Praxis? Es bedeutet, dass ein Programmierer sein Programm einfach nochmal durch den Compiler von IBM jagt, und schon ist sein Programm schneller geworden. Naja, das ist alles etwas vereinfacht, aber ungefähr stimmt es. Tatsache ist jedenfalls, dass das gleiche Programm schneller werden kann, einfach indem es neu compiliert wird. Fachleute tauschen schon die ersten Vermutungen darüber aus, wie stark die Beschleunigung ausfallen wird, und welche Berechnungen sie betrifft. Etwa 20 bis 30 Prozent dürften nochmal dabei herausspringen, vor allem bei Fliesskommaberechnungen (und da hatte der Dual 2 GHz sowieso schon 40% Vorsprung vor dem schnellsten Dualprozessor-PC, jedenfalls laut Apple). Es ist nicht auszuschließen, dass die Zahlen mit der Zeit noch besser werden. 30% sind bei 2x 2 GHz also theoretisch so viel wie 2x 600 MHz = 1,2 GHz zusätzlich!

Ebenfalls einen sehr gut optimierten Compiler hat Intel für seine Prozessoren im Angebot. Hier liegt eine Ursache für einige beachtlich schnelle Programme in der PC-Welt. Intel hat aber auch im Vergleich mit IBM die Nase vorn. Warum? Weil deren Compiler die sog. "Autovektorisierung" beherrscht. Darunter kann man sich vorstellen, dass der Compiler eine Berechnung automatisch so verwurstet, dass sie von AltiVec durchgeführt werden kann (bei PCs heisst das Ding SSE2). Das ist ein großer Vorteil. Anstatt darauf zu warten, dass die Entwickler sich damit befassen und die Programme auf SSE2 optimieren, hat Intel es geschafft, dass der Compiler es bis zu einem gewissen Grad automatisch hinbekommt.

Es ist aber zu erwarten, dass auch der Mac irgendwann mit solchen Compilern gesegnet wird. Wenn man bedenkt, welchen enormen Geschwindigkeitszuwachs die AltiVec-Einheit bringt, sind das gute Aussichten.