Home Computer x86 Prozessoren Site Map counter

Der Intel Pentium Pro Prozessor

In einer lockeren Reihe will ich die Hardwareentwicklung der x86 Reihe beleuchten. Heute geht es um den Pentium Pro, den vierten 32-Bit Prozessor von Intel. Er zeichnete sich durch umfangreiche interne Veränderungen aus. Der Name weicht vom späteren Namensschema ab, da der Nachfolger Pentium II hieß. Pentium Pro klingt zuerst einmal nach "verbessertem Pentium". In der Tat sollte der Prozessor auch den Pentium ablösen. Es kam schließlich anders und der Nachfolger des Pentium wurde der Pentium II. Danach interpretierte man das "Pro" als Abkürzung für Professional, da der Prozessor seine volle Leistung nur in besser ausgestatten Computern wie Workstations oder sogar Supercomputern ausspielen konnte. Das lag weniger am Pentium Pro als vielmehr an der Architektur von Windows, dem Standardbetriebssystem auf PCs.

Aufbau

BlockdiagrammWährend die Pentium CPU nach außen hin keine revolutionäre Änderungen aufwies, gab arbeitete Intel an einem neuen Design für den Pentium Pro.

Intel hatte mit dem 80486 das Ende der klassischen x86 Architektur erreicht. Sie war eine CISC-Architektur. Sie basierte auf komplexen Befehlen und byteweisem Zugriff auf dem Speicher. Von Generation zu Generation hatte Intel die Ausführung der Befehle beschleunigt, sodass beim 486 etwa 80% der Befehle in einem Taktzyklus ausgeführt werden konnten. Diese weiter zu beschleunigen war schwierig.

Der Pentium hatte mehr Geschwindigkeit erreicht indem er superskalar war, dazu musste der Code aber neu geschrieben werden, damit er beide Rechenwerke auslastete. Beim Pentium Pro ging man einen anderen Weg, der versprach mehrere Rechenwerke besser auszulasten.

 Dagegen entstanden Mitte der Achtziger Jahre neue Mikroprozessoren die auf der RISC Architektur basierten - weniger Befehle, die aber schneller ausführbar waren. Zu diesen gehörten der SPRAC Prozessor, die MIPS Familie, der Power PC und der Alpha Chip von DEC. Sie waren jenseits des PC Marktes sehr erfolgreich, bei Workstations, Spielkonsolen und MIPS Rechner berechneten damals die ersten computeranimierten Spielfilme. RISC war das Buzzwort der Computerindustrie in der zweiten Hälfte der Achtziger. Intel brachte den Spagat hin einen internen Aufbau des Prozessors als RISC Prozessor mit der Verarbeitung des CISC Befehlssatzes der IA32 Architektur zu verheiraten. Dazu wurden die x86 Befehle bei der Dekodierung in einfachere RISC-Befehle, sogenannte Mikroops, übersetzt und diese dann von RISC Funktionseinheiten ausgeführt.

RISC (Reduced Instruction Set Computer) war der wichtigste Hardwaretrend der Achtziger. Wenn ein Prozessor auf Befehle verzichtet, so kann er die verbliebenen schneller ausführen und schneller dekodieren. So brauchte der zeitgleich mit dem Pentium erschienene PowerPC 601 Prozessor einen Takt zum Dekodieren, der Pentium zwei. So kann ein Prozessor, obwohl er weniger Transistoren braucht (und damit günstiger zu fertigen ist) schneller arbeiten. Praktisch alle neu erschienen Prozessoren, die ab Mitte der Achtziger Jahre auf dem Markt erschienen, waren RISC Prozessoren. Die x86 Architektur war dagegen ein typischer Beispiel für CISC (Complex Instruction Set Computer - die vorherrschende Architektur der sechziger und siebziger Jahre). Die Befehle waren unterschiedlich lang, was das Dekodieren erschwerte, sie war byteorientiert (kleinster Datentype war das Byte, dazu gab es noch 16 Bit Halbworte) obwohl der Prozessor mit 32 Bit arbeitete, es gab Spezialbefehle wie die Stringanweisungen und nur wenige Register, bei früheren Versionen des 80x86, auch mit Spezialfunktionen.

Mit der Einführung einer RISC Architektur konnte Intel die Vorteile von RISC mit dem alten Befehlssatz verheiraten und so die Leistung weiter steigern. Der Nachteil war nur, dass der Prozessor extrem viele Transistoren brauchte, verglichen mit anderen Exemplaren zur gleichen Zeit.

