Allgemeine Prozessor-Grundlagen
Um das Prinzip des Pentium 4 mit seiner sehr langen 20-stufigen Pipeline zu begreifen, muß man erst einmal begreifen, was die CPU eigentlich genau tut, fordert ihr man irgendeine Arbeit ab:
|
1. Prefecht: Hol Dir die nächste Instruktion aus dem Cache oder aus dem Speicher.
2. Decode1: Übersetze diese Instruktion. Hierzu muß erwähnt werden, daß heutige Prozessoren keine x86-Befehle mehr direkt kennen, sondern diese meist recht komplexen Befehle in viele kleinere und damit leichter auszuführende Instruktionen übersetzen. Intel nennt diese Prozessor-internen Instruktion MicroOPs, AMD nennt sie MakroOPs, wobei jeder Hersteller hier seinen eigenen differierenden Instruktionssatz verwendet. Die Software braucht dies nicht zu kümmern - sie arbeitet weiterhin mit x86-Befehlen und ist somit zu allen x86-Prozessoren kompatibel.
3. Decode2: Lade Dir die für die Operation zusätzlich noch benötigten Daten (Operanden). Dieser Schritt wird im übrigen in Schemabildern oder Erklärungen gern der Einfachheit halber dem vorherigen Schritt zugeordnet.
4. Execute (Exec): Führe diese Instruktion entweder in der ALU-Einheit (übliche Windows-Aufgaben), der FPU-Einheit (Berechnungs-Aufgaben) oder in der MMX/SSE/SSE2/3DNow!-Einheit (Berechnungs-Aufgaben unter Verwendung spezieller Befehlssätze) aus.
5. Writeback (Wrtbck): Schreibe das Ergebnis in Cache oder Speicher bzw. verwende es je nach Bestimmung weiter.
Danach fängt der Prozessor mit dem ganzen wieder von vorn an.
| |
Der entscheidende Nachteil dieser Architektur begründet sich auf dem Faktor Zeit: Dies alles läuft nicht während eines Taktes der CPU ab. Eventuell werden sogar teilweise für einen Teilschritt mehrere Takte benötigt, in jedem Fall aber mindestens ein Takt. Das bedeutet aber, daß die anderen Einheiten während dieser Zeit brachliegen. Besonders der Performance abträglich ist natürlich, wenn die eigentlichen Recheneinheiten brachliegen.
Die rettende Idee ist hier die Pipeline, erstmal eingeführt mit dem 80486 anno 1989. Dieser Chip hatte eine fünf-stufige Pipeline, wie im übrigen auch der nachfolgende Pentium. Sehen wir uns an, was mit der Pipeline nun anders geworden ist:

Der entscheidende Unterschied ist, daß bei der CPU mit Pipeline die Einheiten eben nicht beschäftigungslos warten, bis ein Befehl wie bei der CPU ohne Pipeline komplett abgearbeitet ist, sondern einfach schon mit dem nächsten Befehl anfangen. In obigen Beispiel hat die CPU ohne Pipeline nach 5 Takten insgesamt 5 Arbeitsschritte bewältigt, die CPU mit Pipeline aber schon deren 15! Dies würde in diesem sehr idealen Beispiel eine Verdreifachung der Leistung bedeuten.
Leider wirft das Pipeline-Prinzip aber auch neue, hausgemachte Probleme auf. Denn der Vorteil, schon vor der Fertigstellung des ersten Befehls mit der Verarbeitung des zweiten Befehls beginnen zu können, ist auch gleichzeitig der größte Nachteil: Denn falls der zweite Befehl in irgendeiner Form vom Endergebnis des ersten Befehls abhängt, stockt die komplette Pipeline. Im dümmsten Fall muss dann die komplette Pipeline geleert werden, als bisherigen Teilergebnisse gelöscht werden und der zweite Befehl auf Grundlage des Ergebnisses des ersten Befehls nochmals neu berechnet werden.
Und dies ist eigentlich auch daß, womit sich die Prozessoren-Designer aktuell hauptsächlichst beschäftigen: Der Verhinderung, Einschränkung und Minderung dieses Fehlers, welcher der Pipeline viel von ihrer Schlagkraft nimmt. Letztlich ist in der Theorie eine immer mit Aufgaben gefüllte Pipeline eine mächtige Rechenmaschine. Kommt es aber zu dem vorbeschriebenen Problem, daß Berechnungen wiederholt werden müssen, verbringt die CPU sehr viel (zu viel) Zeit damit, die Pipeline zu leeren und wieder neu zu füllen. Auf modernen CPUs sind ganze Teile des Chipdesigns nur dazu da, um solche "Fehler in der Pipeline" zu verhindern.
Ich will dies aber nicht weiter ausführen, weil dies einfach zu komplex wird und man dann kaum noch ohne drei Worte Fach-Chinesisch pro Satz auskommt, was aber in diesem Artikel vermieden werden soll. Wir begnügen uns mit der Feststellung, daß moderne CPUs stark vom Pipeline-Verfahren profitieren. Und das dies ganz eigene Problem aufwirft, da die "Pipeline immer gefüllt sein muß, um effektiv zu sein".