Top Banner
Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 9 2. Pentium & Co. 2.1. Pentium Baureihen 2.1.1 Der Intel P54C Einführung 1993. 60 – 200 MHz; Front Side Bus: 50, 60 und 66 MHz. 16 KB Level 1 Cache (8 KB + 8 KB). Kernspannung 3.3V; ca. 3.3 Mio Transistoren. Socket 4 (P60, P66); Socket 5 (P75-P133); Socket 7 (P75-P200). 2.1.2 Der Intel Pentium Pro Einführung 1995. 150 – 200 MHz; Front Side Bus: 60 und 66 MHz. 16 KB Level I Cache (8K + 8K). 256 KB – 1 MB Level II Cache on Chip. Socket 8; Kernspannung 3.3V. Transistoren: ~ 5.5 Mio (CPU) + 15.5 – 62Mio (Level 2 Cache). schlechte 16-Bit Performance.
62

2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Oct 20, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 9

2. Pentium & Co.

2.1. Pentium Baureihen

2.1.1 Der Intel P54C − Einführung 1993.

60 – 200 MHz; Front Side Bus: 50, 60 und 66 MHz. − − − −

16 KB Level 1 Cache (8 KB + 8 KB). Kernspannung 3.3V; ca. 3.3 Mio Transistoren. Socket 4 (P60, P66); Socket 5 (P75-P133); Socket 7 (P75-P200).

2.1.2 Der Intel Pentium Pro − Einführung 1995.

150 – 200 MHz; Front Side Bus: 60 und 66 MHz. − − − − − −

16 KB Level I Cache (8K + 8K). 256 KB – 1 MB Level II Cache on Chip. Socket 8; Kernspannung 3.3V. Transistoren: ~ 5.5 Mio (CPU) + 15.5 – 62Mio (Level 2 Cache). schlechte 16-Bit Performance.

Page 2: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 10

2.1.3 Der Intel P55C

Einführung 1997. − − − − − −

133 – 233 MHz (Mobile Tillamock: -300 MHz). Front Side Bus: 60 und 66 MHz. 32 KB Level 1 Cache (16 KB + 16 KB). Multi Media Extension MMX. Socket 7; Kernspannung 2.8V; ca. 4.5 Mio Transistoren.

2.1.4 Der Intel Pentium II

− − −

• − − − −

Einführung 1997; überarbeiteter Pentium Pro. 32 KB Level 1 Cache (16 KB + 16 KB). 512 KB Level 2 Cache:

• halber Prozessortakt, nicht auf Chip.

Slot 1. Model Klamath: 233 – 333 MHz; Front Side Bus: 66 MHz; Kernspannung 2.8V. Model Deschutes: 350 – 500 MHz; Front Side Bus: 100 MHz; Kernspannung 2.0V. Beide Modelle ca. 7,5 Mio Transistoren.

Page 3: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 11

2.1.5 Der Intel Pentium II Xeon

• Einführung 1998; Ablösung des Pentium Pro. • 400 & 450 MHz; Front Side Bus: 100 MHz, Slot 2. • 32 KB Level 1 Cache (16 KB + 16 KB). • 512, 1024 und 2048 KB Level 2 Cache:

− voller Prozessortakt, nicht auf Chip.

• Ca. 7.5 Mio Transistoren; Max. 8 CPUs pro Rechner

2.1.6 Intel Celeron Baureihe

• Einführung 1999 mit 32 KB L1 Cache (16 KB + 16 KB), ohne L2-Cache. • Kernspannung 2.0V. • Model Covington:

− 266, 300 MHz; FSB: 66 MHz, kein Level 2 Cache; Slot 1. −

Page 4: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 12

− − −

− −

− −

• Model Mendocino: − 300 – 533 MHz; 128 KB Level 2 Cache on Chip voller Prozessortakt.

bis 433 MHz als Slot 1 und Sockel 370 danach nur als Sockel 370.

• Model Coppermine: − 566 – 766 MHz; FSB: 66 MHz.

800 – 1100 MHz; FSB: 100 MHz. 128 KB Level 2 Cache on Chip voller Prozessortakt. Sockel 370 (FCPGA).

• Model Tualatin: − 1000 – 1400 MHz; FSB: 100 MHz.

256 KB Level 2 Cache on Chip voller Prozessortakt. Sockel 370 (FCPGA-2).

• Model Willamette (Celeron, 4/03): − 1700-2700 MHz; FSB: 400 MHz.

128 KB Level 2 Cache on Chip voller Prozessortakt. Sockel 478.

Page 5: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 13

2.1.7 Der Intel Pentium III • Einführung 1999. • Front Side Bus: 100 und 133 MHz. • 32 KB Level 1 Cache (16 KB + 16 KB). • Model Katmai:

− 450 – 600 MHz (B = 133 MHz FSB). 512 KB Level 2 Cache halber Prozessortakt. −

− − −

− − −

Slot 1; Kernspannung 2.0V; ca. 9.5 Mio Transistoren.

• Model Coppermine: − 500 – 1.1 GHz; (E bis 600MHz zur Unterscheidung vom Katmai).

256 KB Level2 Cache on Chip voller Prozessortakt. Slot 1 und FC-PGA; Kernspannung 1.65V. ca. 28 Mio Transistoren.

• Model Tualatin: − 1.13 – 1.4 GHz; Front Side Bus: 133 MHz.

256/512 KB Level2 Cache on Chip voller Prozessortakt. Erweiterungen: Seriennummer & SIMD (iSSE – Internet Streaming SIMD Extension). Zusätzlich auch Xeon Varianten auf Basis des PIII Kerns.

Page 6: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14

2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478. • Front Side Bus: 100 & 133 MHz (effektiv: 400 & 533 MHz). • Nicht geeignet für Mehrprozessorsysteme ⇒ Xeon Varianten. • Cache: 12 KB L1 für dekodierte µOps, 8 KB L1 für Daten. • Erweiterungen: zusätzliche SIMD Befehle (SSE 2). • Kernspannung ~1.5V. • Model Willamette:

− 256 KB Level 2 Cache on Chip voller Prozessortakt 1.3 – 2 GHz; Front Side Bus: 400 MHz. −

− − −

ca. 42 Mio Transistoren.

• Model Northwood: − 512 KB Level 2 Cache on Chip voller Prozessortakt

2 – 3,2 GHz; Front Side Bus: 400/533/800 MHz Hyper-Threading ab 2,4 GHz, ca. 55 Mio Transistoren.

Page 7: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 15

2.2. AMD Baureihen

2.2.1 K5 − Einführung 1995, 75 – 133 MHz.

Front Side Bus: 50, 60 und 66 MHz. − − − −

24 KB Level 1 Cache (16 KB + 8 KB). ca. 4.3 Mio T ransistoren. Sockel 7.

2.2.2 K6 − Einführung 1997.

166 – 300 MHz. − − − − − −

66 MHz FSB (300 MHz auch mit 100 MHz FSB). 64 KB Level 1 Cache (32 KB + 32 KB). mit MMX. ca. 8.8 Mio T ransistoren. Sockel 7.

Page 8: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 16

2.2.3 K6-2 • Einführung Mai 1998, 266 – 550 MHz. • 100 MHz FSB (bis 366 auch mit 66 MHz FSB). • 64 KB Level 1 Cache (32 KB + 32 KB). • Kernspannung 2.2V. ca. 9.3 Mio Transistoren. • MMX+ 3DNow! • Sockel 7;

2.2.4 K6-III • Einführung November 1998, 400 – 550 MHz. • Front Side Bus: 66, 100 MHz. • Level 1 Cache (32 KB, 32 KB). • 256 KB Level 2 Cache on Chip. • Cache auf Board wird als Level 3 Cache verwendet (bis 2 MB). • Sockel 7; ca. 21 Mio Transistoren.

Page 9: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 17

2.2.5 Athlon Classic • Einführung 1999. 500 – 1000 MHz. • Slot A; circa. 22 Mio Transistoren. • Front Side Bus: 200 MHz (2 * 100 MHz). • Enhanced 3DNow! (zusätzli. Befehle) & MMX. • 128 KB Level 1 Cache (64 KB + 64 KB). • 512 KB Level 2:

− bis 700 MHz 1/2 Prozessortakt, 750 – 850 MHz 2/5 Prozessortakt, −

− 900 – 1000 MHz 1/3 Prozessortakt.

2.2.6 Athlon Thunderbird • Einführung 2000. • 650 – 1400 MHz; Front Side Bus: 200 & 266 MHz. • 128 KB Level 1 Cache. • 256 KB Level 2 Cache on Chip. • Socket A + Slot A.

Page 10: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 18

2.2.7 Duron • Einführung 2000, 600 – 1300 MHz. • 200 MHz FSB (2 * 100 MHz). • 128 KB Level 1 Cache. • 64 KB Level 2 Cache on Chip. • Socket A; ca. 25 Mio T ransistoren. • Modelle: Spitfire (- 900 MHz); Morgan (- 1.3 GHz und iSSE).

2.2.8 Athlon XP • Einführung 2000, 1.33 – 2.133 GHz (Quantispeed 2800++). • 128 KB L1 Cache, 256 KB L2 Cache on Chip. • Front Side Bus: Dual 266 MHz • Socket A; ca. 37 Mio Transistoren. • Unterstützt 3DNow! und Intel SSE (nicht SSE 2). • Athlon MP Varianten für Multiprozessor-Systeme. • Modelle: Palomino & Thoroughbred (je nach Takfrequenz) .

Page 11: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 19

2.3. Architekturmerkmale am Beispiel des Pentium III

2.3.1 Überblick

Bus-Interface

L2-CacheSystem-Bus

L1-InstruktionenCache

L1-DatenCache

Dispatch / Exceute

- Ausführung von µBefehlen- 5 Ports vorhanden

Fetch & Decode Unit

-in Programm-Reihenfolge-dekodiert Befehle in µBefehle-Sprungvorhersage

Retirement Unit- beendet Befehle in

Programm-Reihenfolge- schreibt Ergebnisse in

Programm-Reihenfolge

Instruktionspool

Bus-Interface

L2-CacheSystem-BusSystem-Bus

L1-InstruktionenCache

L1-DatenCache

Dispatch / Exceute

- Ausführung von µBefehlen- 5 Ports vorhanden

Fetch & Decode Unit

-in Programm-Reihenfolge-dekodiert Befehle in µBefehle-Sprungvorhersage

Retirement Unit- beendet Befehle in

Programm-Reihenfolge- schreibt Ergebnisse in

Programm-Reihenfolge

Instruktionspool

Page 12: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 20

2.3.2 Fetch & Decode Unit • Lädt und dekodiert Intel Makrobefehle. • Diese werden in einfachere sogenannte µOps zerlegt. • Instruction-Prefetcher lädt immer 16-Byte alignierte Blöcke. • Eine Maschineninstruktion wird in eine oder mehrere µOps aufgeteilt:

− 1 µOperation: or eax, 0x4711 o Wert odern.

2 µOperationen: mov[es:0x10], eax o berechnen der Zieladresse. o speichern.

4 µOperationen: add [es:0x10], eax o laden von [es:0x10] o addieren o berechnen der Zieladresse o speichern

komplexe Instruktionen benötigen mehr als 4 µOperationen: enter, leave

Page 13: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 21

− −

• Pro Takt können bis zu 3 Maschineninstruktionen dekodiert werden: − insgesamt 3 Decodierer.

Decoder 0 kann Maschinenbefehle mit bis zu 4 µOps dekodieren. Decoder 1 & 2 können nur Maschinenbefehle mit 1 µOp dekodieren

⇒ Optimal Befehle im 4:1:1 Schema anordnen.

• µOperationen werden im Instruktionspool abgelegt.

2.3.3 Sprungvorhersage • Ziel: Instruktionspool sollte immer gefüllt sein

mov eax, a mov ebx, b cmp a,b jle @else // “to jump or not to jump … “ mov ecx, 0 jmp @end @else: mov ecx, 1 @end:

• Welcher Befehl soll als nächstes dekodiert werden: mov ecx,0 oder mov ecx,1?

Page 14: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 22

− −

• Lösung: Prozessor führt Code spekulativ aus. • Realisierung im Pentium II & III:

− Branch Target Buffer (BTB) mit 512 Einträgen mit folgendem Aufbau: o Adresse des Sprungbefehls, o Sprung ausgeführt: Ja oder Nein (4-Bit Zähler).

Jeder Sprung (ausgeführt oder nicht) wird vermerkt. Statische und dynamische Sprungvorhersage.

• Statische Sprungvorhersage: − Falls Sprung nicht in BTB bekannt ist.

Sprungentscheidung nach folgenden Regeln: o Bedingte Rückwärtssprünge: Sprung ausführen. o Bedingte Vorwärtssprünge: Sprung nicht ausführen. o Unbedingte Sprünge: Sprung ausführen.

Strafzyklen (Penalties): o Keine: es wird korrekt vorhergesagt, dass der Sprung nicht ausgeführt wird. o Ca. 5 Zyklen: es wird korrekt vorhergesagt, dass der Sprung ausgeführt wird. o Mind. 10 Zyklen (bis zu 15 Zyklen!): es wurde falsch vorhergesagt.

Page 15: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 23

− −

• Dynamische Sprungvorhersage (Beispiel):

00: mov eax, a01: mov ebx, b02: cmp eax, ebx03: jle 604: mov c,005: jmp 706: mov c,1

..

..

..03: letztes mal gesprungen......

Was machen?Springen

odernicht springen?

Springen!

Befehlsdekodierer Sprungvorhersage

00: mov eax, a01: mov ebx, b02: cmp eax, ebx03: jle 604: mov c,005: jmp 706: mov c,1

..

..

..03: letztes mal gesprungen......

Was machen?Springen

odernicht springen?