Die neue, interne RISC Architektur war eine Entscheidung für die Zukunft, denn seitdem sind alle Nachfolgeexemplare interne RISC Prozessoren, auch wenn der CISC Befehlssatz erhalten blieb, Beim Pentium gab es während der ersten Jahre aber zuerst Mal nur geringe Verkaufszahlen. Alle früheren Generationen steigerten die Geschwindigkeit. Zum einen durch Erhöhung der Taktfrequenz, zum anderen durch interne Verbesserungen.

Architektur

Diagramm 2Neu war der semiinterne Cache. Semiintern, weil Cache und Prozessor separat gefertigt werden, aber in der Endmontage in einem gemeinsamen Die untergebracht wurden. Der interne L1-Cache war wie beim Pentium zweigeteilt und jeweils 8 KByte für Daten- und Code groß. Er hatte eine Cacheline von 32 Byte. Der Datencache war zweifach assoziativ und mit einem 64 Bit Datenbus angebunden. Er hatte eine Hit-Under-Miss-Cache Architektur, das bedeutete, er konnte bei einem Cache-Miss nachfolgende Datenanforderungen bedienen, während er noch auf die Daten des ersten Zugriffs wartet. Der Code Cache war vierfach assoziativ und mit einem 128 Bit breiten Datenbus an den Decoder angebunden.

Neu war der L2-Cache von 256 KByte (spätere Versionen: 512 und 1024 KByte Größe). Auch er arbeitete mit einer Cacheline von 32 Byte, war vierfach assoziativ und bufferte Daten- und Codeabfragen ab. Er war mit einem 64 Bit breiten Datenbus angebunden und - das sollte die Geschwindigkeit steigern - man konnte in einem Takt auf ihn zugriefen. Üblicherweise sind die L2-Caches langsamer als die L1-Caches. Ebenfalls integriert war der Cachecontroller und APIC Advanced Programmable Interrupt Controller.

Der Adressbus wurde von 32 auf 36 Bit verbreitert (64 GByte Speicher adressierbar), allerdings nur 4 GByte linear, da die Register immer noch 32 Bit breit sind. Der Datenbus wurde auf 64 Bit verbreitert, damit die Caches schneller gefüllt werden konnten (eine Cacheline in 4 Takten anstatt 8).

Über die Arbeitsweise des RISC Kernes sind nur wenige Details bekannt. Der Fluss der Instruktionen soll vom Prozessor vorhergesagt werden, das betrifft vor allem Verzweigungen, bei denen da die Befehle vorrausschauend gelesen werden schon vor dem Sprung klar sein muss wohin dieser geht. Die Befehle werden dann in kleinere, elementarere Mikrooperationen (µops) zerlegt. 32 Bit Code erzeugt im Durchschnitt 1,5 µops/Instruktion, 16 Bit Code ist ineffizienter und erzeugt 2.0 µops/Befehl. Diese µops arbeiten dann mit eigenen Registern, dazu wird Register-Renaming benutzt. Das erlaubt es intern mit mehr als den wenigen Allzweckregistern der x86 Architektur zu arbeiten. Weiterhin werden die Befehle umgruppiert um möglichst alle Einheiten auszulasten. Diese Out-of-Order Execution ist eine Neuigkeit gegenüber dem Pentium der dies noch nicht konnte und auf vom Compiler optimierten Code angewiesen war. (In-Order Architektur). Die Mikroops sind immer gleich lang und systematischer Aufgebaut. Das erlaubt es leichter Abhängigkeiten zu erkennen und entkoppeln, d.h. parallel an verschiedene Einheiten verteilen "Out-of-Order" Architektur. Es gilt:

Einfache Register-Register Operationen brauchen 1 Mikroop, ebenso einfache arithmetische Befehle.

 

