24. IA-64 24.1. Literatur CPUs allgemein : ... · 24.3. IA-64 Architektur 24.3.1 Einführung •...
Transcript of 24. IA-64 24.1. Literatur CPUs allgemein : ... · 24.3. IA-64 Architektur 24.3.1 Einführung •...
24. IA-64
24.1. Literatur
• CPUs allgemein : www.sandpile.org
• Im Prinzip ist die Itanium Architektur am Markt gescjheitert, da keine ausreichend guten Compiler bereitgestellt werden konnten.
• Intel IA-64: − “Introducing the IA-64 Architecture”, IEEE Micro, Vol. 20, No. 5, 2000
www.microsoft.com/windowsserver2003/64bit − www.csee.umbc.edu/help/architecture − www.linuxia64.org − www.intel.com −
255 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.2. Parallelität auf Befehlsebene
• ILP = Instruction-Level Parallelism.
• Superskalare Prozessoren (z.B. Pentium III): − Prozessor mit mehreren Ausführungseinheiten (z.B. Integer, Float, Load, Store, ...)
Ziel: Mehr als ein Befehl pro Takt den Ausführungseinheiten zuordnen. − − −
− − −
− −
Befehle können umgeordnet werden, um Latenzzeiten zu vermeiden. Dynamische Befehlsauswahl (Abhängigkeiten berücksichtigen).
• VLIW-Technik (z.B. Transmeta): − VLIW = Very Long Instruction Word.
Statische Befehlsauswahl durch Compiler. Compiler packt feste Anzahl parallel ausführbarer Befehle in einen VLIW-Befehl. Die Befehle in einem VLIW-Befehl werden gemeinsam zugeordnet und ausgeführt.
• EPIC = Explicit Parallel Instruction Computing (z.B. IA-64): − Dreibefehlsformat ähnlich VLIW (spezielle Bits markieren unabhängige Befehle).
Compiler verantwortlich für Parallelisierung auf Befehlsebene. Ziel: Synergie zwischen Hardware und Software. IA-64 Projekt: Intel und HP, begonnen 1994.
256 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.3. IA-64 Architektur
24.3.1 Einführung
• IA-32: sehr wenige Register mit vielen Randbedingungen Optimierungen durch Compiler schwierig.
• IA-64: − Komplett neue Architektur.
Registerstack- und rotation. − − − − −
− −
Spekulative Ausführung von Befehlen. Möglichst viel Befehle parallel ausführen (ILP). Parallelisierung auf Befehlsebene durch Compiler (EPIC). IA-32 wird emuliert; damit binärkompatibel, aber langsam.
• Software muss neu geschrieben werden: − Effizienz steht und fällt mit Compiler.
Werkzeuge: GNU-, Intel C/C++ Compiler, ... Betriebssysteme: Windows Server 2003, Linux, HP-UX, ...
257 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.3.2 Prozessoren
• Itanium (Merced), 2001: − 733, 800MHz.
FSB 266 MHz (64 Bit). − − − −
− − − −
− − −
Caches: L1=16k+16k, L2=96k, L3=2/4MB (nicht auf Chip). Adressraum: physikalisch=44 Bit, virtuell=50 Bit. Einheiten: 4 Integer, 2 Float; 10-stufige Pipeline.
• Itanium 2 (McKinley), 2002: − 900, 1000MHz.
FSB 400 MHz (128 Bit) 6,4 GByte/s. Caches: L1=16k+16k, L2=256k, L3=1,5/3MB (auf dem Chip). Adressraum: physikalisch=50 Bit, virtuell=60 Bit. Einheiten: 6 Integer, 3 Branch, 2 Float; 8-stufige Pipeline.
• Itanium 2 (Montecito), 2004: mit Hyper-Threading: − Freie Einheiten durch mehrere Befehlsstränge belegen (Wartezeiten ausnutzen).
Mehrere Registersätze zur Realisierung von schnellen Thread-Wechseln. Die Software interpretiert dies als zwei eigenständige Prozessoren. Bem.: auch beim neusten Pentium 4 enthalten.
258 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.3.3 Register
• Auszug:
Integer Register FP Register Branch Register
32 static
NaT
+1.0
+0.00.GR0
GR31 GR32
GR127
FR0
FR31FR32
FR127
BR0
BR8
081
96 rotated
0 64
32 static
96 rotated
0641
16 static
48 rotated
Integer Register FP Register Branch Register
32 static
NaT
+1.0
+0.00.GR0
GR31 GR32
GR127
FR0
FR31FR32
FR127
BR0
BR8
081
96 rotated
0 64
32 static
96 rotated
0641
16 static
48 rotated
Predicat Register
PR0
PR15PR16
PR63
Predicate Register
PR0
PR15PR16
PR63
259 Systemprogrammierung II, Winter 2005/06, P. Schulthess
Register Stack
• Motivation: Sichern von Registern und Aufbau von Stack-Frame teuer.
• 96 Stacked GR-Register werden transparent rotiert und umbenannt.
• Register-Stack-Frame (RSF): −
local
32 globale
input
0
31
output
127
32
96 stacked
local
32 globale
input
0
31
output
127
32
96 stackedGR32 ist immer das erste Stack-Register. Output: Parameter für Aufrufe. −
− − −
−
− − −
Local: für lokale Variablen. Input: E/A-Parameter. ‚alloc’ für Allokation.
• Spezielle Register: − Current Frame Marker Reg.: speichert akt. RSF-Bereich.
Previous Function State Reg.: für br.call & br.ret.
• Register Stack Engine: − Ziel: Illusion von beliebig vielen Registern.
Lagert Register in Speicher aus und wieder ein. Überlauf: ‚alloc’ benötigt mehr Register, als verfügbar. Unterlauf: ‚return’ löst Wiedereinlagern eines Rahmens aus.
260 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• Prozedur-Aufruf mit Register-Rotation: sisi
local
32 globale
input
0
31
output
32+ze(a)
32
Fkt. A vor br.call
32 globale
0
31
32
Fkt. B direkt nach br.call
local
32 globale
0
31
output32+
size(b)
32
Fkt. B nach alloc
call alloc
overlap
local
32 globale
input
0
31
output
32+size(a)
32
Fkt. A vor br.call
overlap
return
output input
local
32 globale
input
0
31
output
32+ze(a)
32
Fkt. A vor br.call
32 globale
0
31
32
Fkt. B direkt nach br.call
local
32 globale
0
31
output32+
size(b)
32
Fkt. B nach alloc
call alloc
overlap
local
32 globale
input
0
31
output
32+size(a)
32
Fkt. A vor br.call
overlap
return
output input
261 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.3.4 Befehlsformat
• Bundles: − Größe = 128-Bit.
Jeweils 16-Byte aligniert. − − − −
− − −
Bietet 3 Slots für je eine Instruktion. Bilden Befehle auf Ausführungseinheiten ab. Unbenutzte Slots müssen mit NOPs aufgefüllt werden.
Slot-3 Template
0
Slot-2Slot-1
44586127
Slot-3 Template
0
Slot-2Slot-1
44586127
• Template: − Größe = 5 Bits.
Gibt Zuordnung der Slots zu Ausführungseinheiten. Definiert ferner Stops innerhalb und am Ende des Bundles. Instruktionen vor einem Stop und nach einem Stop nicht parallel ausführbar.
262 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• Insgesamt sind 24 verschiedene Bündel möglich. − MFI mit keinem Stop Code=0D. − −
• •
− − −
MFI ohne Stop Code=0C. Abkürzungen für Zuordnung:
• M=Memory function F=Floating point function I=Non-ALU Integer A=Integer ALU B=Branch function L=is a function involving a Long immediate
• IA-64 Befehle: − Jeweils 41-Bit in einem Slot.
Opcode extension: variable Länge (max. 10 Bit). Instruction specific: z.B. 2 Eingabe- und 1 Ausgabe-Register (zu je 7 Bit). Predicate (6 Bit): bezieht sich auf Predicate Register (64-Bit).
instruction specific predicate
0
opcode ext.major op.
53640 x
instruction specific predicate
0
opcode ext.major op.
53640 x
263 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• Beispiel parallel ausführbare Instruktionsgruppen: − Stop-Bit (= ;;) markiert Ende von parallel ausführbaren Instruktionen.
Parallel ausgeführte Instruktionen sind hier unabhängig! −
{ .mii
ld8 r1 = [r2] add r4 = r3,r5 ;;add r2 = r4,r6 ;;
}
{ .mmild8 r2 = [r1] ;;st8 [r1] = r23 add r3,r2
}
{ .mmild8 r5 = [r7] ld8 r6 = [r8] nop.i
}
{ .miild8 r1 = [r2] add r4 = r3,r5 ;;add r2 = r4,r6 ;;
}
{ .mmild8 r2 = [r1] ;;st8 [r1] = r23 add r3,r2
}
{ .mmild8 r5 = [r7] ld8 r6 = [r8] nop.i
}
264 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.3.5 Parallele Kontrollflüsse
• IA-32: benötigt Sequenz von Vergleichen und bedingten Sprüngen.
• IA-64: − Parallele Vergleiche.
Konditionale Befehle. − −
− − − −
− −
Mehrweg-Verzweigungen.
• Prädikate (Predicates) zur Vermeidung teuerer Sprünge: − IA-32: Konditionaler MOV mit cmov.
IA-64: Predicate Register beliebige konditionale Befehle. Compiler generiert Befehle, die Predicates setzen oder auslesen. Nur wenn das Predicate eines Befehls „wahr“ ist, wird dieser ausgeführt. Hierdurch wandelt der Compiler Kontrollfluß- in Datenabhängigkeiten um.
• Hierdurch können mehrere Kontroll-Pfade parallel bearbeitet werden: − Nur die Ergebnisse des tatsächlich gewünschten Pfades werden geschrieben.
Dieser Ansatz ist billiger als die Pipeline neu zu füllen. Predicates besser als Sprungvorhersage in Hardware.
265 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• Beispiel If-Statement mit Predicates:
// C pseudo-code // IA-64 assemblyif (r4) { cmp.ne p1,p0=r4,0 // set predicate reg
add r1=r2,r3 (p1) add r1=r2,r3ld8 r6=[r5] (p1) ld8 r6=[r5]
}
;;
• Beispiel parallele Vergleiche:
// C pseudo code // IA-64 assemblyif (rA||rB||rC) { cmp.ne p1,p0=r0,r0;; // init p1=0
/* if block */ cmp.ne.or p1,p0 = rA,r0} cmp.ne.or p1,p0 = rB,r0/* after if */ cmp.ne.or p1,p0 = rC,r0
(p1)br.cond if_block
• Beispiel Mehrweg-Verzweigung:
{ .bbb(p1) br.cond label_BB(p2) br.cond label_CC(p3) br.cond label_DD
}
label_AA: // fall through to AA
266 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.3.6 Spekulatives Ausführen von Instruktionen
• Problem: Latenzzeiten beim Laden/Speichern in Register.
• Lösung: Register spekulativ laden & falsch geladene Daten verwerfen.
• Control Speculation: Wert wird bereits vor einem Sprung geladen.
• Data Speculation: Wert wird vor möglichem Konflikt geladen.
• Compiler hat mehr Möglichkeiten bei Code-Scheduling: − Instruktionen können über Barrieren (Sprünge, Aliase) verschoben werden.
Hierdurch bessere Ausnutzung von ILP möglich. −
Instr. 1
Instr. 2
Branch
Ld r1=...
Use r1
Barrier
Instr. 1
Instr. 2
St[?]
Ld r1=...
Use r1
Barrier
Instr. 1
Instr. 2
Branch
Ld r1=...
Use r1
Barrier
Instr. 1
Instr. 2
St[?]
Ld r1=...
Use r1
Barrier
267 Systemprogrammierung II, Winter 2005/06, P. Schulthess
Control Speculation
• Nicht alle Sprünge können durch konditionale Befehle ersetzt werden.
• Aber spekulative Ladebefehle (ld.s) über Barrieren verschiebbar.
• Exceptions müssen verzögert werden: − NaT Bit des Zielregisters wird im Falle einer Exception gesetzt.
NaT Bit wird ggf. propagiert Spekulation über viele Befehle mögl. − − − chk.s r1,rescue Befehl nach Barriere erkennen von Exceptions. Falls r1.NaT=1, so wird vom Compiler generierter Recovery Code angesprungen.
Instr. 1
Instr. 2
Branch
Ld.s r1=...
Use r1
Chk.s r1, recover
Exception r1.NaT=1
Use r1
Ld r1
Branch
recovery:
Instr. 3
Instr. 1
Instr. 2
Branch
Ld.s r1=...
Use r1
Chk.s r1, recover
Exception r1.NaT=1
Use r1
Ld r1
Branch
recovery:
Instr. 3
268 Systemprogrammierung II, Winter 2005/06, P. Schulthess
Data Speculation
• Abh. Lade- und Speicherbefehle müssen sequentiell ausgeführt werden.
• Problem: − Zeiger-Alias bei nicht typsicheren Sprachen (z.B. C) nicht immer erkennbar.
Es entstehen unnötige Abhängigkeiten verhindern Umordnen von Instruktionen. −
− −
• Advanced Load (ld.a) vor gefährlichen Schreibbefehlen ausführbar. Nach der probl. Speicheroperation wird ld.a mit ld.c bzw. chk.a verifiziert. Gegebenenfalls wird ein Recovery-Code angesprungen.
Instr. 1
Instr. 2
Store[?]
Ld.a r1=...
Use r1
Ld.c r1
Instr. 3
Instr. 1
Instr. 2
Store[?]
Ld.a r1=...
Use r1
Ld.c r1
Instr. 3
269 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• ALAT = Advanced Load Address Table: − Tabelle in Hardware. − − − −
• −
•
Itanium 2 besitzt 32 Einträge. Jeder advanced Load (ld.a) erzeugt einen Eintrag. Überschreibende Befehle löschen die Einträge wieder. ld.c:
• Eintrag vorhanden: Daten sind bereits erfolgreich geladen kein Eintrag gefunden: Daten nochmals laden.
chk.a: • Eintrag vorhanden: Daten sind bereits erfolgreich geladen
kein Eintrag gefunden: Daten sind kollidiert Recovery Code ausführen.
sizeaddrreg#
sizeaddrreg#
sizeaddrreg#
...
sizeaddrreg#
sizeaddrreg#
sizeaddrreg#
...
270 Systemprogrammierung II, Winter 2005/06, P. Schulthess
24.3.7 Virtuelle Adressierung
• Platzbedarf für konventionelle Seitentabellen: − IA-32: max. 4 MB (4KB pro Seite). −
•
−
− −
− −
IA-64: • Einstufige Tabelle: 252 Einträge bei 4KB Seiten.
Bei Einträgen zu je 8 Byte ergibt dies ~ 30*106 GB!
• Lösung: invertierte Seitentabellen. − Besser ein Eintrag pro phys. Kachel als ein Eintrag pro logischer Seite.
Suchen virtueller Seiten wird aufwendiger TLB Cache verwenden.
• Bei Fehlanzeige im TLB: − Firmware aufrufen,
oder OS via Interrupt aufrufen über Hashtabelle zur physikalischen Adresse,
• Bei Fehlanzeige in der Hashtabelle: − sekundäre Seitentabelle konsultieren,
eventuell Tabellen und Seiten auf Platte, Seite einlagern & Hashtabelle aktualisieren.
271 Systemprogrammierung II, Winter 2005/06, P. Schulthess
Übersetzung virtueller Adressen
Adreßübersetzung
Virtual Page Number
offset
Virtual Region Number
VRN VPN
063 61 60
region ID
rr0rr1rr2
rr7
..
.
Region Registers Virtuelle Adresse
phys. page nr.RID VPN protection
TLB
‚match‘ ‚deliver‘
offset
Pyhsikalische Adresse
Virtual Page Number
offset
Virtual Region Number
VRN VPN
063 61 60
region ID
rr0rr1rr2
rr7
..
.
Region Registers Virtuelle Adresse
phys. page nr.RID VPN protection
TLB
‚match‘ ‚deliver‘
offset
Pyhsikalische Adresse
272 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• Regionen: − Eine Region besteht aus Pages (evt. unterschiedlicher Größe). − −
− −
• −
• • •
IA-64 unterteilt virtuellen Adressraum in 8 virtuelle Regionen zu je 261 Byte. Data-Sharing zw. Prozessen durch RID-Sharing weniger TLBs werden gespült!
• 64-Bit virtuelle Adressen: Bitpositionen für VPN und Page Offset hängen von der Seitengröße ab.
• Übersetzung: − VRN: selektiert Region Register und damit Region-ID (RID).
TLB wird nach passendem (RID,VPN)-Eintrag durchsucht. Eintrag gefunden:
• PPN mit Page Offset konkatenieren. Seitenbasierte Zugriffsrechte prüfen.
Eintrag nicht vorhanden: • Prozessor durchsucht VHPT-Struktur im Hauptspeicher und aktualisiert TLB.
Falls Eintrag immer noch nicht gefunden wird eine TLB Miss fault ausgelöst. Nun muss OS Eintrag suchen und in VHPT und TLB einfügen. VHPT = Virtual Hashed Page Table.
Translation Lookaside Buffer 273 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• Für Daten und Instruktionen jeweils ein zweistufiger TLB: − Level-1: 32 Translation Registers.
Level-2: 96 Einträge in Translation-Cache. − −
− − − −
− − − − −
Beide Stufen sind in Software manipulierbar.
• Inhalt eines Eintrages: − Present, Access Bits, ...
Caching Strategie für Seite. Identifikation: (RID,VPN)-Tupel. Seitengrößen = 2k mit k∈{12, ..., 22}. Schutz: Privilege Level, Protection Key.
• Bei einem TLB Miss Fault wird VHPT durchsucht, falls vorhanden: − VHPT = Virtual Hash Page Table.
Feature optional für Hardware und Software. Wenn vorhanden, greift der Prozessor nur lesend zu. Aktualisieren und Konsistenz zw. VHPT und TLB Aufgabe der Software. Tabelle liegt im virtuellen Adreßraum evt. TLB Miss Fault beim Durchsuchen. Eigene Erweiterungen greifen bei einem VHPT Translation Fault.
24.3.8 Protection 274 Systemprogrammierung II, Winter 2005/06, P. Schulthess
• Merkmale: − Vier Privilegstufen mit Rechten R,W und X auf Seitenbasis.
Mind. 16 PKRs. − − offsetVRN VPN
region ID
RID VPN rights key
TLB
Priv. LevelAccess Type
key1key2key3
rw-rwxr--
Protection Key
Registers
ok?
offsetVRN VPNregion ID
RID VPN rights key
TLB
Priv. LevelAccess Type
key1key2key3
rw-rwxr--
Protection Key
Registers
ok?
Protection Key hat 24-Bit.
24.3.9 Bewertung 275 Systemprogrammierung II, Winter 2005/06, P. Schulthess
276 Systemprogrammierung II, Winter 2005/06, P. Schulthess
−
−
• Hoher Stromverbrauch (max. 130W), durch gleichzeitiges (spekulatives) Beschäftigen vieler Einheiten.
• Viele Befehle werden teilweise verworfen (abhängig von Anwendung): −
• Hohe Speicherbandbreite notwendig: − Befehle belegen vergleichsweise viel Speicherplatz: 128-Bit pro Bundle.
Bundles oft mit NOPs aufgefüllt Verschwendung von Bandbreite.
• SPECint bis zu 80% der Befehle werden verworfen! −
Spekulatives Ausführen nicht immer erfolgreich. Multiway Branches nehmen Verlust in Kauf, ...
Tabelle aus c’t 13/2001: