Der Intel Pentium 4

Transcription

Der Intel Pentium 4
Der Intel Pentium 4
Architektur Teil 1
Von:
Leif Evers
497200916
Fatih Gürsoy
497201193
Semester:
I8I1x
Vorlesung:
Rechnerstrukturen
Betreuender
Hochschulprofessor:
Prof. Dr. T. Risse
Datum:
Januar 2003
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
Inhaltsverzeichnis:
1
2
3
Einleitung............................................................................................................. 3
Allgemeines zum Intel Pentium 4 ........................................................................ 3
Architektur des Pentium 4 ................................................................................... 4
3.1
Der neue Prozessorbus................................................................................ 5
3.2
Advanced Transfer Cache............................................................................ 6
3.3
Hardware Data Prefetch............................................................................... 6
3.4
Das Frontend ............................................................................................... 7
Instruction Translate Look-aside Buffer ITLB................................................... 7
Dynamic Branch Predictor und Trace Cache Branch Prediction (BTB) ........... 8
Branch Target Buffer (BTB) ............................................................................. 9
Micro Code ROM ............................................................................................. 9
Instruction Decoder........................................................................................ 10
Execution Trace Cache.................................................................................. 10
L1-Daten Cache............................................................................................. 12
4 Quellen: ............................................................................................................. 13
- Seite 2 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
1 Einleitung
Im Rahmen der Vorlesung Rechnerstrukturen wurden sog. Assignments erarbeitet.
Dabei ging es in unserer Gruppe um den Intel Pentium 4.
In der Folgevorlesung Rechnerstukturen-Labor soll nun im Wesentlichen die
Speicheranbindung des Intel Pentium 4 genauer betrachtet werden. Vorab werden
die wesentlichen Neuerungen des Pentium 4 kurz angerissen, aber nicht vertieft.
Dieses ist nur um den Pentium 4 kurz vorzustellen.
2 Allgemeines zum Intel Pentium 4
Mit dem Pentium 4 führte Intel erstmals die NetBurstTM-Architektur[1] ein. Mit
NetBurst stellt Intel ein ganz neues Prozessordesign vor. Taktfrequenzen ab 1,4 GHz
und Skalierbarkeit für viele Jahre sollen als Erfolgsgarant dienen.
NetBurst ist der Sammelbegriff für eine Vielzahl von Neuerungen, die erstmals beim
Pentium 4 Einzug halten.
NetBurst beinhaltet:
•
•
•
•
•
•
•
400 MHz Systembus
Advanced Transfer Cache
Trace Cache
Hyper-Pipeline
Rapid Execution Engine
Advanced Dynamic Execution
SSE2
- Seite 3 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
3 Architektur des Pentium 4
Bild 1: Architektur des P4 [2]
Folgende Neuerungen erhalten Einzug in den Pentium 4:
400 MHz System-Bus: Der Pentium 4 erlaubt Datentransferraten von ~ 3 GByte/s
und verfügt somit über die dreifache Bandbreite des Pentium III mit 133-MHz-FSB.
Advanced Transfer Cache: Die Größe des Advanced Level 2 Transfer Cache beträgt
256 KB (Willamette) und liefert einen wesentlich höheren Datendurchsatz zwischen
dem Level 2 Cache und dem Core. Der Advanced Transfer Cache besteht aus einem
256-Bit (32-Byte) Interface welches Daten zu jeder Core-Clock transferiert. Z.B. Ein
Pentium 4 mit 1,5 GHz kann eine Transferrate von 48 GB/s (32 Bytes x 1
(Datentransfer pro Clock) x 1,5 GHz = 48 GB/s).
Trace-Cache: Der Trace Cache ist ein erweiterter L1-Cache für Befehle. Er speichert
bereits dekodierte x86-Befehle (µOPs). Wartezeiten durch Befehlsdekodierung beim
Speisen der Pipeline werden verhindert, da die Pipeline fertig dekodierte x86-Befehle
(µOPs)vom Trace Cache bekommt.
- Seite 4 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
Hyper-Pipeline: Mit 20 Stufen doppelt so lang wie beim P6-Core. Sie kann bis zu
128* Micro-Ops gleichzeitig verarbeiten. Die Hyper-Pipeline-Technologie ermöglicht
die hohen Taktfrequenzen des Pentium 4.
Rapid Execution Engine: Die ALUs des Pentium 4 takten mit der doppelten CoreFrequenz. Integer-Befehle bearbeitet NetBurst damit beim 1,5 GHz Pentium 4 mit 3
GHz.
Advanced Dynamic Execution: Sehr tiefe Core-Architektur nach dem spekulativen
Out-of-Order Prinzip. NetBurst kann 126* Befehle gleichzeitig halten und stellt das
Befehlsfenster den Ausführungseinheiten zur Verfügung. Zusätzlich verfügt der
Pentium 4 über eine verbesserte Sprungvorhersage, die bei langen Pipelines sehr
wichtig ist. Unterstützt wird die Sprungvorhersage durch einen 4 KByte großen
Branch Target Buffer.
SSE2: Die Streaming SIMD Extensions 2 verfügen über 144 neue Befehle und
erlauben 128 Bit breite Integer- und Floating-Point-Operationen.
Die Hyperpipeline, Rapid Execution Engine, Advanced Dynamic Execution sowie die
SSE2 Befehle werden im zweiten Teil von Carsten Siebert und Beatrice Pop
ausführlich behandelt.
3.1
Der neue Prozessorbus
Bild 2: Der Prozessorbus
Beim Pentium 3 ist der FSB mir 133 MHz getaktet und ist in der Lage, 64-Bit Daten
mit einem Taktzyklus zu übertragen. Das ergibt eine Transferrate von 8 Byte * 133
MHz/s = 1,066 MB/s.
* Die unterschiedlichen Angaben resultieren daraus, dass die genaue Größe der Micro-Ops nicht bekannt ist
- Seite 5 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
Der Pentium 4 Bus wird mit 100 MHz beim Willamette und 133 MHz beim Northwood
getaktet. Die Busbreite ist gleich geblieben. Es werden beim Pentium 4 nur pro Takt
vier Datenwörter übertragen. 8 Byte * 4 * 133 MHz/s = 4,2 GB/s. Intel nennt das
Übertragen von vier Datenwörtern „Quad Pumped Bus“ [5].
Das Übertragen von 4 Datenwörtern setzt zwei Kanäle voraus. Einen für Read- und
einen für Write-Operationen. Des Weiteren findet jeden halben Takt eine
Datenübertragung statt.
Dieser schnelle Datenaustausch verhindert den Engpass, der bis zum Pentium 3
noch präsent war. Vorausgesetzt der Hauptspeicher kann die Daten schnell genug
liefern.
3.2
Advanced Transfer Cache
Bild 3: Advanced Transfer Cache, Hardware Data Prefetch und L1 Data Cache
Der Name „Advanced Transfer Cache“ (L2) kommt noch vom Pentium 3
„Coppermine“. Er ist beim Willamette mit 256 KB und beim Northwood mit 512 KB
angegeben. Die einzige Gemeinsamkeit zum Pentium 3 ist noch, dass es 8-Fach
Satz assoziative Caches sind.
Beim Pentium 4 wurde die Cacheline von 64-Byte auf 128-Byte erhöht, die in 2*64Byte unterteilt wurde. Wenn der L2-Cache nun vom System (RAM, PCI, AGP,…)
Daten erhält, werden auf einmal 64-Byte übertragen. Die Latenzzeit zum Lesen aus
dem L2 beträgt 7 Cycles (bis die Daten vollständig an L1-Cache, oder an den x86
Instruction decode/prefetch Buffern anstehen). Die Verbindung zum Core ist 256-Bit
breit und wird mit vollem Prozessortakt getaktet.
Um eine L2-Cache-Line zu füllen, werden vier Taktzyklen benötigt, genau so viele
Taktzyklen wie der P6-Bus für eine 32-Bit-Line.
3.3
Hardware Data Prefetch
Das „streaming Bit“ vom SSE ist für die „prefetch-instuctoins“ des Pentium 3. Dieses
Bit ermöglicht Software, sofern diese Bit gesetzt ist, Daten in die Caches zu laden,
bevor sie von der CPU benötigt werden. Das setzten des Bits erfolgt Softwareseitig.
- Seite 6 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
Diese Instruktionen sind beim Pentium 4 geblieben. Diese neue Einheit (siehe Bild 3)
ist nun in der Lage, Datenzugriffs-Muster von Software, die durch den Pentium 4
ausgeführt wird, zu erkennen. Erkennt nun die Hardware Data Prefetch Unit, dass
immer fortlaufende Streaming-Daten am L1 ankommen, werden sie automatisch
prefetcht. Das setzen eines „Bits“ durch die Software ist jetzt nicht mehr notwendig.
Wie das Erkennen der fortlaufenden Streaming-Daten erfolgt, darüber schweigt Intel.
3.4
Das Frontend
Das Frontend ist der Teil der Maschine, der die nächsten Befehle, die ausgeführt
werden sollen, holt und sie für die Verarbeitung bereitstellt, um diese später in der
Pipeline zu benutzen. Das Frontend hat dabei eine sehr exakte Branch Prediction
Logik, die die vorhergesagten Sprungziele der Befehle abspeichert. Dadurch kann
man bei der nächsten Berechnung des Sprungzieles spekulieren, wo das Programm
hin verzweigen wird. Diese vorrausgesagte Sprungzieladresse von der Branch
Prediction Einheit wird benutzt, um die nächsten Befehle vom L2 Cache zu holen.
Diese x86-Befehle werden dann in einfachere Befehle dekodiert, die µOPs genannt
werden. Die NetBurst-Mikroarchitektur hat einen erweiterten L1-Instruction Cache,
der Execution Trace Cache genannt wird. Dort werden diese µOPs gespeichert und
somit entfällt bei der erneuten Ausführung des Befehls das Dekodieren. Die PrefetchLogik bekommt schon fertig dekodierte x86-Befehle, die sog. µOPs.
Bild 4: Frontend des Pentium 4
Instruction Translate Look-aside Buffer ITLB
Bei einem Trace Cache Miss muss der nächste Befehl aus dem L2 geladen werden.
Da der L2 Cache mit virtuellen Adressen arbeitet, müssen diese Adressen in
physikalische umgewandelt werden. Der Instruction TLB hat die Aufgabe, diese
virtuellen Adressen in physikalische Adressen umzuwandeln. Es beschleunigt den
Speicherzugriff, da die physikalischen Adressen im TLB in einer Tabelle
zwischengespeichert werden.
- Seite 7 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
Dynamic Branch Predictor und Trace Cache Branch Prediction (BTB)
Es ist unbedingt notwendig, gute Branch Predictions zu erzielen, um falsche
Sprungvorhersagen zu vermeiden. Dabei wird versucht, aus dem Verhalten eines
bestimmten Sprunges, eine Vorhersage für diesen Sprung herzuleiten.
Im Folgenden soll kurz erläutert werden, auf welche Weise Branch Predictions [3]
realisiert werden:
Es gibt drei Arten von Branches:
Forward Conditional Branches: Der Programm-Counter (PC) zeigt zu einer
Folgeadresse im Instruktionsfluss.
Backward Conditional Branches: Der PC zeigt auf eine vorhergehende Adresse im
Instruktionsfluss. Die Verzweigung basiert auf einer Bedingung, wie z.B. „Springe
zurück zum Anfang der Programmschleife“, wenn am Ende der Schleife der
Schleifenzustand es erfordert, die Schleife erneut aufzurufen.
Unconditional Branches: Diese Verzweigungen beinhalten Sprünge, Prozeduraufrufe
und Returns, die keine spezifische Bedingung haben. Ein „jmp“ wäre dafür ein
Beispiel.
Realisierung von Branch Predictions:
Static Prediction: Durch Untersuchungen von durchschnittlichem Befehlscode kann
man feststellen, dass z.B. vorwärts gerichtete Verzweigungen rückwärts gerichtete
Verzweigungen mit dem Verhältnis 4 zu 1 dominieren. Außerdem werden nur 60%
der vorwärts gerichteten Verzweigungen genommen, während dessen
durchschnittlich 85% der rückwärts gerichteten Verzweigungen genommen werden
(aufgrund vom Programmschleifen). Dadurch hat man statische Voraussagen für
Verzweigungen in Programmabläufen.
Dynamic Prediction mit Branch History Table (BHT): Den Hauptteil der
Vorhersage-Arbeit leistet die Fetch-Unit in Zusammenarbeit mit dem BTB (Branch
Target Buffer). Der BTB ist eine Art Cache mit 4096 Einträgen. Wird ein bedingter
Sprungbefehl in der Execution-Phase der Pipeline ausgeführt, so werden in den BTB
Eintragungen für diesen Befehl vorgenommen (an welcher Adresse steht dieser
Verzweigungsbefehl, wurde die Verzweigung durchgeführt, wohin wurde verzweigt).
Zusätzlich sind für jeden Eintrag 4 History-Bits vorhanden, die ähnlich einem Zähler
verwendet werden. In diesen Bits wird festgehalten, welches Verhalten dieser
bedingte Sprungbefehl ausweist, wenn er wiederholt ausgeführt wird. Vereinfacht
ausgedrückt funktioniert die Vorhersage nun etwa so: wurde der bedingte Sprung in
letzter Zeit eher ausgeführt, wird das auch für die nächste Ausführung angenommen
und umgekehrt. Die dynamische Verzweigungsvorhersage wird bereits in der FetchUnit verwendet.
Two-Level Predictors (z.B. GShare Algorithm): Das ist die komplexeste
Möglichkeit, noch höhere Genauigkeit bei der Branch Prediction zu erreichen. Es
- Seite 8 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
geht im groben darum, durch Ausnutzung der Korrelation aller (globalen)
Verzweigungen, noch treffsicherer Voraussagen treffen zu können. Es werden
Muster von Entscheidungen (T=Taken T, N=Not Taken) aufgezeichnet und zur
Vorhersage herangezogen.
ein einzelner Branch Befehl: z.B. Schleife TTTNTTTN…
Oder als alternative eine if then else Anweisung TNTNTN…
Korrelation zwischen verschiedenen zusammenhängenden Branch-Befehlen
z.B. if then else in schleife TT NT TT NT TN TT NT TT NT TN
Eine Implementation dieser Methode ist GShare-Algorithmus.
Branch Target Buffer (BTB)
Bild 5: Branch Target Buffer
Hier werden in einer Tabelle die Adressen von vorhergehenden Verzweigungen mit
den vorausgesagten Verzweigungszielen abgespeichert (optional mit Setzen von
Bits, wenn diese Verzweigungen in der Vergangenheit erfolgten oder nicht). Nun ist
es möglich, vor dem Instruction Decoder Adressen mit dieser Tabelle zu vergleichen
und bei Übereinstimmung die entsprechend vorausgesagten Befehle der
Verzweigung in den Cache zu laden.
Micro Code ROM
Neben Trace Cache ist das Micro Code ROM, welches die komplexen x86-Befehle in
µOPs dekodiert. Diesen Micro Code ROM findet man in vielen modernen
superskalaren und uralten µ-programmierbaren Prozessoren.
Das Micro Code ROM wird für komplexe IA-32 Instruktionen (x86-Befehle), wie z.B.
„String move“, Fehler- und Interruptbehandlung benutzt. Wenn ein komplexer Befehl
ansteht, wird dieser von dem Micro Code Sequencer entgegengenommen. Der Micro
Code Sequencer generiert die µOPs und liefert sie an den Trace Cache. Die µOps,
die aus dem Trace Cache und dem Micro Code ROM kommen, werden in einer
einfachen „in-order µOp queue“ gepuffert. Dieses hilft den Fluss der µOps zur
Ausführungseinheit zu gewährleisten.
- Seite 9 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
Instruction Decoder
Der Instruction Decoder empfängt die x86-Befehls Bytes vom L2 Cache und
dekodiert diese in einfache Befehle (RISC-Befehle), damit sie weiter verarbeitet
werden können. Der einfache Instruction Decoder dekodiert dabei einen x86-Befehl
pro Takt. Einige x86-Befehle werden in einen µOP dekodiert, andere wiederum in
mehrere µOps, um den Befehl komplett auszuführen. Wenn mehr als 4 µOPs
dekodiert werden müssen, um einen x86-Befehl auszuführen, wird dieser x86-Befehl
an den Micro Code ROM geschickt. Dort werden die µOPs generiert und
weitergeleitet. Ein Beispiel wäre „string move“, wo tausende von µOPs generiert
werden. Viele x86-Befehle brauchen jedoch nicht den Micro Code ROM.
Aus einem AND, OR, XOR oder ADD wird nur ein µOP generiert, der dann direkt in
den Trace Cache weitergeleitet wird.
Execution Trace Cache
Der Execution Trace Cache [1] oder der L1-Instruktions Cache hat gegenüber dem
Pentium 3 einige Vorteile.
Beim Pentium III werden die Instruktionen vom L1-Instruktions-Cache geladen und
dort gespeichert, bis die Decodereinheit diese übersetzt und an die Execution Unit
weiter gibt. Die Decodereinheit übersetzt den Befehl in µOps, damit die
Ausführungseinheiten diese verarbeiten können. Die x86-Instruktionen sind relativ
komplex und der Dekoder benötigt eine gewisse Zeit, um diese in µOPs zu
übersetzen. Im schlimmsten Fall sind alle Dekoder damit beschäftigt, den x86-Befehl
zu übersetzen, und dieses bremst die Execution Pipeline.
Ein weiterer Nachteil ist, dass die x86-Befehle, die mehrmals übersetzt werden
müssen (z.B. in kleinen Schleifen), immer wieder neu dekodiert werden müssen
(durch den Instruktion Decoder oder dem Micro Code ROM).
Der Execution Trace Cache liefert 3 µOPs pro Takt an die Execution Einheit. Die
meisten Befehle werden von dem Trace Cache geholt und ausgeführt. Es sei denn,
der auszuführende Befehl liegt nicht in dem Trace Cache (Trace Cache Miss). Dann
wird der Befehl von der NetBurst Mikroarchitektur aus dem L2 Cache geholt und
dekodiert. Der Execution Trace Cache kann bis zu 12000 µOPs speichern, was ca.
100 KByte entspricht. Intel gibt die Größe des Execution Trace Caches nur in µOPs
an und schweigt über die Größe in KByte.
Doch wenn man die Fläche des L2-Caches und die des L1 (siehe Bild 6) vergleicht,
so vermutet man eine Kapazität von ca. 100 KByte. Das ist immerhin 6 mal größer
als beim Pentium III (16 KByte).
- Seite 10 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
Bild 6: Durch den Vergleich des L1 (Execution Trace Cache) und des L2 Caches schätzt man die
Größe des Execution Trace Caches auf ca. 100 KByte.
Der Trace Cache hat auch gewisse Vorteile bei einer falsch vorhergesagten
Verzweigung. Der Prozessor muss zwar alles verwerfen, aber der Trace Cache hat
eine gute Chance, auch den alternativen Pfad schon fertig dekodiert vorrätig zu
halten.
Um Sprünge zu optimieren, greift der Cache auf eine eigene
Sprungvorhersageneinheit auf µOP-Basis zurück, die zusätzlich und unabhängig von
der „normalen x86-Vorhersageneinheit“ arbeitet.
Diese Einheit soll, laut Intel, mit einem neuen Algorithmus arbeiten, welcher die
falschen Vorhersagen (Mispredictions) um 1/3 besser voraussagt als beim Pentium
III [6].
Der Execution Trace Cache nimmt die dekodierten µOPs vom Instruction Decoder
und bildet daraus eine Sequenz von µOPs. Diese werden dann Traces genannt. D.h.
ein Trace ist eine Aneinderreihung von µOPs, die als nächstes verarbeitet werden.
Der Execution Trace Cache bildet dabei eine Gruppe von 6 µOPs, die Traceline
genannt wird. Diese werden wiederum zu Blöcken zusammengefasst, welche nicht
durch Verzweigungen unterbrochen werden.
Ein Block beginnt also nach einem Sprung oder an einem Sprungziel und enthält alle
Instruktionen bis einschließlich des nächsten Sprunges.
Auch die Größe eines µOPs gibt Intel nicht bekannt. Aber durch die Größe des Trace
Caches von ca. 100 KByte und 12000 µOPs kann man die Größe ungefähr
berechnen.
100 KByte / 12000 µOPs = 8 Byte Æ 64 bit breit ist ein µOP
- Seite 11 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
L1-Daten Cache
Der 8 KByte große Level1-Daten-Cache wird für das Laden und Speichern von
Integer/ Floating-Point (SSE)-Werten benutzt. Im Gegensatz zum Pentium III(16
KByte) ist der Daten Cache im Pentium 50% kleiner.
Es ist ein 4-fach assoziativer Cache und arbeitet nach der Write Through Strategie.
D.h., beim Schreibzugriff wird grundsätzlich der L2-Cache aktualisiert.
Durch die dual-port-Architektur ist es möglich, pro Takt einmal zu laden und zu
speichern. Die Latenzzeit beim Laden eines Integer-Werts beträgt 2 Takte und das
Laden eines floatingpoint/SSE-Wertes 6 Takte. Der Grund ist, dass ein Integerwert
32 Bit und ein SSE-Wert 128 Bit lang ist, was natürlich länger dauert.
- Seite 12 -
Der Intel Pentium 4
Speicheranbindung / Cache
Leif Evers
Fatih Gürsoy
4 Quellen:
Internet:
[1] http://www.intel.com
[2] http://www.tomshardware.com
Intel’s new Pentium 4 Processor
[3] http://www.extremetech.com
PC Processor Microarchitecture – A closer look at branch prediction
[4] http://www.aceshardware.com
Pentium 4 Architecture in Depth, Part 1+2
[5] http://www.sysopt.com
Quad Data Rate SRAM-Technology
Zeitschriften:
[6] C’t 24/00 S. 124
Die Architektur des Pentium 4 im Vergleich zu Pentium III und Athlon
- Seite 13 -

Documents pareils