Um Daten für Sprungziele rechtzeitig bereitzuhalten hatte die Pentium Pro CPU einen Branch Target Buffer (BTB) von 512 Einträgen. Jeder Eintrag im BTB war verbunden mit einer Cacheline, die die ersten 32 Bytes dieser Adresse aufnahm. Schon der Pentium hatte einen solchen BTB, jedoch nur mit 256 Elementen, der nicht mit dem Cache direkt gekoppelt war. Er hatte eine History von 4 Bit (Pentium 2 Bit) - da man meist die Bedingung für einen Sprung erst eine Instruktion vor dieser bildete war die einfachste Möglichkeit der Vorhersage sich zu merken wo man beim letzten Mal sprang als man an diese Adresse kam. Mit 4 Bit konnte man sich die letzten 16 Sprünge merken und bei 2 Bit nur die letzten 4. Da in einer Schleife diese oft wiederholt wird und nur beim letzten Durchgang nicht mehr verzweigt wird ist so ein Merken der letzten Sprünge eine smarte Lösung. Bei der SPEC95 Suite wurden so 90% der Sprünge richtig vorhergesagt.

diagramm 3Drei Instruction Decoders (ID) konvertieren x86 Instruktionen in µops. Bei weniger als 4 µops/Anweisung geht das in einem Taktzyklus, mehr als 4 µops werden in einem Microsequencer abgelegt. Die Quell- und Zielregister von bis zu 3 Mikroops werden pro Taktzyklus umbenannt. Dazu gibt es 40 interne Register in der Register-Tabelle und 20 Reservierungsbuffer und 40 Ergebnisbuffer. Dabei werden die Mikrooperationen unabhängig von ihrer Reihenfolge im Quellcode ausgeführt. damit sie nicht auf falsche Ergebnisse zugreifen hat jede Mikrooperation einen Zeitstempel der ihre Reihenfolge im Strom kennzeichnet. Bis zu 3 µops werden so pro Taktzyklus ausgeführt.

Die Pipeline ist 14 Stufen lang, 8 sind der in-order Teil, also der der sequenziell ausgeführt wird. drei Stufen entfielen auf den out-of-order Teil und drei Stufen auf das Ergebnis abzulegen und die Reservierungen aufheben / Mikroops entfernen.

Aufgrund dieser komplexen Architektur war es erstmals so, dass man nicht mehr angeben konnte: "Befehl x braucht x Taktzyklen". Die meisten Ganzzahloperationen in Registern wurden in einem Takt durchgeführt. Der FADD Befehl hatte eine Latenz von 3 Takten und einen Throughput von 1 Takt. Sprich: Gab es mehrere FADD Befehle hintereinander im Code, so war der erste nach drei Takten fertig, die folgenden jedoch nach jeweils einem Takt. Bei der Multiplikation waren die Werte 5/2 (Fließkomma) bzw. 4/1 (Ganzzahlen). Die Division war nicht gepipelinet und brauchte 17 Takte für einfache und 32 für doppelte Genauigkeit. Ein Ladebefehl bei einem Cachemiss brauchte 3 Takte.

Der externe Takt lag wie beim Pentium bei 60 MHz. Bei der SPEC95 Suite von naturwissenschaftlichen und anderen Problemen war der Pentium Pro bei gleichem Takt 38% schneller bei Ganzzahloperationen und 49% bei Fließkommaoperationen. Das war die Folge einer um 15-45% reduzieren Ausführungszeit und der Möglichkeit drei anstatt zwei Befehle gleichzeitig durchzuführen. Das galt für 32 Bit Programme dieser Suite.

Es war auch möglich bis zu vier Pentium Pro Prozessor an einen gemeinsamen I/O Bus und Speicherbus zu hängen. Intern bestand er aus einer Fetch/Decode Einheit, einer Dispatch/Execute Einheit und einer Retire Einheit die gemeinsam einen Pool an µOps verwalteten. Um vor allem den Zeitverlusten bei einem Cache-Miss zu begegnen, schließlich stieg die Geschwindigkeit von RAM kaum noch an (als der Prozessor erschien lag es bei 60 ns, für einen verzögerungsfreien Zugriff wären aber 6,7 ns nötig) schaute der Prozessor 20-30 Instruktionen voraus. In diesem Fenster lagen 5 Sprünge die vorhergesagt werden mussten.

Die Ausführungseinheit hatte angeschlossen an die Reservierungsstation, die über die Ausnutzung der Einheiten wachte und Mikroops zuteilte wenn sie frei waren. Es gab vier Ports. An Port 0 hingen eine Fließkommaeinheit und eine Integereinheit, an Port 1 eine Integereinheit und eine Sprungeinheit, an Port 2 eine Adressgenerationseinheit mit einer Ladeeinheit und an Port 3 eine Adressgenerationseinheit mit einer Speichereinheit. Die Zahl der Einheiten war gegenüber dem Pentium gleich geblieben. Maximal 5 µOps konnten an die Einheiten verteilt werden, typisch waren jedoch 3. Die Zahl der Recheneinheiten (zwei Ganzzahl, eine Fließkommaeinheit) war nicht gegenüber dem Vorgänger Pentium geändert worden.

Geschichtliche Bedeutung

Pentium ProDie grundlegende und wichtigste Bedeutung des Pentium Pro, war das seine Architektur auch Basis für die beiden nächsten Generationen, den Pentium II und III stellte, also eine sehr lange Lebenszeit hatte. Die P6-Architektur wurde nach dem Zwischenspiel mit der Netburst-Architektur des Pentium 4 erneut in der Core Architektur eingesetzt und auf dieser basieren selbst die heutigen Chips. Allerdings verfügen diese heute über mehr Ausführungseinheiten, Kerne und interne Verbesserungen, doch der Grundaufbau der internen RISC Maschine blieb.

Das der Prozessor nicht so erfolgreich war wie seine Vorgänger und seine Nachfolger hatte zwei Gründe. Der erste lag in der Hardware. Die Wahl den Cache direkt mit dem Prozessor zu verbinden erweis sich nicht als so gut. Anders als die Vorgängergeneration konnte so der Takt nicht so stark gesteigert werden. Er stieg nur von 150 auf 200 MHz, dagegen stieg er beim Pentium von 60 auf 300 MHz. (Es gab später auch einen Pentium Pro Overdrive Prozessor, doch dieser war technisch ein Pentium II). Der Cache der weder richtig extern, noch richtig intern war, hatte eine Latenzzeit die zwischen beidem lag und damit war er schneller als ein externer Cache aber für den Preis, dass die eigentliche CPU nicht so hoch getaktet werden konnte. Eine schnellere CPU mit externem Cache, wie dies beim Pentium II der Fall war, war in der Performance stärker.

Anfangs begrenzten auch Defekte im Cache die Produktionsausbeute. Der große mit nur einem Takt Latenz angebundene Cache (beim L2-Cache des Pentium waren 3 Takte üblich) stellte einen großen Kostenfaktor dar. der Preis eines Pentium Pro Prozessors sank daher weit weniger im Laufe der Produktion als dies beim Pentium der Fall war.

Die Dekodierung und Konvertierung in Mikroops hatte aber einen Nachteil: Das gesamte Konzept war darauf ausgerichtet spekulativ Daten über den L2- und L1-Cache zu laden. Wenn ein Befehl die Werte für die Segmentregister neu setzte, waren alle Adressen die vorher gefetcht wurden ungültig, weil die physikalische Adresse aus dem Wert des Segmentregisters und dem Wert eines allgemeinen Registers gebildet wurde. In diesem Falle musste der Pentium Pro die Daten erneut aus dem Speicher in die Caches laden und pausierte solange. Das konnte 72 bis 2000 Taktzyklen dauern, eine halbe Ewigkeit bei einem Mikroprozessor der drei Anweisungen pro Taktzyklus ausführen konnte. Bei einem 32 Bit Betriebssystem werden die Segmentregister beim Start gesetzt und danach nicht mehr verändert. 16-Bit Code, also solcher wie er für den 86- und 286-Prozessor geschrieben wurde und DOS/Windows 3.1 zugrunde lag, setzte dagegen laufend neue Segmentgrenzen um die 5 Segmente von jeweils 64 KByte Größe über den Speicher zu verschieben und so den ganzen Speicher anzusprechen.

Pentium ProWeiterhin entfielen bei 16-Bit Code auf eine Instruktion 2 µops, bei 32 Bit Code waren es nur 1,5. Kombiniert führten diese Nachteile dazu, das ein 150 MHz Pentium Pro bei 16-Bit Code nur so schnell wie ein Pentium mit 120 MHz war, also etwa die Hälfte seiner Leistung verlor. Das war auch gegeben unter Windows 95, das anders als die Werbeaussagen von Microsoft noch viele 16 Bit Altlasten unter der Haube hatte.