Springen!

Befehlsdekodierer Sprungvorhersage

• Strafzyklen (Penalties): − Keine: es wird korrekt vorhergesagt, dass der Sprung nicht ausgeführt wird.

1 Zyklus: es wird korrekt vorhergesagt, dass der Sprung ausgeführt wird. Mind. 9 Zyklen (bis zu 26 Zyklen!): es wurde falsch vorhergesagt.

Page 16: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 24

2.3.4 Dispatch & Execute Unit • Die fünf Ausführungseinheiten:

Reservierungsstatio

Load- Einheit

(16 - Einträge)

Store- Adress -

Calculation- Einheit

(12 - Einträge)

Store- Einheit

(12 - Einträge)

Integer Pi liFPU Pipeline

Adressberechnun(LEA)

MMX Pipeline

SIMD Pipeline

Integer Pi liMMX Pipeline

SIMD Pipeline

Reservierungsstation

Load-Einheit

(16 - Einträge)

Store-Address-

Calculation-Einheit (12 - Einträge)

Store-Einheit

(12 - Einträge)

Integer Pipeline

FPU Pipeline

Adressberechnung

(LEA)

MMX Pipeline

SIMD Pipeline

Integer Pipeline

MMX Pipeline

SIMD Pipeline

Port-0 Port-1

Port-2 Port-3 Port-4

Page 17: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 25

• In einem Takt können bis zu 5 µOps verteilt werden (nicht jeder Befehl kann auf jedem Port ausgeführt werden).

• Umsortieren unabhänger Instruktionen Ziel: maximale Parallelität. • Latenz und Durchsatz (ausgewählte Beispiele für Port-0):

Einheit Latenz (in Taktyklen) Durchsatz (pro Taktzyklus) Integer ALU, LEA & Shift 1 1 Integer Multiplikation 4 1 FADD 3 1FMUL 5 0,5FDIV (single precision/double/extended) 18/32/38 Keine Pipeline

2.3.5 Retirement Unit • Damit die Semantik erhalten bleibt, müssen die Ergebnisse der µOps in

Programmreihenfolge sichtbar werden. • Abzuschließende µOps werden im sogenannten Reorder Buffer abgelegt. • Bis zu 3 µOps können pro Takt abgeschlossen werden.

Page 18: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 26

2.4. Spezielle Prozessorinstruktionen

2.4.1 CPU bestimmen • Nicht jeder Befehl ist auf jeder CPU vorhanden. • CPUID Instruktion:

− Eingeführt bei den „späten“ 80486 CPUs, − − − −

Identifiziert den CPU-Typ, Version, Serial# ..., Befehl vorhanden, wenn in EFLAG Bit 21 gesetzt, sonst ungültige Instruktion. Auf Cyrix und NexGen Prozessoren muß der Befehl erst aktiviert werden. Eingabeparameter (Standard-Level) für CPUID immer in EAX:

EAX Bedeutung0 get maximum supported standard level and vendor ID string 1 get processor type/family/model/stepping and feature flags 2 get processor configuration descriptors 3 get processor serial number

• Ausführliche Beschreibung: http://www.sandpile.org/ia32/cpuid.htm

Page 19: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 27

• Beispiel: Identifikation der CPU xor eax,eax // 0 = get max. supported standard level & vendor ID string cpuid // only if instruction is supported please. Ergebnis: EAX-Eingabe Information

EAX: maximaler Parameter von CPUID (1: für Pentium; 2: ab Pentium Pro)

0

EBX: Genu EDX: ineI ECX: ntel

EBX: Auth EDX: enti ECX: cAMD

1 EAX[3:0] Stepping ID EAX[7:4] Model EAX[11:8] Family EAX[13:12] Processor type EAX[31:12] Reserved EBX Reserved ECX Reserved EDX Feature flags

Page 20: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 28

− − − − − − − − − − − − − − − − − −

• Die Feature-Flags (Standard-Level 1): −

XMMFXSRMMX

PNPSE

FGPATCMOVMCAPGEMTRRSEP

APICCX8MCEPAEMSRTSCPSEDEVMEFPU0

8

16

24XMMFXSRMMX

PNPSE

FGPATCMOVMCAPGEMTRRSEP

APICCX8MCEPAEMSRTSCPSEDEVMEFPU0

8

16

24

XMM: Streaming SIMD Erweiterung unterstützt MMX: MMX Erweiterungen unterstützt PSN: Prozessor Seriennummer vorhanden PSE36: Unterstützt paging mit 4MB Seiten und 36-Bit phys. Adr. CMOV: Condtional Move vorhanden MCA: Machine Check Architecture PGE: TLB nicht komplett löschen, beim Schreiben von CR3 MTRR: Memory Type Range Registers vorhanden SEP: SYSENTER und SYSEXIT vorhanden APIC: Advanced Programmable Interrupt Controller CX8: CMPXCHG8B Befehl vorhanden MCE: Machine Check Exception PAE: physikalische Adressen > 32 Bit unterstützt MSR: Model Spezifische Register vorhanden TSC: Time Stamp Counter vorhanden PSE: Prozessor unterstützt 4 MByte Kacheln DE: I/O Debug Erweiterungen VME: Virtual 80x86 Erweiterungen FPU: Intel 387 Fließkomma Einheit im Prozessor

Page 21: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 29

2.4.2 CMOV • Konditionaler Move Befehl:

− zur Vermeidung von Sprungbefehlen. − −

Anleihe bei der IA-64 Architektur (Itanium). Format der Bedingung wie bei bedingten Sprüngen.

; Beispiel eax = Max(eax, ebx) ; mit Sprung cmp eax, ebx jge cont ; springe wenn eax>=ebx mov eax, ebx cont: ; Jetzt mit cmove cmp eax, ebx cmovl eax, ebx ; führe Befehl aus, wenn eax<ebx

Page 22: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 30

2.4.3 Exkurs: Floating Point Unit • Ursprünglich als Koprozessor 80x87; On-Chip ab 80486, 1989. • Kurzer Überblick:

− 8 Fließkommaregister (80-Bit) stackbasiert und 7 Datentypen. Register können nur relativ zu TopOfStack (TOS) adressiert werden. −

Operationen werden grundsätzlich auf st(0) ausgeführt, wobei der zweite Operand jedes andere Datenregister oder eine Speicherstelle sein kann. Spezielle Register (jeweils 16-Bit):

o Status: Exception Flags; Kontrolle: Abschneiden, Rundeverfahren, ... o Tag: je 2-Bit pro Datenregister (00=valid; 01=zero; 10=special; 11=empty).

Beispiel: result = (1.9+0.9)*9.8

1.9

FLD 1.9

2.8

FADD 0.9

ST(0) ST(0) 2.8 ST(1)

ST(0)

FLD 9.8

9.8 27.44

FMULP FSTP result

ST(0) TOS

Page 23: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 31

2.4.4 MMX • Multi Media eXtension, 1996. • Die MMX Technologie besteht aus:

− 8 MMX Register (MM0-MM7) zu je 64-Bit. 4 MMX Datentypen: −

08162432404856

o Packed Bytes (8x8 Bits): 0163248

o Packed Word (4x16 Bits): 032

o Packed Double Word (2x32 Bits): 0

o QuadWord (1x64 Bits):

57 MMX Befehle: Basierend auf dem SIMD Prinzip nützlich für Multimedia (z.B. mehrere Pixel parallel Aufhellen)

• Gewinn nur bei angepassten Anwendungen. • FPU kann nicht parallel verwendet werden.

Page 24: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 32

− −

• MMX Befehle „überdecken“ die Fließkommaregister: − Jeder MMX-Befehl setzt das FP-Tag auf „valid“ = 00.

Die obersten 16-Bit des FP-Registers werden auf „1“ gesetzt. EMMS gibt Register frei (FP-Tag = 11 „empty“).

079FP-Tag 63

063111...1111...1111...1111...1111...1111...1111...1111...1

0 0

MMX0

MMX7

FPU-Register

MMX-Register

TOS

• Umschalten der Register:

− Beliebiger MMX-Befehl aktiviert MMX-Register. Der MMX-Befehl EMMS reaktiviert die FPU-Register. −

− Jede Umschaltung löscht den Inhalt sämtlicher Register teuer.

Page 25: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 33

• Eine kleine Übersicht der MMX Befehle: − Addieren/Subtrahieren: (anwendbar auf Byte, Word, Dword & Qword)

08162432404856 12 123 37 48 19 230 3 95

45 84 72 38 95 16 23 11

57 207 109 86 114 246 26 106

+ + + + + + + +

PADDB MM0, MM1

MM0

MM1

MM0

Addieren/Subtrahieren mit Sättigung (Saturation): o Kein Wraparound bei Addition und Subtraktion, o Anwendbar auf signed/unsigned Byte, Word, Dword, o PADDUSB (Überlauf=255); PADDSB (Überlauf=127/-128).

0 81624324048 56

120 123 37 48 19 230 3 95

210 84 255 192 100 26 23 11

207 240 119 26 106

+ + + + + + + +

PADDUSB MM0, MM1

MM0

MM1

MM0

255 255 255

Page 26: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 34

Multiplikation mit nachfolgender Addition (z.B. für Vektor-Kreuzprodukt): 0 81624324048 56

12 37 19 95

45 72 95 11

3204 2850

* * * *

PMADDWD MM0, MM1

MM0

MM1

MM0

+ +

Konvertierung von Dword nach Word mit Sättigung: (anwendbar auf signed/unsigned Dword)

1000121 -16123

2232 -32768 32767 -16123PACKSSDW MM0, MM1

MM0

MM0

2232 -343232MM1

Page 27: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 35

Vergleichsoperationen (z.B. Maske berechnen): o Anwendbar auf Byte, Word und Dword, o „=“ und „>“ (basierend auf signed).

08162432404856

120 123 37 48 19 230 3 95

210 123 37 192 19 230 3 11

0 -1 -1 0 -1 -1 -1 0

= = = = = = = =

PCMPEQB MM0, MM1

MM0

MM1

MM0

o Ergebnis: 0: falsch –1: richtig

Shiftoperationen (z.B. Chroma Keying): o Anwendbar auf Word, DWord und Qword, o Link und Rechts (arithmetisch oder logisch).

1011000010110100

<<3 <<3 <<3 <<3PSLLW MM0, 3

MM0

MM0

0001100001100010 1001101001000010 0000000000000001

1000010110100000 1100001100010000 1101001000010000 0000000000001000

Page 28: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 36

− −

• Ein Beispiel Chroma-Keying:

ErgebnisHintergrundBluebox

=+

Annahme Bild 16 Bit Farbtiefe (HiColor). Berechnung der Maske von „Bluebox“.

=

PCMPEQW MM1, MM0

= = =MM0 Bluebox[0] Bluebox[1] Bluebox[2] Bluebox[3]

MM1 blue blue blue blue

MM1 0xFFFF 0x0000 0x0000 0xFFFF

Ergebnis:

• blauer Pixel: 0xFFFF (entspricht weiß) sonst 0x0000 (entspricht schwarz)

Page 29: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 37

ausschneiden der Bilder:

and

PANDN MM1, MM0

and and andMM0 Bluebox[0] Bluebox[1] Bluebox[2] Bluebox[3]

MM1 0xFFFF 0xFFFF 0xFFFF 0xFFFF

MM1 0x0000 Bluebox[1] Bluebox[2] 0x0000

Eigentlich schwarz

and

PAND MM2, MM1

and and andMM2 Hintergrund Hintergrund Hintergrund Hintergrund

MM1 0xFFFF 0x0000 0x0000 0xFFFF

MM2 Hintergrund 0x0000 0x0000 Hintergrund

Mischen der Bilder:

or

MM2 Hintergrund 0x0000 0x0000 Hintergrund

MM1 0x0000 Bluebox[1] Bluebox[2] 0x0000

or or or

PAND MM2, MM1

MM1 Hintergrund Bluebox[1] Bluebox[2] Hintergrund

Page 30: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 38

− Meßergebnisse in Taktzyklen: Athlon 1 GHz

050000

100000150000200000250000300000350000400000450000

64x64 (o.MMX)

64x64(MMX)

128x128(o. MMX)

128x128(MMX)

16-Bit32-Bit

Page 31: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 39

Code-Beispiel (für 32-Bit Farbtiefe):