So hatte der Rechner nicht den Erfolg bei PCs, sondern eher im Markt von Workstations bei denen 32 Bit UNIX Betriebssysteme eingesetzt wurden. PCs mussten Windows NT 3.51 einsetzen um die Performance zu nutzen. Doch auch in künstlichen Benchmarks  wie dem Dhrystone und Whetstone Benchmark war der Vorsprung zum Pentium marginal: bei gleichem Takt bei Integeranweisungen rund 10% und bei Fließkommaansweisungen 25%. Von historischer Bedeutung war, das die Intel x86 Architektur mit der ASC Red zum ersten Mal den schnellsten Rechner der Welt stellte. Er setzte 6.000 Pentium Pro mit jeweils 200 MHz Taktfrequenz ein und erreichte als erster Rechner 1 Teraflops.

Angekündigt wurde er im Februar 1995, erste Exemplare waren lieferbar ab dem 1.11.1995. Die letzte Version mit 200 Mhz und bis zu 1024 KByte großem Cache erschien am 18.8.1997. Intel brachte sehr bald den Pentium II als Nachfolger des Pentium heraus, der die Nachfolge des Pentium Pro bei PCs antrat und bei dem es auch Versionen gab die pinkompatibel zum Sockel 8 des Pentium Pro waren. So wurde auch später der Supercomputer ASC Red mit Pentium II nachgerüstet.

Technische Daten
Erschienen: 1.November 1995
Transistoren: 5,5 Millionen + 15,5, 31 und 62 Millionen für den Cache
Technologie 0,5 µm BiCMOS 0,35 µm BIHCMOS (200 MHz)
Taktfrequenzen: 150, 180, 200 MHz
Recheneinheiten Ganz/Fließkomma 2 / 1
Geschwindigkeit Ganzzahlen 373 Dhrystones bei 200 MHz
Geschwindigkeit Fließkommazahlen 161 Whetstones bei 200 MHz
Geschwindigkeit: 406 - 541 MIPS
Spannung: 3,3 V
Gehäuse: PGA mit 387 Pins (Sockel 8)
Speicher: 64 GByte physikalisch, 64 TByte virtuell
Datenbus: 64 Bit breit
Vorgänger: Pentium
Nachfolger: Pentium II

Quellen:

Performance Charakterization of the Pentium Pro Processor.

Andres Stiller: Intels neues Premium: Pentium Pro

Pentium Pro Processor Family Developers Manual

Pentium Pro Prozessor Datasheet

Artikel erstellt am 11.10.2014. Artikel zuletzt geändert: 17.12.2014

Zum Thema Computer ist auch von mir ein Buch erschienen. "Computergeschichte(n)" beinhaltet, das was der Titel aussagt: einzelne Episoden aus der Frühzeit des PC. Es sind Episoden aus den Lebensläufen von Ed Roberts, Bill Gates, Steve Jobs, Stephen Wozniak, Gary Kildall, Adam Osborne, Jack Tramiel und Chuck Peddle und wie sie den PC schufen.

Das Buch wird abgerundet durch eine kurze Erklärung der Computertechnik vor dem PC, sowie einer Zusammenfassung was danach geschah, als die Claims abgesteckt waren. Ich habe versucht ein Buch zu schreiben, dass sie dahingehend von anderen Büchern abhebt, dass es nicht nur Geschichte erzählt sondern auch erklärt warum bestimmte Produkte erfolgreich waren, also auf die Technik eingeht.

Die 2014 erschienene zweite Auflage wurde aktualisiert und leicht erweitert. Die umfangreichste Änderung ist ein 60 Seiten starkes Kapitel über Seymour Cray und die von ihm entworfenen Supercomputer. Bedingt durch Preissenkungen bei Neuauflagen ist es mit 19,90 Euro trotz gestiegenem Umfang um 5 Euro billiger als die erste Auflage. Es ist auch als e-Book für 10,99 Euro erschienen.

Mehr über das Buch auf dieser eigenen Seite.

Hier geht's zur Gesamtübersicht meiner Bücher mit direkten Links zum BOD-Buchshop. Die Bücher sind aber auch direkt im Buchhandel bestellbar (da ich über sehr spezielle Themen schreibe, wird man sie wohl kaum in der Auslage finden) und sie sind natürlich in den gängigen Online-Plattformen wie Amazon, Libri, Buecher.de erhältlich.


© des Textes: Bernd Leitenberger. Jede Veröffentlichung dieses Textes im Ganzen oder in Auszügen darf nur mit Zustimmung des Urhebers erfolgen.
Sitemap Kontakt Neues Hier werben Bücher vom Autor Buchempfehlungen Top 99