void chroma32(int bluebox, int background, int image, int imSize, int color) { _asm { movd mm0, color // load bluebox color movq mm3, mm0 // store in mm3 psllq mm3, 32 // shift to upper word por mm3, mm0 // blue box color for lower word esi, mov bluebox // ptr. to source buffer edi, mov background // ptr. to background buffer edx, mov image // ptr. to result buffer o e ze m v bx, imSi // image size in bytes xor eax, eax // clear eax theLoop: movq mm1, mm3 // load mask movq mm0, [esi+eax] // load two source image pixels pcmpeqd mm1, mm0 // calc mask movq mm2, [edi+eax] // load two background pixels pand mm2, mm1 // cut background pandn mm1, mm0 // cut image por mm1, mm2 // mix movq [edx+eax], mm1 // store two pixels in result buffer add eax, 8 // next two pixels cmp eax, ebx // end reached? jne theLoop // if not loop again emms }}

Page 32: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 40

2.4.5 3DNow! • Einführung mit AMD K6-2 CPU, 1998. • Weiterentwicklung von MMX durch AMD:

− 3DNow! unterstützt auch Gleitkomma (wichtig für 3D-Spiele). MMX Register werden weiter verwendet. −

− −

Insgesamt 21 zusätzliche SIMD-Befehle. FEMMS: schnelle Version von EMMS (F=Fast).

• Neuer Datentyp für MMX Register: packed single precision floating point

32-Bit Fließkomma32-Bit Fließkomma 32-Bit Fließkomma32-Bit Fließkomma

32

• Prefetching: − Befehle: PREFETCH adr

Idee: Multimedia-Anwendungen besitzen reguläre Speicherzugriffsmuster Daten voraussschauend Laden.

Cacheline, welche die Adresse adr enthält in den Level-1 Cache laden (es werden noch keine Access-Bits gesetzt). Befehl wird nicht ausgeführt, wenn adr ungültig ist (z.B. Segment nicht vorhanden; Seite nicht vorhanden...).

Page 33: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 41

Code-Beispiel: 3D Vektor-Addition typedef struct _D3DVECTOR { float x,y,z; }D3DVECTOR; void add_vect3Dnow(D3DVECTOR *r, const D3DVECTOR *a, const D3DVECTOR *b) { _asm { mov eax,a // addr of a mov edx,b // addr of b movq mm0,[eax] // load x,y of a movd mm1,[eax+8] // load z of a mov eax,r // load addr of r movd mm2,[edx+8] // load z of b pfadd mm0,[edx] // a.x+b.x and a.y+b.y pfadd mm1,mm2 // a.z+b.z movq [eax],mm0 // store r.x & r.y movd [eax+8],mm1 // store r.z femms }}

• Enhanced 3DNow!: − 24 zusätzliche Befehle. − −

Ab Athlon Classic, 2000. Memory Streaming: direkter Speicherzugriff (ohne Write-Allocate im Cache).

Page 34: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 42

• Vorteile: − Einfacher Datenaustausch zw. MMX und 3DNow! (kein Umschalten nötig).

Schiebebefehle und Bitoperationen von MMX Registern können ebenfalls verwendet werden.

• Nachteil: FPU kann nicht parallel verwendet werden. • Gewinn auch hier nur bei angepassten Anwendungen.

2.4.6 ISSE • ISSE = Internet Streaming SIMD Extension. • Eingeführt mit Pentium III, 1999. • MMX weiterhin vorhanden. • 70 neue Befehle – Kategorien:

− SIMD-Floating Point, − −

New Media Instructions, Streaming Memory Instructions.

• SSE 2: Eingeführt 2000, mit Pentium 4 (144 zusätzliche Befehle).

Page 35: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 43

− −

• Neue Register: − 8 separate 128-Bit Register XMM0-XMM7 (für 4 Float oder 2 Double Werte):

032649632-Bit Fließkomma32-Bit Fließkomma32-Bit Fließkomma32-Bit Fließkomma

Vorteil: Parallele Verwendung von Streaming SIMD und MMX oder FPU mögl. Nachteil: Betriebssysteme müssen angepasst werden, da SIMD Register (128-Bit) bei Taskwechsel gesichert werden müssen.

• Ausgewählte Befehle: ISSE & 3DNow!

3DNow! ISSE ErklärungPF2ID CVTPS2PI packed float nach packed integer PFCMPEQ CMPEQPS equal MMx=MMy PFCMPGE CMPNLTPS greater than or equal MMx>=MMy PFCMPGT CMPNLEPS greater than MMx>MMy PFMAX MAXPS MaximumPFMIN MINPS MinimumPFMUL MULPS MultiplikationPFSUB SUBPS SubtraktionPI2FD CVTPI2PS Integer nach float

Page 36: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 44

Codebeispiele: void add(float *a, float *b, float *c, int bytes) { // c[x] = a[x]+b[x];

_asm { mov eax, a mov ebx, b mov edx, c xor ecx, ecx label: fld [dword ptr eax+ecx] fadd [dword ptr ebx+ecx] fstp [dword ptr edx+ecx] add ecx, 4 // der nächste Wert cmp ecx, bytes jne label }}

void addISSE(float *a, float *b, float *c, int bytes) { _asm{ mov eax, a mov ebx, b mov edx, c xor ecx, ecx label: movaps xmm0, [eax+ecx] addps xmm0, [ebx+ecx] movaps [eax+ecx], xmm0 add ecx, 16 // die nächsten 4 Werte cmp ecx, bytes jne label }}

Page 37: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P.

void add3Dnow(float *a, float *b, float *c, int bytes) { _asm{ mov eax, a mov ebx, b mov edx, c xor ecx, ecx label: movq mm0, [eax+ecx] pfadd mm0, [ebx+ecx] movq [edx+ecx], mm0 add ecx, 8 // die nächsten 2 Werte cmp ecx, bytes jne label femms }}

• Messergebnisse:

Schulthess & al. 45

0

1000

2000

3000

4000

5000

6000

AMD K6II ohne3DNow!

AMD K6II mit 3DNow! PIII ohne ISSE PIII mit ISSE

Taktzyklen

Page 38: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 46

Streaming Store • Bei Intel ab Pentium III und bei AMD ab Athlon. • Speicherbefehle, die am Cache vorbei in den Speicher schreiben:

− MOVNTQ: 64-Bits direkt in Speicher kopieren (Cache auslassen). − −

MASKMOVQ: wie MOVNTQ, aber mit Byte-Maske. MOVNTPS: wie MOVNTQ, aber 128-Bit.

• Eigenschaften: − Abgeschwächte Konsistenz evt. andere Reihenfolge von Schreiboperationen.

Write Combining Strategie wird angewandt: • Bündeln von aufeinanderfolgenden Schreibzugriffe auf die selbe Cache-Line.

Aufeinanderfolgende Schreibzugriffe an die selbe Speicherposition werden durch die letzte Schreiboperation ersetzt.

Explizites Spülen der WC-Puffer durch SFENCE Instruktion (Store Fence).

• Vorteile: • Steigerung des Durchsatzes bei Schreibzugriffen.

L1 und L2 Cache werden weniger gespült.

• Nachteil: Schwächeres Konsistenzmodell SFENCE explizit nötig!

Page 39: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 47

• Beispiel: Initialisierung eines Speicherblockes: − Standardansatz:

void clearStd(int adr, int bytes) { _asm { xor ebx, ebx // clear ebx

mov eax, adr // load address xor ecx, ecx // clear counter mov edx, bytes // bytes

label: mov [eax+ecx],ebx // write ’0’ add ecx, 4 // next location cmp ecx, edx // done? jne label // if not, loop } } − STOS (Store String – Bytefolge schreiben):

void clearSTOS(int addr, int bytes) { bytes=bytes>>2; // number of 32-Bit accesses _asm { mov edi,addr // destination address xor eax,eax // byte to write 0 mov ecx,bytes // number of iterations cld // ascending addresses rep stos dword ptr es:[edi] // destination location } }

Page 40: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess &

Streaming: − void clearStreaming(int addr, int bytes) { _asm{ pxor mm0, mm0 // clear mm0 mov eax, addr // destination address xor ecx, ecx // init counter mov edx, bytes // number of bytes label: movntq [eax+ecx],mm0 // write 8 Byte add ecx, 8 // next 8 Byte cmp ecx, edx // end? jne label // if not, loop again sfence // sync. emms // free MMX registers } }

al. 48

0200400600800

Standard STOS Streaming

MB/s• Messergebnisse

Pentium III 800EB:

Page 41: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 49

Prefetching • Speicherzugriff langsam Daten explizit vorab in Cache laden. • Befehle (erzeugen keine Exceptions oder Seitenfehler):

− PREFETCHNTA address: Cacheline address nur in Level 1 Cache laden. − − −

PREFETCHT0 address: Cacheline address in alle Cache-Level laden. PREFETCHT1 address: Cacheline address in Cache-Level 2+ laden. PREFETCHT2 address: Cacheline address nur in Cach- Level 3 laden.

• Beispiel: Kopieren eines Speicherblockes: − Nächste Daten in L1-Cache laden (PREFETCHNTA),

Kopieren: Lesen mit MOVAPS, Schreiben mit MOVNTPS (jeweils 16-Byte).

2.4.7 Seriennummer • In CPU eingebaut eindeutige Identifikation • Gedacht zum Beispiel für Online-Shopping. • Über BIOS oder Software deaktivierbar heimlich auslesbar (c’t 5/99)! • Wegen Proteste mit Pentium 4 wieder abgeschafft.

Page 42: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 50

2.4.8 Test- und Debugwerkzeuge • Register:

LEN3

R/W3

LEN2

R/W2

LEN1

R/W1

LEN0

R/W0

0 0 GD 0 0

Res

GELEG3L3G2L2

L1G0L0

G1

0

Reserviert (1) BTBSBD 0 1 1 1 1 1 1 1 1 B2B1B0

B3

DR7

DR6

Reserviert DR5

Reserviert DR4

DR3

DR2

DR1

Breakpoint Lineare Adresse 0 DR0

Breakpoint Lineare Adresse 1

Breakpoint Lineare Adresse 2

Breakpoint Lineare Adresse 3

Page 43: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 51

− − − −

• Überwachung des Programmablaufs: − Hardware-Haltepunkte (Debug-Exceptions, INT 1), wenn:

o Lese/Schreibzugriff auf Byte, Word, Dword. o Lese/Schreibzugriff auf Byte, Word, Dword im I/O-Adreßraum. o Modifikation der Debug Kontroll Register. o Bei jeder Instruktion im Single Step Mode.

Software-Haltepunkt durch Breakpoint-Exception (INT 3).

• Das Debug Kontroll Register DR7: − GD: 1: Debug-Exception bei Zugriff auf die Register DR0-DR7

(Bit wird bei einer Debug-Exception automatisch gelöscht). LE, GE: Sollten immer auf den Wert 1 gesetzt werden (historische Register).

• Das Debug Status Register DR6: − B0..B3: Bedingung für BreakpointX ist erfüllt, auch wenn Lx & Gx auf 0 gesetzt sind.

BD: Es wurde versucht die Debug Register zu modifizieren. BS: Breakpoint durch Single Step Mode. BT: Task Switch zu einer Task mit gesetzten T-Bit im TSS-Register. Bem.: Der Exception Handler sollte jedes Mal das Status Register löschen.

Page 44: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 52

• Ablauf (hier am Beispiel von DR1): − Lineare Adresse in DR1 eintragen.

LEN1 (Anzahl der zu überwachenden Bytes): o 00: 1 Byte o 01: 2 Byte o 10: undefiniert o 11: 4 Byte

RW1 (Breakpoint-Bedingung): o 00: Ausführung (LEN1 immer 00!) o 01: Adresse wird modifiziert o 10: I/O Zugriff (DE Flag in CR4 setzen!) o 11: Adresse wird gelesen oder modifiziert (Ausführung der Adresse erzeugt

keine Unterbrechung). L1: (enable local Breakpoint):

o Breakpoint-Bedingung gilt nur für die aktuelle Task. o Bit wird bei Task-Wechsel automatisch gelöscht.

G1: (enable global Breakpoint): o Breakpoint-Bedingung gilt für alle Tasks.

Page 45: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 53

• Beispiel: − Lese/Schreib-Breakpoint auf Adressbereich 0x12000-0x12003

mov eax, 0x12000 mov dr0, eax mov eax, dr7 or eax, 0xF0303 // Bits: L0=1, G0=1, LE=1, GE=1, LEN=11 (4-Byte) // RW0=11 (Breakpoint-Bedingung) mov dr7, eax

− −

Exception 1 wird ausgelöst, wenn auf 0x12000-0x12003 zugegriffen wird. Exception wird ausgelöst, bevor der Befehl ausgeführt wird ⇒ Nach Beendigung des Exceptionhandlers ist das Resume Flag gesetzt (RF).

• Ablauf der Exception − Der auszuführende Code:

0x7FFFD add eax,2 0x80000

EIP

Exception 1 wird ausgelöst: •

mov ds:[0x12000],eax0x80006 xor eax,eax

ResumeFlag gesetzt im Stackframe von der CPU.

0x00080000 (EIP)

EFLAGS| ResumeFlag

ESP

...

0x00000010 (CS) Exception Handler wird abgearbeitet.

Page 46: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 54

Exception Handler wird beendet (ResumeFlag ist nun gesetzt):

0x90000 .... 0x900A0 IRET

mov Instruktion wird nun abgearbeitet:

0x7FFFD add eax,2 0x80000

EIP ResumeFlag gesetzt, Breakpoint wird unterdrückt

ResumeFlag wird automatisch gelöscht:

mov ds:[0x12000],eax0x80006 xor eax,eax

0x7FFFD add eax,2 0x80000 mov ds:[0x12000],eax0x80006 xor eax,eax

EIP

Page 47: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 55

2.4.9 Model Specific Registers • Modell-Spezifische Register (MSR):

− große Unterschiede zwischen Intel und AMD. − −

gleiche Register an unterschiedl. Offsets. Nachfolgend am Beispiel des Pentium III.

• Zugriff auf MSR im (Ring-0) mit den Instruktionen RDMSR & WRMSR (ECX: Eingabe Nummer des zu lesenden/schreibenden Registers)

mov ecx, 0x10 // 0x10 = 64-Bit TimeStampCounter rdmsr // Ergebnis in Registern EDX:EAX xor edx,edx xor eax,eax mov ecx, 0xC1 // Performance Counter0 (löschen) wrmsr

• Auslesen einiger Daten im Ring-3 möglich: − RDTSC: TimeStampCounter auslesen. − RDPMC: Performance Counter (Nummer in ECX) lesen.

Page 48: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 56

2.4.10 Performance Messungen • Üblicher Ansatz: 1) Stoppuhr an. 2) Programm starten. 3) Stoppuhr aus. • Liefert keine detaillierten Aussagen über:

− Effektivität der Sprungvorhersage, Cache Misses; TLB Misses, ... −

• Messungen mithilfe von MSRs liefern detaillierte Daten (P6 CPUs): − Zwei programmierbare 40-Bit Zähler: PerfCtr0 (0xC1) und PerfCtr1 (0xC2).

Zwei Event-Selektoren: PerfEvtSel0 (0x185) und PerfEvtSel1 (0x186): können zwei verschiedene Ereignisse unabhängig voneinander zählen.

PerfCtr0EventLogik

PerfEvtSel0

PerfCtr1PerfEvtSel1

Page 49: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 57

2.4.11 Messen mit einem Pentium P6 Prozessor (nicht Pentium IV) • Performance Event Selectors (PerfEvtSel):

Event

8 0

Unit MaskUSR

OSEPC

INT

EN

INV

Counter Mask

1624

Unit Mask & Event: definieren zusammen das zu überwachende Ereignis. − − − − −

− − − −

USR (User Mode) gesetzt: Event nur in Ring 1-3 zählen. OS (Operating System) gesetzt: Event nur im Ring-0 berücksichtigen. E (Edge Detect) 0: Dauer eines Events; 1: #Events; PC (PIN Control): 0: Überlauf Pin PM0/PM1 für einen Takt setzten. 1: Inkrementieren Pin PM0/PM1 für einen Takt setzten. INT gesetzt: Zählerüberlauf Exception über den lokalen APIC erzeugen. EN: (Enable Counters) Zähler aktivieren/deakt. (nur in PerfEvtSel0 vorhanden). INV: invertieren des Counter Mask Ergebnisses Counter Mask: INV=0: Event nur zählen, wenn pro Takt mind. Counter Mask Events auftreten. INV=1: Event nur zählen wenn pro Takt weniger als Counter Mask Events auftreten.

Page 50: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 58

• Ausgewählte Ereignisse:

Event UnitMask Name Beschreibung 0x81 0x00 IFU_IFETCH_MISS Number of instruction fetch misses. All instruction fetches

that do not hit the IFU (i.e., that produce memory requests). 0x85 0x00 ITLB_MISS Number of ITLB misses. 0xC7 0x00 CYCLES_INT_PENDING_AND_MASKED Number of processor cycles for which interrupts are disabled

and interrupts are pending. 0xC5 0x00 BR_MISS_PRED_RETIRED Number of mispredicted branches retired. 0xC0 0x00 INST_RETIRED Number of instructions retired. 0xC2 0x00 UOPS_RETIRED Number of UOPs retired. 0xD0 0x00 INST_DECODED Number of instructions decoded. 0x12 0x00 MUL Number of multiplies (integer and FPU).

• Messungen beim Start von Plurix: − IFU_IFETCH_MISS: 85.459 − − − −

ITLB_MISS: 345.739 MUL: 3.184.744 INST_DECODED: 1.621.438.040 INST_RETIRED: 1.603.020.143

INST_DECODED - INST_RETIRED = 18.417.897 (umsonst dekodiert).

Page 51: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 59

2.5. Caches im Pentium III

2.5.1 Caching Strategien • Uncachable:

− Lese/Schreibzugriffe werden nicht gecached. − − −

− − −

Schreiboperationen werden nicht verzögert. Nur sinnvoll für Memory Mapped Geräte. Sehr langsam jeder Zugriff über Bus.

• Write Combining: − Lese/Schreibzugriffe werden nicht gecached.

Schreiboperationen werden in CPU-internen Puffern (4 Stück bei Pentium III) verzögert und unter Umständen zusammengefasst (Umsortierung ist möglich). Weniger Busverkehr, aber evt. explizites Spülen (SFENCE) erforderlich! Cache Kohärenzprotokoll (MESI) wird nicht benutzt. Geeignet zum Beispiel für Video-Framebuffer: hauptsächlich wird geschrieben (Lesen selten) und die Schreibreihenfolge ist unkritisch.

Page 52: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 60

− − − −

− − − −

• Write-Through: − Lese/Schreibzugriffe werden gecached.

Read Miss: Cache-Line wird gefüllt. Write Miss: Cache-Line wird nicht gefüllt. Durchschreiben in Hauptspeicher. Write Hit: Schreiben in Cache-Line und Durchschreiben in Hauptspeicher. Beispielsweise sinnvoll für Linear Frame Buffer.

• Write-Back: − Lese/Schreibzugriffe werden gecached.

Read Miss: Cache-Line wird gefüllt, dann wird aus dem Cache gelesen. Write Miss: Cache-Line wird gefüllt, dann wird in den Cache geschrieben. Write Hit: Schreiben nur in Cache-Line. Write-Back: bei Bedarf wird Cache-Line als Burst-Transaktion in Hauptspeicher zurückgeschrieben. Cache Strategie mit der besten Performance!

• Write-Protected: − Read Miss: Cache-Line wird gefüllt, dann wird aus dem Cache gelesen.

Schreibzugriffe gehen direkt auf den Bus und spülen die entsprechende Cache-Line auf allen Prozessoren. Interessant für Code-Segmente.

Page 53: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 61

2.5.2 Konfigurieren des L2-Caches • vor Pentium Pro / Athlon über den Chipsatz:

− Prozessor signalisiert Caching für diese Adresse erwünscht bzw. nicht erwünscht. − Bzw. Chipsatz signalisiert, diese Adresse nicht cachen.

• Ab Pentium Pro (P6): über das MSR Register (0x11E): Bits Bezeichnung

63:26 reserviert 25 Cache bus fraction (read only) 24 reserviert 23 L2 Hardware Disable (read only) 22:20 L2 Physical Address Range support (read only)

111:64GB 110:32GB 101:16GB 100: 8 GB 011:4 GB 010:2GB 001:1 GB 000:512 MB reserviert 18 Cache State error checking enable (read/write) 17:13 Cache size per bank (read/write)

00001:256 Kbytes 00010:512 Kbytes 00100:1024 Kbytes 01000:2048 Kbytes 10000:4096 Kbytes 12:11 Number of L2 banks (read only) 10:9 L2 Associativity (read only) 00: Direct Mapped 01: 2 Way 01: 4 Way 11: reserviert 8 L2 Enabled (read/write) 7 CRTN Parity Check Enable (read/write) 6 Address Parity Check Enable (read/write) 5 ECC Check Enable (read/write) 4:1 L2 Cache Latency (read/write) 0 L2 Configured (read/write)

Page 54: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 62

2.5.3 Konfiguration des L1-Caches • Es gilt: Deaktivierung des L1-Caches ⇒ L2-Cache ebenfalls deaktiviert. • Steuerung über das CR0 Register:

− CacheDisabled (Bit 30): 0: Cache(s) aktiviert; 1: Cache(s) deaktiviert; −

− −

NotWriteBack (Bit 29): 0: Write-Back Strategie; 1: Write-Through Strategie;

• Vorsicht beim Abschalten des Caches während laufendem Betrieb: − wenn Bit 30 im laufenden Betrieb gesetzt wird:

Cacheinhalt bleibt erhalten, Cache wird nicht mehr neu gefüllt.

Caching deaktivieren: − Bit30 = 1; Bit 29=1;

WBINVD: Zurückschreiben der modifizierten Cache-Lines und nachfolgender Invalidierung.

Page 55: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al.

2.5.4 C Konfiguration auf Seitenebene • Adressierung im Protected Mode (Wiederholung):

SegmentselektoGDTR

Segment-Basis

Lineare Adresse

+

CR3

Page Directory

iptor- lle

D ptor-

lD tor- le s le

Page

Globale Deskriptor-

tabelle +

Virtuelle 32 Bit Adresse

Physikalische Adresse !

Deskresk itabetabeeskrip

tabelPage

Tabler

63

r

ache

Page 56: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 64

− − −

Cache Konfiguration (bei Paging): • CR0:

CR4 PG E

CR0 N W

C D

Page Directory / Table P W T

P C D

G

CD: Cache Disable (falls CD=0 WBINVD). NW: Not Write-Through (Standard-Schreibverhalten).

• CR3: − CR3

P W T

P C D

PCD: Page-level Cache Disable PWT: Page-level Write Through Definieren Caching nur für Page Directory. PCD & PWT werden ignoriert, falls CD=1 in CR0.

• Page Directory / Table: − PCD & PWT werden ignoriert, falls CD=1 in CR0.

G: Globale enable (ab Pentium 6) nur wirksam, wenn PGE in CR4 gesetzt!

• CR4: − PGE: Page Global Enable (ab Pentium 6).

Seiten mit G-Bit als global markierbar werden bei Taskwechsel nicht aus TLB gespült.

Page 57: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 65

2.5.5 Verfeinerung mit Memory Type Range Registern • Memory Type Range Register (MTRR):

− Auch auf Athlon verfügbar (kompatibel).

Physikalischer Speicher

4 GB

max. 8 variablen MTTRs

fixed MTRRs

1 MB

Bereits durch BIOS initialisiert. − − − −

− −

− − − − −

96 Speichertypen für phys. Speicherbereiche. 88 feste Bereiche (0-1MB). 8 variable Bereiche.

• Zugriff über MSR Register: − 11 fixed MTRR Register.

8 variable MTRR Register. 1 Default Register.

• Speichertypen (8-Bit): − 0: Uncachable

1: Write-Combining default MTRR 4: Write-Through

5: Write-Protected 6: Write Back (2,3,7..255: reserviert)

Page 58: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 66

− −

• Default Speichertyp über MTRRdefType Register: −

64

FE E

type

0

7

1011

reserviert

reserviert

MSR Register 0x2FF (64-Bit). E (MTRRs Enable):

0: alle MTRRs deaktiviert phys. Adressraum nicht gecashed.

1: MTRRs aktiviert FE (Fixed MTRRs Enabled):

0: fixed MTTRs deaktiviert Bereich kann durch var. MTTRs gemappt werden.

1: fixed MTTRs aktiviert

• Fixed MTRR Registers: −

4 GB

256 KB

E

512 KB

0

0x7FFFF

0xBFFFF

1 MB

256 KB

MSR Register ab 0x250 (je 64-Bit). MTRRfix64K_00000: 8x64KB (512-Kbyte). MTRRfix16K_80000 & MTRRfix16K_A0000: 2x128KB, unterteilt in 16KB Unterbereiche. MTRRfix4K_xxxxx (8 Stück): 8x32KB, unterteilt in 4KB Unterbereiche.

Page 59: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 67

− −

• Variable MTRR Registers: − MSR Register ab 0x200 (je 64-Bit).

Variable Bereiche dürfen sich nicht überlappen. MTRRphysBase: definiert die Basisadresse und Speichertyp

64 35 12 07

reserviert Type PhysBase

MTRRphysMask: o enthält Maske (verwendet zur Bestimmung des Bereichs). o V-Bit (Valid): aktivieren und deaktivieren von Register-Paar.

64

reserviert PhysMask

35 12 010

reserviert V

Adreßberechnung: o PhysBase und Maske 4KB aligniert untere 12-Bits werden abgeschnitten o Maske so wählen, daß gilt:

Adressbereich AND PhysMask = PhysBase AND PhysMask

Page 60: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 68

2.5.6 Page Attribute Table (PAT) • Erweiterung des Seitentabellen-Formats (ab Pentium 6). • Neue Caching-Strategien (Write-Protected & Write-Combining) auch auf

Seitenebene wählbar. • MTRRs:

− Definieren Speichertypen für physikalische Adreßbereiche. Haben besondere Anforderungen an Länge und Alignment von Bereichen. −

− −

Prädestiniert für statische Bereiche, aber weniger geeignet für dynamische Ranges. Letztere sind für Anwendungen relevant, die dynamisch Speicher anfordern

Betriebssystem erhält mit PAT die notwendige Flexibilität

• Falls PAT unterstützt wird, so ist PAT immer aktiv (nicht abschaltbar). • PAT ist in MSR bei 0x277 untergebracht:

− PAx (3-Bit) definiert je einen Speichertyp.

0

PA1 PA0

reserviert

27

PA7 PA6

63

. . .

Page 61: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 69

− −

• Zugriff auf PAT in Page Table Einträgen: − durch 3-Bits: PATi, PCD, PWT

PATi (PAT index Bit-7) bei 4KB Seiten (zuvor reserviert). Ermöglicht Zugriff auf weitere Caching Strategien (z.B. Write-Combining).

• PAT-Indizes und Speichertypen nach Reset:

PATi PCD

PWT PAT Entry Memory Type (at Reset)

0 0 0 0 WB0 0 1 1 WT0 1 0 2 UC0 1 1 3 UC1 0 0 4 WB1 0 1 5 WT1 1 0 6 UC1 1 1 7 UC

• Rückwärtskompatibilität: − PAT immer aktiv und nicht abschaltbar. − − −

PATi=0 nur PCD und PWT bestimmen PAT Eintrag. Hiermit sind nur die ersten vier Einträge der PAT ansprechbar. Deren Speichertypen entsprechen genau der traditionellen PCD & PWT Semantik.

Page 62: 2.1.1 Der Intel P54C -  · Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 14 2.1.8 Der Intel Pentium 4 • Einführung 2000, zunächst Sockel 423 später Sockel 478.

Systemprogrammierung II, Winter 2003/04, P. Schulthess & al. 70

2.5.7 Vorrang der Cache Konfigurationen • Bei Überlappung von MTRR und Page-Level Caching gilt immer das

strengere Konsistenzmodell. • Ausgewählte Beispiele:

PAT Speichertyp MTRR Speichertyp Effektiver Speichertyp

UC WB,WT UC_PAGEWB WT WTWB WP WPWB UC UC_MTRR

UC_PAGE: das UC Attribut resultiert aus einer Seitentabelle und die CPUs müssen ihre Caches durch Cache-Snooping abgleichen, da die Daten evt. gecacht sind. UC_MTRR: das UC Attribut resultiert aus MTRRs CPUs kein Cache-Snopping notwendig, da die Daten niemals gecacht wurden.

• Achtung: wenn MTRRs durch E-Bit (in MTRRDefType Register) abge-schaltet werden, so ist der gesamte Speicher vom Typ UC!