Seminar Moderne Prozessorarchitekturen

Transcription

Seminar Moderne Prozessorarchitekturen
Seminar
Moderne Prozessorarchitekturen
AG Systemsoftware und Verteilte Systeme
Prof. Dr. P. Sturm
Universität Trier
Juni 1999
Inhaltsverzeichnis
K APITEL 1
Intel Pentium und IA-64 Prozessor-Familien 1
Eric Johannes Martin Weber
K APITEL 2
Geschichtliches
1
Das Konzept der Segmente
2
Die Seitenverwaltung (paging)
4
Sicherheitsmechanismen
5
Spekulative Ausführung (Out-Of-Order Processing)
6
Die MMX-Technologie.
7
Das Enhanced SIMD Streaming
8
Seriennummer gefällig ?
9
Die Intel Architektur 64 (IA-64) am Beispiel des ‚Itanium‘
11
Literaturverweise
12
AMD K6/K7-Familie
13
Thomas Heinen
K APITEL 3
Einführung: Die Geschichte der Firma AMD
13
“Historische” Prozessoren: AMD K5, K6, K6-2 und K6-III
14
3DNow!
15
Der Neue: AMD Athlon (a.k.a. K7)
16
Ausblick auf den AMD K8 (“Sledgehammer”)
20
Zusammenfassung
21
Quellenverzeichnis
22
PowerPC/MPC750
25
Oliver Fritzen
PowerPC - Geschichte
25
Der Motorola MPC750 - technischer Aufbau
25
RISC
26
Aufbau und Arbeitsweise des MPC750-Prozessors
27
Weitere Features
30
Blick in die Zukunft
30
Verwendete Literatur:
31
Seminar Middleware: Betriebssysteme der Zukunft?
iii
Inhaltsverzeichnis
K APITEL 4
Alpha-Prozessoren (21x64)
33
Jürgen Ballmann
K APITEL 5
Designkriterien
33
Architektur
33
Befehlssatz
34
Adressraum
35
Prozessormodelle
35
Zusammenfassung
37
Literatur
38
Scalable Processor Architecture SPARC - Version 9
39
Alexander Greiml
Historisches
39
Was ist SPARC
39
Die SPARC-Version 9 Architektur
40
Traps und Interrupts
43
Instruktionsformate und Instruktionen
45
Speichermodelle
46
Address Spaces
47
Referenz MMU
47
Sun UltraSPARC-2
48
Fujitsu/HAL SPARC64-GP
50
Vergleich Sun UltraSPARC-2 und Fujitsu/HAL SPARC64-GP 51
K APITEL 6
Appendix
52
Quellen
52
MIPS-Familie
53
Matthias Brust
K APITEL 7
Die Firma MIPS
53
Der MIPS 10000 Prozessor
55
Ein Vergleich zum MIPS R12000
61
Quellenangaben
62
ARM & relatives
63
Heng Yiu Chau
iv
Ein wenig Historisches
63
Allgemeiner Aufbau eines ARM Prozessors
64
Aus ARM wird ARM
64
ARMs im Überblick
65
Seminar Middleware: Betriebssysteme der Zukunft?
Thumb extension
die Wiederanwendung des RISCprinzips auf ARMs
RISCprozessor ?
66
ARM10 Thumb
Das aktuelle ARM Modell 1020T mit Vector FPU
67
StrongARM-Reihe
Digital´s ARM-Implementation
68
AMULET
Forschung asynchroner Prozessoren auf Baszs von ARMs
69
Quellenverzeichnis
70
Seminar Middleware: Betriebssysteme der Zukunft?
v
Inhaltsverzeichnis
vi
Seminar Middleware: Betriebssysteme der Zukunft?
Moderne Prozessorarchitekturen
(ursprünglicher Aushang zur Seminarankündigung)
Die Leistungsfähigkeit von Mikroprozessoren wird jährlich um ca. 30-50 % gesteigert. Das Fundament für diese enorme Steigerungsrate wird durch viele Facetten
technischer Kunstgriffe gelegt. Begriffe wie Caching, Superpipelining, Superscalar
Architectures, Branch Prediction und Out-of-order execution sind Beispiele aus der
Trickkiste fortschrittlicher Prozessormanufakturen. Weiterhin erlauben immer
höhere Intergationsdichten die Einbettung immer komplexerer und spezialisierterer Funktionalitäten direkt auf den Chips. Als Beispiel hierfür seien die Multimedia
Extensions a.k.a. MMX, ISSE bzw. 3DNow! genannt. Ferner verspricht die 64-Bit
Technologie einen erneuten Quantensprung sowohl aus Hardware- als auch aus
Softwaresicht.
Die Ergründung der Geheimnisse, die sich in den Gehäusen moderner Mikroprozessoren verstecken, bildet den Schwerpunkt dieses Seminars. Exemplarisch ausgewählte moderne Mikroprozessoren sollen analysiert und gegenübergestellt
werden, so daß eine differenzierte Übersicht über die aktuellen Entwicklungen auf
dem Gebiet moderner Prozessorarchitekturen entsteht. Im einzelnen sind folgende Vorträge geplant:
•
•
•
•
•
•
•
Intel Pentium-Familie
AMD K6/K7-Familie
Motorola PowerPC 750 / G4
DEC Alpha 21264 / 21364
Sun UltraSparc
MIPS R10000
IA-64
Seminar Middleware: Betriebssysteme der Zukunft?
vii
viii
Seminar Middleware: Betriebssysteme der Zukunft?
K APITEL 1
Intel Pentium und IA-64 Prozessor-Familien
Eric Johannes Martin Weber
Geschichtliches
Intel stellt bereits seit 1969 Mikroprozessoren her, die für die Intel Pentium Architektur interessante
Produktreihe der 80x86 Prozessoren beginnt allerdings erst mit dem 8086 im Jahre 1978. Der 8086
war der erste Intel Prozessor mit Segment Unterstützung, allerdings handelte es sich hierbei jedoch
noch um eine sehr frühe Form, die nur im ‚Real Adress-Mode‘ arbeitete also nur direkte Speicherpointer (keine Segmentdeskriptoren) verwenden konnte.
Das sollte sich vier Jahre später (1982) mit dem 80286 schlagartig ändern, denn dieser Chip verfügte als erster Intel Prozessor über einen ‚Protected-Mode‘ (Vgl. “Sicherheitsmechanismen” S. 5)
und war zudem noch in der Lage Speichermanagement auf Segmentebene (Segment-Swapping)
sowie prozessorunterstützte Kontextwechsel (Hardware Task-Switching) durchzuführen.
Um weiterhin im heiß umkämpften Prozessormarkt erfolgreich bestehen zu können erweiterte Intel
1985 seine Produktpalette um einen neuen Prozessortyp, die 32 Bit Architektur (IA-32), deren
erster Vertreter der 80386 war. Wichtigstes Merkmal dieses Prozessors war die auf 32 Bit erweiterte Architektur, wodurch dem Anwender eine wesentlich größere Menge an Hardwareressourcen
zur Verfügung stand, so z.B. ein Adreßraum von vier Gigabyte (statt der bisherigen 16 Megabyte).
Damit einher ging auch die Notwendigkeit einer 16 Bit Emulation des 8086 (im sogenannten virtual
8086 mode) um die abwärts Kompatibilität zu gewährleisten ohne gleichzeitig auf den Performancegewinn der neuen Hardware verzichten zu müssen. Weiterhin hatten die Software-Entwickler jetzt erstmals die Möglichkeit den Speicher auch in einem ‚Flaches Adreßmodell‘ zu verwenden
um so z.B. UNIX problemlos auch auf Intel Prozessoren implementieren zu können.
Im Zuge der immer höheren Speicheranforderungen der Programme war es auch für Intel unausweichlich ein flexibleres virtuelles Speichermanagement bereit zu stellen, so das der 80386 der
erste Intel-Prozessor mit der Möglichkeiten zur Seitenorientierten Speicherverwaltung (Vgl. “Die
Seitenverwaltung (paging)” S. 4) - mit einer Seitengröße von vier Kilobyte - war. Zudem setzte
man bei Intel zunehmend auf den performancesteigernden Aspekt des Parallelismus innerhalb des
Prozessors, dieser Trend, der sich bis heute fortsetzt hat, wurde auch im Nachfolger des 80386, dem
80486, im Jahre 1989 konsequent weiter geführt.
Die hierbei mit Abstand wichtigste Neuerung war die Einführung einer fünfstufigen Pipeline, aber
auch die erstmalige Verwendung eines prozessorinternen Caches (acht Kilobyte first Level) und die
(theoretische) Unterstützung einer weiteren Chacheebene (second Level) waren wichtige Meilensteine auf dem Weg zu höheren Geschwindigkeiten. Ein weitere wichtige Neuerung beim 80486
war die erstmalige Integration der Fließkommaeinheit (FPU) in den Prozessorkern, da hierdurch
Seminar Moderne Prozessorarchitekturen
1
Intel Pentium und IA-64 Prozessor-Familien
ihre Geschwindigkeit erhöht werden konnte (Cache Nutzung, interner Bus, ...). Man findet auch
schon erste Ansätze zur Unterstützung von mehreren Prozessoren im 80486, diese Entwicklung
sollte sich aber erst mit dem nächsten Mitglied der Intel Prozessorfamilie, den Intel Pentium Prozessor wirklich durchsetzen.
Nach dem 80486 änderte Intel die Benennungsphilosophie seiner Prozessoren dahingehend, daß
von nun an mehr mnemonische Namen für die Prozessoren verwendete, und so hießen die 32 Bit
Nachfolger des 80486 Intel-Pentium, Celeron, ... und nicht einfach 80586 oder ähnlich. Der 1993
eingeführte Intel Pentium Prozessor stellt bezüglich des 80486 insbesondere im punkto Parallelismus eine Weiterentwicklung dar, er verfügt über eine ‚2-Way Superscalar Architecture‘. Das heißt
er kann zwei Basis-Instruktionen in eine Takt ausführen, hierzu verfügt er über zwei unabhängige
Pipelines. Neu war bei diesem Prozessor auch, daß nun auch Seiten mit vier Megabyte größe für
das Paging zur Verfügung standen und daß der Chip nun über die Möglichkeiten der Sprungvorhersage (Branch Prediction) verfügte, was zu einer besseren Ausnutzung der Pipeline und somit zu
einem allgemeinen Performancegewinn führte.
Außerdem wurden nun tatsächlich zwei Prozessoren im Parallelbetrieb unterstützt (dual prozessor
mode), so daß auch hier noch mal die Möglichkeit zu mehr Rechenpower gegeben war. Für den
High-End Markt entwickelte Intel schon sehr bald eine verbesserte Version des Pentium Prozessors, den Pentium Pro. Genau betrachtet, sind die Veränderungen sogar derart groß, daß man bereits
den Pentium Pro als Pentium II hätte verkaufen können, denn der Pentium Pro stellt den Beginn der
Intel P6-Architektur dar, die unter anderem über Spekulative Ausführung (out of order processing)
und einen 36 Bit Adreßbus verfügt.
Doch der Pentium II ließ nicht lange auf sich warten (er erschien 1998) und stellte nun auch dem
Heimanwender die neue P6-Architektur zur Verfügung (wenngleich auch der Speicherbustakt im
vergleich zum Pentium Pro nicht mehr auf vollem Prozessortakt lief - dazu gab es ja dann wieder
eine Profiversion, den Pentium II Xeon ...). Die Wichtigesten Neuerungen bestanden hier in der
entgültigen Integration von MMX und der standardmäßigen Bereitstellung von Level zwei Cache
außerdem war der PII jetzt ‚3-Way Superscalar‘ und die Funktionalität der FPU wurde ebenfalls
erweitert. Für den Low-End PC-Markt wurde eine abgespeckte Version des Pentium II entwickelt,
der Intel Celeron Prozessor, der über einen Pentium II Kern verfügt, dem aber alle Multiprozessor
Features fehlen und der im allgemeinen als Chip (PPGA Technologie) und nicht mehr als Cartride
(Slot 1) ausgeliefert wird.
Mit dem bis jetzt jüngsten Mitglied der Intel Pentium Familie, dem Pentium III, kam auch noch
ISSE (eine FP SIMD Technik) und eine Prozessorserienummer dazu, die derzeitige Version, der
Pentium III Copermine, wurde darüber hinaus durch finetuning (insbesondere im Cachebereich)
nochmals beschleunigt.
Im September 1999 wurde der erste funktionsfähige Prototyp des IA-64 Chipsatzes von Intel vorgestellt, die Verkaufsbezeichnung wird ‚Itanium‘ sein (die Entwicklungsbezeichnung war ‚Merced‘).
Im Folgenden wollen wir uns etwas näher mit der Intel P6-Architektur befassen:
Das Konzept der Segmente
Alle gängigen Intel-Prozessoren verfügen über sechs 16 Bit Segmentregister (eins für Code (CS),
vier für Daten (DS, ES-GS) und eins für den Stack (SS)). Diese Register dienen dazu den physikalischen Arbeitsspeicher des Computers in voneinander getrennte Blöcke zu unterteilen und somit
vor gegenseitiger Beeinflussung zu schützen.
Die Segmentregister zeigen nicht direkt auf die betreffenden Speicherbereiche (außer beim 80286)
sondern auf einen sogenannten Segmentdeskriptor in einer der beiden Segmenttabellen (prozeßlo-
2
Seminar Moderne Prozessorarchitekturen
Das Konzept der Segmente
kal: LDT, global: GDT), hierbei handelt es sich um eine Datenstruktur des Prozessors zur Segmentverwaltung, die im Wesentlichen die Basisadresse (32 Bit), sowie eine Größenbeschränkung (Limit
20 Bit entweder mit Granularität 0 (ein Megabyte in Byte schritten ) oder 1 (vier Gigabyte in vier
Kilobyte Schritten)) des Segments und einige Informationen über die zugriffsrechte (DPL), den
Type und den Zustand (Present/Not Present) enthält.
Die Intel-Prozessorarchitektur ist so aufgebaut, daß immer über die Segmentregister auf den Speicher zugegriffen wird (direkte zugriffe sind nicht möglich). Will man also z.B. das unter UNIX
gebräuchliche Flache Adreßmodell verwenden (und somit den direkten, segmentlosen Speicherzugriff simulieren), so muß man alle Segmentregister auf den gleichen Segmentdeskriptor (Basisadresse 0x0, Limit 0xFFFFFF, das heißt den gesamten (logischen) Adreßraum zeigen lassen, um
somit effektiv die Segmentierung des Speichers zu umgehen. Vorgesehen ist jedoch die Verwendung von unterschiedlichen Segmentregistern, im sogenannten ‚Multisegment Mode‘, wo jeder
Prozeß über eigene, in der Regel von einander getrennte Speicherbereiche verfügt, die über Prozeßlokale Deskriptor-Tabellen angesprochen werden.
Das Register, das auf die Lokale Deskriptor Tabelle zeigt (LDTR) wird beim Hardwareunterstützten Kontextwechsel automatisch mit gesichert und das für den neuen Prozeß nötige in das LDTR
geladen. Die Segmentregister selbst sind zweigeteilt, sie besitzen nämlich einen Sichtbaren und
einen unsichtbaren Teil, der sichtbare Teil besteht lediglich aus einem 13 Bit Segment-Selektor
(Bits 3-15 wird mit acht multipliziert als Offset in der Segmenttabelle verwendet), sowie einem
Table-Indicator (Bit 2 0 = global, 1 = lokal) und einem Requested Priviledge Level (RPL, Bits 0,1:
0 = highest , 3 = lowest). Der unsichtbare Teil hingegen speichert die Daten aus der Segmenttabelle
für dieses Segment zwischen, so daß der Prozessor ohne zusätzlichen Aufwand (Speicherzugriffe
etc.) die gewünschte Speicheradresse bestimmen - beziehungsweise im Fall eines ungültigen
Zugriffs eine Exception auslösen - kann.
Segmentorientierte Speicherzugriffe sind nicht Transparent und müssen daher von der Anwendung
und dem Betriebssystem unterstützt werden (sollen mehr als sechs Segmente verwendet werden, so
besteht die Möglichkeit den Inhalt einzelner Segmentregister mit speziellen Befehlen (LCS, LDS,
...) den Sichtbaren Teil des Segmentregisters zu ändern, woraufhin der Prozessor den unsichtbaren
Teil aus der entsprechenden Segmenttabelle nachlädt (oder im falle einer Zugriffsverletzung eine
Exception auslöst). [1]
Bild 1.
Segmentauswertung
Logical
Address
31
15
0
Seg. Selector
0
Offset
Descriptor Table
Segment
Descriptor
Base Address
+
31
0
Linear Address
Werfen wir nun einen Blick auf ein weiteres Mittel der Prozessorunterstützten Speicherverwaltung
in der Intel Architektur:
Seminar Moderne Prozessorarchitekturen
3
Intel Pentium und IA-64 Prozessor-Familien
Die Seitenverwaltung (paging)
Beim Paging wird der Speicher nicht wie bei der Segmentierung in große zusammenhängende
Stücke zerlegt, sondern in kleine Seiten mit einer Größe von vier Kilobyte oder vier Megabyte aufgeteilt (im 36 Bit Adreßmodus sind statt dessen zwei Megabyte Seitengröße möglich). Hierbei steht
an der adressierten Speicherstelle (linear address) statt einer Adresse im physikalischen Speicher
eine weiterer logische Adresse, welche sich aus drei Zeigern zusammensetzt. Zuerst kommt der
Pointer auf das sogenannte ‚Page Directory‘, dann ein Zeiger auf die zugehörige Seitentabelle
(Page Table) und letztendlich noch ein Offset, das die genaue Position auf der Seite angibt, die
Größe der einzelnen Pointer hängt direkt von der verwendeten Seitengröße und dem zu verwaltenden Adreßraum (32 oder 36 Bit) ab:
Bei 32 Bit und 4 Kilobyte Seiten ergibt sich: 10 Bit Directory, 10 Bit Tabelle und 12 Bit Offset.
Für 32 Bit und 4 Megabyte Seiten erhält man: 10 Bit Directory, 0 Bit Tabelle und 22 Bit Offset.
Für 36 Bit ist die Sache etwas komplizierter (und es gibt auch noch zwei arten 36 Bit Adressierung
zu realisieren, doch glücklicherweise wird dieses Problem mit Einführung der 64 Bit Prozessoren
einfach verschwinden).
Hier also nun ein Beispiel für die gängige 36 Bit Adressierung mit vier Kilobyte Seitengröße.
Zuerst muß ein zusätzlicher Pointer, der ‚Page Directory Pointer‘ (2 Bit), eingeführt werden um mit
dem größeren Adreßraum zurecht kommen zu können. Dieser zeigt auf einen von vier Einträgen in
der ‚Page Directory Pointer Table‘ (64 Bit, 36 used). Anschließend geht es wie gewohnt weiter: 9
Bit Page Directory, 9 Bit Page Table, und 12 Bit Offset (am Anfang stehen ja noch die zwei Bits für
den Page Directory Pointer). Offensichtlich lassen sich hier auch jeweils nur 4 Gigabyte auf einmal
ansprechen, der ganze Aufwand dient also lediglich dazu 36 Bit Basisadressen verwenden zu können. Um jetzt also auch 36 Bit physikalischen Speicher anzusprechen muß man den PDBR (Basispointer für die Page Directory Pointer Table (in Kontrollregister 3 (CR3)) ändern, was
gleichbedeutend damit ist eine andere Seitentabelle zu verwenden und somit den kompletten Overhead (TLB flush etc.) mit sich bringt, alles in allem eine doch recht umständliche Sache.
Die Seiten selbst (und auch die Seitentabellen, welche ja spezielle Seiten sind) verfügen über einige
zusätzliche Bits in der jeweiligen Tabelle, die angeben ob auf die Seite zugegriffen, sie verändert
wurde, ob ein Schreibschutz besteht und ganz wichtig, ob sich die Seite derzeit im Speicher befindet oder nicht. Ist eine Seite nicht im Speicher (Bit 0 = 0) dann stehen die restlichen Bits für
Systeminformationen (über die derzeitige Position der Seite) zur Verfügung, ein Zugriff auf die
Seite verursacht eine Exception, die wiederum (auf Betriebsystemebene) dazu genutzt werden
sollte die Seite vom Hintergrundspeicher zu laden und dei Anweisung erneut auszuführen (ein
Großteil der benötigten Funktionen wird von Intel in Hardware unterstützt).
Im Gegensatz zur Segmentarchitektur ist das Pageing für die Anwendungsprogramme vollkommen
transparent und wird völlig auf Betriebsystemebene realisiert. Zur Aktivierung des Paging dient
übrigens Bit 31 im CR0 und die Basisadresse der Seitentabelle steht im CR3 (PDBR). Auch für die
Seitenverwaltung ist es möglich jedem Task eine eigene Pagetable zu geben oder nur eine einzige
für das gesamte System zu verwenden (allerdings ist hier nur ein Register vorhanden, so daß normalerweise nur eine der beiden Möglichkeiten gegeben ist. [2] [3]
4
Seminar Moderne Prozessorarchitekturen
Sicherheitsmechanismen
Bild 2.
Erweiterte Seitenverwaltung (36 Bit)
Linear Address
31 30
Directory Pointer
21
Directory
12
Table
0
Offset
12
Page Directory
9
Page Table
4-KByte Page
Physical Address
9
Page-Table Entry
2
Directory Entry
Page-DirectoryPointer Table
Dir. Pointer Entry
32
CR3 (PDBR)
Ein modernes Betriebssystem benötigt Möglichkeiten verschiedene Zugriffsrechte zu verwenden
um einen stabilen Betrieb gewährleisten zu können, hierzu bietet Intel in seinen Prozessoren unter
anderem folgende Möglichkeiten an:
Sicherheitsmechanismen
Wie bereits erwähnt gibt es sowohl auf Segment-, als auch auf Seitenebene die Möglichkeit den
Zugriff auf den entsprechenden Speicherbereich zu Reglementieren. Auf Segmentebene greift hier
diesmal der kompliziertere Mechanismus mit insgesamt vier verschiedenen Sicherheitsstufen (von
0 (hoch) bis 3 (niedrig)).
Wohingegen auf Seitenebene nur zwei Sicherheitsstufen möglich sind (User- und SupervisorMode), außerdem läßt sich für jede Seite mittels eines Bits noch festlegen, ob diese nur lesbar sein
soll (WP=1) oder ob auch schreibend darauf zugriffen werden darf. Ob im Supervisor-Modus das
Write-Protect Bit beachtet werden soll kann im Kontrollregister 0 (CR0) mit dem WP (WriteProtection) Bit festgelegt werden. Damit der Seitenbasierte Schutz überhaupt greifen kann sind die Seitentabelle (pagetable) und der Seitentabllendeskriptor (pagetable descriptor) ausschließlich im
Supervisor-Modus zugreifbar. Natürlich gibt es auch eine Reihe von Befehlen, die nur im Supervisor-Modus ausgeführt werden können dazu gehören z.B. alle Befehle, die auf wichtige Prozessorstrukturen zugreifen (Kontrollregister, PSW, Segment/Seitenverwaltung ...), da sich hier sonst eine
Möglichkeit der Umgehung der Sicherheitsmechanismen bieten würde.
Beim Sicherheitsmechanismus auf Segmentebene werden jede Menge von Tests durchgeführt
(allerdings alle parallel zur Adreßberechung und somit ohne zusätzlichen Zeitaufwand), die sicherstellen, daß Segmente nicht unerlaubt verändert oder geladen werden. Für eine ausführliche Darstellung fehlt hier leider der Platz, doch im Prinzip funktioniert der Schutz in fünf Stufen:
Seminar Moderne Prozessorarchitekturen
5
Intel Pentium und IA-64 Prozessor-Familien
1. Typ checks (z.B. muß ein Code Segment in CS as executable gekennzeichnet sein, Stack Segmente müssen schreibbar sein ...).
2. Limit checks (zugriffe oberhalb (oder unterhalb falls expand down aktiv ist) des Limits sind
unzulässig).
3. Beschränkung der Domäne (besteht die Berechtigung ein Segment zu ändern, ist der Zugriff
erlaubt (unter Beachtung von CPL, DPL und RPL)
4. Beschränkung von Prozedur zugriffen (ist der Sprung in ein anderes Segment erlaubt ?, ...).
5. Beschränkung des Instruktionssatzes (einige Befehle dürfen nur mit Priviledgelevel 0 ausgeführt werden (z.B. HLT, Change CRs, ... und bestimmte I/O-Operationen haben eine eigenes
Schutzsystem (IOPL in EFLAGS) um den Zugriff auf diese zu reglementieren)
Erst wenn alle Stufen erfolgreich durchlaufen wurden kann der Zugriff erfolgen (und im falle eines
Befehls dieser ausgeführt werden). Da normalerweise sowohl Segmente, als auch Seiten verwendet
werden ist es wichtig zu wissen, daß immer zuerst die Zugriffsrechte für die Segmente überprüft
werden und erst, wenn dieser Zugriff zulässig ist eine Prüfung auf Seitenebene erfolg, ist auch der
Zugriff erlaubt, so wird die Aktion ausgeführt, anderenfalls wird eine Exception (Protection-Violation) ausgelöst - und somit der Zugriff abgebrochen. [4]
Nun soviel zu den grundlegenden Speicherzugriffsmechanismen, wenden wir und jetzt also der
eigentlichen Befehlsausführung zu.
Spekulative Ausführung (Out-Of-Order Processing)
Seit dem Pentium-Pro (1995) wird diese Technik in allen P6-Prozessoren verwendet. Die Grundidee beim OOP ist die, daß der Prozessor die Ausführungsreihenfolge der Instruktionen so abändern kann, daß möglichst wenige Pausen (stalls) durch belegte Hardwareressourcen und
Zugriffsverzögerungen entstehen.
Natürlich müssen die Befehle in genau der Reihenfolge für das System sichtbar werden, wie sie
ursprünglich Programmiert wurden, da sonst eine korrekte Abarbeitung des Programmes nicht
mehr gewährleistet werden kann. Die einfachste Lösung dieses Problems ist die Einführung von
Aliasregistern, also solcher Register, die den Platz von bestimmten Prozessorregistern einnehmen
und sozusagen als Puffer während der Ausführung dienen. Außerdem müssen die nächsten Befehle
(bei den heutigen Intel Prozessoren etwa 20 bis 30) in einem speziellen Speicher abgelegt werden
(dem sogenannten ReOrder Buffer), so daß die Ausführungseinheit (Execute/Dispatch Unit) auf
diese nach Inhalt zugreifen kann (context adressable memory).
Der ganze Prozeß läuft dann etwa wie folgt ab:
1. Fetch Instructions (from L1, L2 Cache or RAM)
2. Decode Instructions (fetch decode unit), max 3 per cycle
3. Put Instruction in Reorder Buffer (ROB) if ROB not full else stall
4. Dispatch / Execute instruction from ROB, get data as needed, max 5 per cycle (3 typical)
5. Retire finished instructions from ROB (max. 3 per cycle)
Selbstverständlich werden so viele dieser Aktionen wie möglich parallel ausgeführt, hierzu dient
unter anderem auch die zwölfstufige Pipeline. Es ergeben sich nun aber zwei Probleme: Erstens
funktioniert die Ausführung von Befehlen, die erst später in der Programmausführung an der Reihe
wären nur dann, wenn es sich nicht um schreibende Speicherzugriffe handelt (diese können nicht
ohne inakzeptablen Overhead wieder rückgängig gemacht werden, falls die Instruktion aus irgendeinem Grund doch nicht ausgeführt werden darf); Zweitens bereiten bedingte Sprünge Schwierigkeiten, da das Sprungziel von einer noch nicht ausgewerteten Anweisung abhängen kann (und dies
ist oft der fall, da die Umsortierung der Befehle die Kernidee der Spekulativen Ausführung ist). Das
6
Seminar Moderne Prozessorarchitekturen
Die MMX-Technologie.
Sprungziel muß also (probabilistisch) vorhergesagt werden, stellt sich diese Vorhersage später
(nach Berechnung der Bedingung) als falsch heraus, so müssen alle Befehle, die ab dem vorhergesagten Sprungziel bereits ausgeführt wurden als ungültig markiert und aus dem Reorder Buffer entfernt werden.
Wie man sieht hängt ein großer Teil des Performance Gewinnes an der korrekten vorhersage von
Sprüngen, und so verwundert es nicht, daß Intel ständig versucht die Sprungvorhersage (branch
prediction) in seinen Prozessoren zu verbessern (bei der P6-Familie heißt das ganze ‚advanced
branch prediction‘ und der ‚Branch Taget Buffer‘ (BTB) hat 512 Einträge zum speichern von
Sprungzielen).
Eine Interessante Entwicklung zeichnet sich übrigens mit der IA-64 Architektur ab, denn hier wird
jetzt ganz auf Prozessor gestützte OOP verzichtet (die Pipeline ist komplett in-order) satt dessen
wird die Verantwortung für die Parallelität auf den Programmierer/Compiler übertragen (Vgl. “Die
Intel Architektur 64 (IA-64) am Beispiel des ‚Itanium‘” S. 11). [5]
Bild 3.
Schema des out-of-order Processing und der Reservation Station
MMX™
Execution Unit
Floating-Point
Execution Unit
L2 Cache
System Bus
Port 0
Bus Interface Unit
Reservatio
Station
To/From
Instruction Pool
(ReOrder Buffer)
L1 ICache
Fetch
Fetch/
Decode
Unit
WIRE
(Misc. Func.)
Integer
Execution Unit
MMX
Shuffle
(ISSE)
Execution Unit
Jump
PFADD
(ISSE)
Execution Unit
Recip /
Recipsqrt
Port 1
Integer
Execution Unit
Port 2
Load
Unit
Loads
Port 3, 4
Store
Unit
Stores
L1 DCache
Load
Dispatch/
Execute
Unit
Store
Retire
Unit
Instruction Pool
Da in der heutigen Zeit die Rechner verstärkt für Multimedia Anwendungen (insbesondere für
Spiele) genutzt werden, hat Intel sich einige Methoden zur Beschleunigung solcher Anwendungen
einfallen lassen. Die Erste und Älteste ist:
Die MMX-Technologie.
Seit Einführung des Pentium-MMX baut Intel diese Erweiterung des Befehlssatzes (57 Befehle
mehr) in alle Prozessoren der P6-Reihe ein. Im Gegensatz zu anderen Techniken wie z.B. dem
ISSE (Vgl. “Das Enhanced SIMD Streaming” S. 8) ist MMX keine neue Prozessorhardware im
eigentlichen Sinn, sondern vielmehr eine Erweiterung der FPU Funktionalität. Die Aufgabe des
MMX-Instruktionssatzes besteht in der Verarbeitung von Multimediadaten (MMX = Multi Media
eXtension), für Intel waren damals Multimediadaten kleine (vorzeichenbehaftete) Integerwerte
gleichen Typs.
Die Idee der MMX-Technologie besteht nun einfach darin jeweils einige dieser Daten zu einem 64Bit Paket zusammenzufassen und parallel auf diesen 64-Bit mehrere gleiche Operation durchzuführen (wie add, mult, ...) und dadurch die Verarbeitungsgeschwindigkeit zu erhöhen (Single Instruction Multiple Data - SIMD). In der Praxis hat sich dieses Konzept als durchaus brauchbar erwiesen,
Seminar Moderne Prozessorarchitekturen
7
Intel Pentium und IA-64 Prozessor-Familien
insbesondere deshalb, da durch die Verwendung des FPU Registerstacks keine Änderungen an
bestehenden Betriessystemen vorgenommen werden müssen (denn der Zustand der FPU-Register
wird beim Kontextwechsel bereits gesichert).
Durch diesen Trick konnte eine problemlose Integration in bestehende Systeme ermöglicht werden,
es ergibt sich jedoch sofort folgendes Problem: Es ist nicht möglich MMX und FPU Instruktionen
parallel zu nutzen, schlimmer noch, da die MMX-Technologie über keine eigenen Register verfügt
ist sogar eine Mischung von MMX und FPU Operationen unmöglich (das FPU-Statusregister
würde falsche Informationen enthalten und Registerinhalte würden überschrieben !). Hieraus folgt
ein nicht unerheblicher Overhead für das Speichern und Restaurieren des FPU-Statuswortes und
eventueller Registerinhalte vor und nach jedem Wechsel von FPU beziehungsweise MMX Operationen.
Die vier MMX Datentypen sind, wie auch die Befehle, sehr einfach aufgebaut: Ein Quadword (64
Bit) wird entweder in 8x8, 4x16, 2x32 oder 1x64 Bit aufgeteilt.
Der Instruktionssatz verfügt nun für jeden dieser Typen über einen passenden Befehl um z.B. eine
parallele Addition auszuführen. Um die Befehle einfach und effizient (und kompatible zur FPU
Architektur) zu halten arbeitet der Instruktionssatz Registerstack orientiert und explizite Angaben
der Operanden sind nur bei der Datenkonvertierung (pack, unpack) und dem Speichertransfer möglich, in allen anderen Fällen sind sie implizit über den Stack gegeben.
Hauptanwendungsgebiet ist die Sound- und Bildverarbeitung, wo MMX taugliche Datenformate
(8/16 Bit Samples, 8/16/32 Bit Pixel) in großen Mengen ähnlichen Operationen unterworfen werden (Pegelanpassung, Alphablending usw.). [6]
Beispiele:
a) PMADDWD (16 x 16 Bit to 32 Bit Multiply-Add)
a3
a2
a1
a0
*
*
*
*
b3
b2
b1
b0
-----------------------a3*b3+a2*b2 | a1*b1+a0*b0
b) PCMPGT[W] (16 Bit parallel Compare, es werden keine Condion-Codes
gesetzt, sondern ein Ergebnisvektor geliefert)
32
16
12
34
gt?
gt?
gt?
gt?
45
9
12
67
---------------------0000 ffff 0000 0000
Intels nächste Multimediaerweiterung war:
Das Enhanced SIMD Streaming
Diese unter dem Schlagwort Internet Straming SIMD Extension (ISSE) vermarktete Erweiterung
der Intel Prozessoren beginnend mit dem Pentium III stellt sozusagen die konsequente Umsetzung
der MMX-Idee auf Fließkommadatentypen dar. Mit 70 neuen Befehlen und acht eigenen 128 Bit
(ISSE) Registern, welche im Gegensatz zu MMX nicht als Stack aufgebaut sind, ist diese Erweiterung um einiges umfangreicher als MMX und führt damit auch zu einer zehnprozentigen Vergrößerung der benötigten Chipfläche.
8
Seminar Moderne Prozessorarchitekturen
Seriennummer gefällig ?
Der wichtigste Unterschied zur MMX Philosophie ist sicherlich der Verzicht auf eine transparente
Einbindung der neuen Hardwarefunktionalität in bestehende Betriebssysteme (es ist die erste Änderung am Prozessorstatus seit Anpassung der FPU im 80386 / 80387). Durch die neuen Register und
Interupts ist für die Nutzung der ISSE-Funktionalität eine Unterstützung durch das Betriessystem
zwingend notwendig (die ISSE-Register könnten sonst nach Kontextwechsel ungesichert überschrieben werden), allerdings hat Intel durch die Einführung neuer state sore/restore Befehle die
Integration sehr einfach gestaltet. Der Vorteil dieser Designentscheidung liegt allerdings ebenso
klar auf der Hand: ISSE kann problemlos parallel zu MMX und zur FPU genutzt werden (wenngleich einige FPU execution units bei ISSE Verwendung finden und somit eine wirklich zeitgleiche
parallel Ausführung von ISSE und FPU Instruktionen in einzelnen Fällen eingeschränkt sein kann).
Internet SSE arbeitet ausschließlich mit single precision Floats (32 Bit) und kann somit in einem
Register vier Daten gleichzeitig verarbeiten, wobei die 128 Bit Befehle zur Ausführung in zwei 64
Bit Mikroinstruktionen aufgeteilt werden, so daß nur dann ein Zyklus pro 128 Bit Instruktion ausreicht, wenn unterschiedliche Ausführungseinheiten verwendet werden können (wie z.B. beim multiply-add), ansonsten werden zwei Zyklen für 128 Bit benötigt.
Auch die Verwendung skalarer Werte (einzelner 32 Bit Floats) ist möglich, um den Overhead so
gering wie möglich zu halten und eine Verstopfung der Pipeline mit unnötigen Operationen zu vermeiden wurden hierfür spezielle Instruktionen eingeführt, die nur die unteren 32 Bit bearbeiten und
die restlichen 96 Bit einfach ins Zielregister durchkopieren (somit ist immer eine Mikroinstruktion
ausreichend).
Da ISSE hauptsächlich für die Anwendung im 3D-Grafik und Videobereich, sowie für die Spracherkennung entwickelt wurde verwundert es nicht, daß hierbei die Geschwindigkeit im Vordergrund
stand. So gibt es z.B. die Möglichkeit statt der IEEE Fließkommaberechnung den weniger präzisen,
aber schnelleren ‚Flush to Zero‘ Modus (runden zu 0, underflow = 0) zu verwenden und für besonders Zeitkritische Anwendungen steht sogar noch eine auf Tabellen bestehende Berechnung von 1/
Wurzel und Kehrwerten (1/x) zur Verfügung (RCP, RSQRT - recht grobe Mantisse: 12 statt 24
Bit). Außerdem ist es möglich, die komplette Fehlerbehandlung über die Hardware ablaufen zu lassen (im Fehlerfall Vorgabewerte einsetzen, statt Exceptions auszulösen und einfach weiter rechnen).
Eine weitere Neuerung des ISSE ist der Streaming Teil, der es ermöglicht Speicherzugriffe im Hintergrund ablaufen zu lassen (sollte zu früh auf die beantragten Daten zugegriffen werden kommt es
zu stalls, bis die Daten da sind). In jedem fall kann die Retirement Unit den Speicherzugriffs-Befehl
sofort als abgearbeitet betrachten und braucht nicht erst auf das Eintreffen der Daten zu warten
(Prefetch). Ein weiteres straming Feature ist die Möglichkeit anzugeben, ob die Daten in den Cache
aufgenommen werden sollen oder nicht, bei großen Datenströmen mit einmaligen zugriff auf die
einzelnen Daten kann es durchaus sinnvoller sein den Cache für wichtige lokale Variablen (Matrizen od. ä.) frei zu halten statt ihn mit unnützen Daten vollzustopfen. [7]
Im Zuge von Internet und E-Comerce Anwendungen taten sich immer wieder neue Sicherheitslükken auf, was uns zu der Frage führt:
Seriennummer gefällig ?
Mit Einführung es Pentium III erweiterte Intel seine Prozessoren um die Prozessoridentifikationsnummer (auch Seriennummer genannt). Dieses Feature soll dem Anwender zu mehr Sicherheit im
Internet verhelfen, indem die Seriennummer des Prozessors bei der Authentifikation des Benutzers
eines Internetdienstes mit einfließt.
Soweit so gut, aber es ergeben sich auch eine einige Risiken, so z.B. die Möglichkeit sich in das
System des Anwenders einzuhacken, indem man vorgibt die Identität des Rechners (z.B. vermittels
Seminar Moderne Prozessorarchitekturen
9
Intel Pentium und IA-64 Prozessor-Familien
eines Java-Programmes) abfragen zu wollen und statt dessen einen Virus oder ähnliches in das
System einschleust. Allerdings ist auf anderen Plattformen (unter anderem auf SGI Workstations)
ist die Verwendung von Prozessornummern schon lange ein zuverlässiges Mittel des Softwarekopierschutzes, einer weiteren interessanten Anwendung von Prozessorauthentifikation (insbesondere
in Kombination mit Netzwerklizenzen usw.).
Von technischer Seite betrachtet handelt es sich bei der Prozessorseriennummer um eine Erweiterung des CPUID Befehls, der dazu dient Prozessorspezifische Informationen (wie z.B. Prozessortyp oder unterstützte Features (MMX,...)) in Erfahrung zu bringen. Die Seriennummer selbst ist
eine 96-Bit Zahl, die sich aus zwei Teilen zusammensetzt: Erstens der 32 Bit Prozessorsignatur (die
den (allgemeinen) Typ der CPU spezifiziert) und zweitens aus einer 64 Bit Zahl die diesen speziellen Prozessor kennzeichnet. Interesannterweise findet sich in der Dokumentation der Prozessorseriennummer ein Vermerk, daß die Eindeutigkeit dieser Nummer nicht garantiert werden kann
(insbesondere nicht in übertakteten oder unzureichend gekühlten Systemen) und daß deshalb durch
Randbedingungen eine eindeutige Bestimmung des Rechners gewährleistet werden müsse.
Besonders bemerkenswert (und vom Marketingstandpunkt aus betrachtet geschickt) ist die Möglichkeit die Seriennummer auszuschalten und dem Anwender doch wieder die Möglichkeit der
(vermeintlichen) Anonymität im Netz zu geben (man denke hier nur an die eindeutige Nummer von
Ethernetkarten oder ähnlicher, versteckter Hardware-Identifizierungsmerkmale!). Die Deaktivierung erfolgt über ein write once Bit, so daß zur erneuten Aktivierung der Serienummerabfragemöglichkeit ein Prozessorreset erforderlich ist (hierzu ist im Allgemeinen ein Neustart des Rechners
notwendig). [8]
Hier noch ein paar nützliche Beispiele zur P3-Seriennummer:
Erkennen der Seriennummerunterstützung:
MOV EAX, 01H// Parameter für CPUID
CPUID
BT EDX, 18// Bit 18 des EDX Registers überprüfen
JC ...// Und falls dementsprechend weiter machen ...
Auslesen der P3-Seriennummer:
MOV EAX, 01H
CPUID// Prozessor Signatur laden
MOV dst+64, EAX// Erg. irgendwo abspeichern
MOV EAX, 03H
CPUID// Untere 64-Bit der Nummer
MOV dst, ECX
MOV dst+32, EDX// Ergebnisse speichern.
// (dst = Zieladresse der Daten)
Abschalten der P3-Seriennummer:
MOV ECX, 119H// BBL_CR_CTL auswählen
RDMSR// MSR 119H
OR EAX, 0020 0000H// Bit 21 des EAX Registers setzen
WRMSR// Änderung speichern
Zum Abschluß noch ein Ausblick in die Zukunft:
10
Seminar Moderne Prozessorarchitekturen
Die Intel Architektur 64 (IA-64) am Beispiel des ‚Itanium‘
Die Intel Architektur 64 (IA-64) am Beispiel des ‚Itanium‘
Nach nunmehr fast 15 Jahren 32 Bit Architektur bei Intel wird es höchste Zeit für den nächsten
Schritt, die 64 Bit Architektur. Erster Chip dieser neuen Architektur wird der Itanium (Arbeitsbezeichnung Merced) sein, kürzlich (September 1999) wurde der erste funktionsfähige Prototyp der
Öffentlichkeit vorgeführt, die Markteinführung ist für den Sommer 2000 zu erwarten. [9]
Was ist also so besonderes an diesem neuen Chip? Außer der komplett auf 64 Bit ausgelegten
Architektur sind folgende Punkte in der IA-64 Architektur festgelegt:
• Volle Kompatibilität zur alten IA-32 Architektur (ausschließlich vermittels Emulation im 32 Bit
Modus)
• Statt der bis jetzt üblichen zwei Chachestufen werden es nun drei sein (Level 3 voraussichtlich
etwa vier Megabyte).
• Die Seitengröße kann bis zu 256 MB pro Seite betragen womit der größeren Speicherkapazitäten Rechnung getragen wird.
• In den Prozessor wird ein PCI-Bus Controller eingebaut sein, welcher um bessere Ausfalltoleranz des gesamt Systems zu ermöglichen als hot swappable ausgelegt ist (Geräte können während des Betriebs ausgetauscht werden).
• Der 64 Bit Befehlssatz ist Registerorientiert, hierfür wurde die Anzahl der verfügbaren Register
drastisch erhöht (es gibt nun 128 Generl Purpose (64 Bit), 128 Floating point (82 Bit), 8 Branch
(64 Bit) und 64 Predicate (1 Bit) Register).
• Erweiterte Unterstützung von explizitem Parallelismus wie z.B. Speculation (d.h. Daten so früh
wie möglich zu laden um sie dann bei Bedarf sofort zur Verfügung zu haben), Predication (eine
raffinierte Methode zur Sprungvermeidung)
• Es wird kein out-of-order processing mehr geben, dafür wird der dadurch gewonnene Platz auf
dem Chip für zusätzliche Ausführungseinheiten verwendet werden. Gleichzeitig wird im
Instruktionssatz (64 Bit Modus) ein impliziter Parallelismus vorgesehen, so daß die Entwickler
gezwungen sind explizit parallel zu programmieren und nicht parallel ausführbare stellen im
Quellcode zu kennzeichnen (natürlich wird das bald schon von den Compilern erledigt werden).
• Der Itanium wird wohl folgende Ausführungseinheiten besitzen: Vier Integer, vier MMX, zwei
FPU (erweitert, so daß vier single precision (32 Bit) Instruktionen bearbeitet werden können),
zwei Load/Store-Units.
• Die Decode Einheit wird sechs Instruktionen pro Takt dekodieren können, hieraus ergibt sich
bei einer zehnstufige Pipeline: Ein FP-Durchsatz von 12 Operationen pro Takt (20 bei single
precision) - ohne FP Verarbeitung sind noch 8 Operationen möglich.
• Angestrebter Takt zum Einführungszeitpunkt: 900 Megahertz
• Sowie eine weiter verbesserte (was immer das heißen mag) Vorhersage von nicht vermeidbaren
Sprüngen (advanced branch prediction).
• Selbstverständlich hat Intel auch wieder eine Erweiterung der SIMD Techniken (MMX und
ISSE) integriert um Multimedia Anwendungen bestmöglich zu unterstützen :)
Ein Beispiel für Predication (Pseudocode)
C:
if (a) { b = c + d; }
if (e) { h = i - j; }
ASM-IA64:
cmp.ne p1,p2=a,r0// p1 <- a != 0
cmp.ne p3,p4=e,r0;;// p3 <- e != 0
// „;;“ = ende eines parallelen blockes
(p1) add b=c,d// if a!=0 add (mit predicate register)
(p3) sub h=i,j// if e!=0 sub (mit predicate register)
Seminar Moderne Prozessorarchitekturen
11
Intel Pentium und IA-64 Prozessor-Familien
(enthält keine Sprünge (also auch keine brabch prediction) sondern nur
bedingte Befehle und benötigt nur zwei takte)
ASM-IA32:
L0: ...
CMP a,r0
JZ L1
ADD b=c,d
L1:
CMP e,r0
JZ L2
SUB h=i,j
L2: ...
(herkömmliche IA-32 Version, enthält zwei Sprünge und benötigt gegebenenfalls wesentlich mehr Takte (bei falscher branch prediction))
Literaturverweise
1. Pentium®Processor Family Developer’s Manual - Volume 3: Architecture and Programming
Manual, Chapter 11
2. Intel Architecture Software Developer’s Manual, Volume 3: System Programming Guide,
Chapter 3.6 ...
3. Intel Architecture Software Developer’s Manual, Volume 3: System Programming Guide,
Chapter 3.8 ...
4. Pentium®Processor Family Developer’s Manual - Volume 3: Architecture and Programming
Manual, Chapter 12
5. Intel Architecture Software Developer’s Manual, Volume 1: Basic Architecture
6. Intel MMX Technology Overview
7. Internet Streaming SIMD Extension (Intel Tech. Journal Q2 1999)
8. Application Note: Intel® Processor Serial Number
Pentium® III Processor Serial Number Feature and Applications (Intel Technology Journal Q2,
1999)
9. [9] IA-64 Application Developer’s Architecture Guide IA-64 Architecture Inovations (23 September 1999)
Intel® Itanium™ Processor Microarchitecture Overwiew.
Weitere Literatur:
Intels Developement Website: developer.intel.com
Intel Architecture Software Developer’s Manual, Volume 1: Basic Architecture
Intel Architecture Software Developer’s Manual, Volume 3: System Programming Guide
Datasheets zu P1, PPro, P2 (Xeon), P3 (Xeon), Celerons
Pentium Processor Family Developer’s Manual Volume 3: Architecture and Programming Guide
P6 Family of Processors - Hardware Developer’s Manual
12
Seminar Moderne Prozessorarchitekturen
K APITEL 2
AMD K6/K7-Familie
Thomas Heinen
Einführung: Die Geschichte der Firma AMD1
Am 1. Mai 1969 wurde die Firma AMD (“Advanced
Micro Devices”) gegründet. Zunächst befand sich das
Hauptquartier der Firma im Wohnzimmer von John
Carey, einem der Mitbegründer der Firma. Später mietete die Firma zwei Zimmer im Hinterhof einer Teppichfabrik in Santa Clara an. Im September konnte man
sich schließlich ein Bürogebäude leisten, und die Produktion, die hauptsächlich aus verbesserten Produkten
anderer Firmen bestand, lief endlich an. Im November
wurde der Am9300 vorgestellt. Im Jahr 1970 präsentierte man der Öffentlichkeit den Am2501, den ersten proprietären Chip der Firma AMD.
1974 zählte AMD bereits 1.500 Angestellte und man hatte eine Produktpalette von über 200 verschiedenen Artikeln. Der Umsatz betrug bereits circa 26,5 Millionen Dollar. Anläßlich des fünften
Firmenjubiläums veranstaltete die Firmenleitung eine Gala-Party für alle Angestellten sowie deren
Familienangehörige, was sich zu einer gern gepflegten Tradition entwickelte. Im Jahre 1976 schlossen AMD und die Intel Corporation ein Patent-Abkommen und 1982 ein “Technology Exchange
Agreement” die iAPX86-Familie betreffend. Noch arbeiteten die beiden Firmen in der Forschung
zusammen.
1981 verwendete die NASA AMD-Chips an Bord des Space-Shuttles - ein großer Erfolg für AMD,
der gute Zeiten für die Firma einläutete. Zum 15. Jubiläum im Jahre 1984, welches das erfolgreichste Jahr der Firmengeschichte darstellte, gab es erneut ein großes Fest, zu dem man die bekannte
Musikgruppe “Chicago” einlud.
Allerdings sollte dieser Erfolg nicht lange anhalten. 1986 wurde AMD von einer Krise, verursacht
durch die aufkommende Konkurrenz aus Japan, geschüttelt. Neue Märkte mußten gefunden werden! Daher konzentrierte man sich 1989 unter anderem auf Mikroprozessoren, die kompatibel zu
IBM-Computern sind. Man tätigte große Investitionen im Bereich der Forschung. So entstand beispielsweise das “Submicron Development Centre” in dieser Zeit. Dies alles geschah allerdings
nicht ohne Probleme. Intel verklagte AMD, um den Vertrieb des Am386 zu verhindern, doch 1991
wurde AMD nach einem langen Prozeß Recht gegeben.
1. [AMD 1998a]
Seminar Moderne Prozessorarchitekturen
13
AMD K6/K7-Familie
1993 war der Am486 auf dem Markt und man schloß einen Exklusivvertrag mit Compaq/Digital, so
daß alle Compaqrechner mit AMD-Prozessoren ausgestattet wurden. 1997 erschien der K6 mit
MMX-Unterstützung, 1998 folgten der K6-2 und der K6-III mit 3DNow!.
“Historische” Prozessoren: AMD K5, K6, K6-2 und K6-III
Die K5-Familie2
Der K5, von der Technologie her vergleichbar mit Intels PentiumProzessor, ist ein Prozessor der fünften Generation. Er ist superskalar
und RISC-basiert, d.h. er kann mehrere Operationen gleichzeitig ausführen und verfügt über einen reduzierten Instruktionssatz (“Reduced Instruction Set Code”). Darüberhinaus ist schon out-of-orderexecution möglich, das heißt die Instruktionen müssen nicht in ihrer
eigentlichen Reihenfolge abgearbeitet werden.
Die K6-Familie3 4 5 6 7 8
Die Prozessoren der K6-Reihe sind alle vergleichbar mit Intels
Pentium-2, Pentium Pro, Celeron bzw. Pentium-III. Alle diese
sind Prozessoren der sechsten Generation. Im wesentlichen wurde
das Cache-Verhalten verbessert und der Instruktionssatz gegenüber dem K5 modernisiert. Die größte Neuerung stellen die
3DNow!-Befehle dar. Weiterhin wurde die alte Architektur durch
die Einführung des Super 7-Sokkels erweitert. Dieser unterstützt
bis zu 100 MHz Bustakt sowie AGP2X. Außerdem hat man durch
Integration des Level-2-Caches auf dem Prozessor einen Level-3Cache auf dem Mainboard zur Verfügung, der die Leistung weiter
steigert. So verfügt der K6-III über 32K L1-, 32K L2- und 256K L3-Cache bei vollem Takt. Allerdings haben AMDs Prozessoren der K6-Familie eine schlechte Fließkommarechenleistung, die
eher der von Prozessoren der fünften Generation entspricht.
2.
3.
4.
5.
6.
7.
8.
[AMD 1998b]
[Pabst 1998]
[Pabst 1999a]
[Pabst 1999b]
[Neal 1999]
[IXBT-LABS 1999]
[PAIRNET 1999a]
14
Seminar Moderne Prozessorarchitekturen
3DNow!
3DNow!
3DNow! vs. MMX - Ein Überblick9
Die beiden von AMD bzw. Intel vorgestellten Instruktionssätze 3DNow! bzw. MMX sind im Prinzip ganz verschiedene Technologien, die aber über ähnliches Encoding verfügen und Simultaneous
Instruction Execution unterstützen.
MMX ist eher für integer-intensive Operationen nützlich, etwa für 2D-Graphik-Rendering, denn
MMX besitzt keinerlei optimierte Fließkomma-Operationen. Zudem ist die gleichzeitige Nutzung
von MMX und der FPU nicht möglich.
3DNow! dagegen ist explizit für fließkomma-intensive Berechnungen entwickelt worden, etwa für
3D-Graphik- und Multimedia-Anwendungen.
Intel versucht diesen Rückstand mit dem Pentium-III aufzuholen, bei welchem ISSE (Internet Streaming SIMD Extensions bzw. ehemals KNI (Katmai New Instructions) genannt) eingeführt wurde,
das über ähnliche Features wie 3DNow! verfügt.10
3DNow! näher betrachtet
AMD stellte der Weltöffentlichkeit 3DNow! am 28. Mai 1998 vor.11 Diese Instruktionen werden
von AMDs Prozessoren K6-2, K6-III, Athlon (“K7”) und den Fremdprodukten IDT “Winchip2”
sowie Cyrix “Jalapeno” unterstützt.12
3DNow! erweitert die Prozessor-Mikroarchitektur um 21 SIMD (Single Instruction Multiple Data)
Operationen, welche teils für Integer-, teils für Fließkommaberechnungen zuständig sind. Beispielsweise gibt es spezielle Integeroperationen für schnelle MPEG-Dekodierung. Desweiteren verfügen 3DNow!-unterstützende Prozessoren über zwei parallele vollständig gepipelinete
Ausführungseinheiten (fully pipelined dual execution resources) für 3DNow!, so daß bis zu 2
3DNow!-Instruktionen pro Clock ausgeführt werden können. Insgesamt sind 4 Fließkomma-Kalkulationen pro Clock möglich, also potentiell 1,8 GigaFlops bei 450 MHz. Für Fließkommaberechnungen gibt es einen gemeinsamen Stack, so daß Task Switching zwischen 3DNow!- und MMXOperationen entfällt.13
9. [PAIRNET 1999b]
10.[Neal 1999]
11.[PAIRNET 1999c]
12.[AMDZONE 1999a]
13.[AMDZONE 1999a]
Seminar Moderne Prozessorarchitekturen
15
AMD K6/K7-Familie
Der Neue: AMD Athlon (a.k.a. K7)14 15 16 17 18 19 20 21 22
Allgemeines
Der Athlon, Codename K7, ist der erste Prozessor der siebten
Generation auf dem Markt. Er kann mit Taktraten weit jenseits
von 500 MHz getaktet werden und wird zunächst in 0,25 µmTechnologie gefertigt. Geplant ist jedoch ein Shrink auf 0,18 µm
bis Ende 1999, wodurch Taktraten noch höherer Größenordnung
möglich werden. Wie weit die Taktrate potentiell gesteigert werden kann wird am Beispiel des K6-III deutlich, welcher bei 166
MHz startete und inzwischen bei 700 MHz angelangt ist.
Der Projektleiter der Entwicklungsabtetilung des Athlon, die nur 18 Monate von der Planung bis
zur Fertigung des ersten Prozessors benötigte, war Dirk Meyer, ein ehemaliger Alpha-Mitarbeiter.
Damit hat sich AMD in Rekordtempo an die Spitze der Prozessorhersteller gesetzt, denn die Konkurrenten Intel und Cyrix können ihre vergleichbaren Prozessoren der siebten Generation (Codenamen “Willamette” & “Foster” bzw. “Jalapeno”) voraussichtlich erst frühestens Mitte 2000 auf den
Markt bringen.
Die 3DNow!-Operationen profitieren von den Verbesserungen am Chipdesign. Dies zeigt ein Beispielprogramm, das Vektor-Transformierung durchführt:
Der K6-2 braucht 20 Zyklen pro Vektor, der Athlon
nur etwa 14. Im Vergleich dazu benötigt der Pentium-III mit ISSE-optimiertem Code immer noch ca.
18 Zyklen für die gleiche Aufgabe. Der maximale
Throughput für 3DNow! bleibt nach wie vor bei 4
Operationen pro Zyklus, und die Peak-Fließkommaleistung bei 500 MHz liegt bei 2 GigaFlops.23
Der EV-6 Bus von Alpha
AMD hat das Busprotokoll EV-6 von Alpha lizensiert, anstatt das Busprotokoll GTL+ von Intel zu
benutzen. Damit einhergehend ist nun auch AMD vom Sockel-Design zum Slot-Design übergegangen. Zum Einsatz kommt der Slot A, der auch für
Alpha-Prozessoren verwendet wird. Die Slots von
Intel (Slot 1) und AMD (Slot A) unterscheiden sich
elektrisch, mechanisch sind sie jedoch gleich,
wodurch die bestehenden Zulieferfirmen von Intel
problemlos auch AMD mit Mainboard-Teilen bedienen können, so daß die Mainboards relativ günstig
hergestellt werden können.24
14.[Meyer 1998]
15.[AMDZONE 1999b]
16.[Cholewa 1999]
17.[Gelas 1998b]
18.[Gelas 1999a]
19.[Gelas 1999b ]
20.[Hsieh 1999]
21.[Pabst 1998]
22.[Weber 1998]
23.[Gelas 1999a]
16
Seminar Moderne Prozessorarchitekturen
Der Neue: AMD Athlon (a.k.a. K7)
Für den Bustakt sind Einstellungen von 40
bis 400 MHz möglich bei einer Busbreite
von 64 Bit. Weiterhin wird AGP4X unterstützt. Der Speicherzugriff ist bei einer
Bandbreite von 1,6 GB/sec bei 200 MHz
Bustakt erheblich schneller als bei Intel.
Dementsprechend können schnelle Speicherbausteine wie RAMBUS oder
DDRRAM (Double Data Rate RAM) eingesetzt werden. Es ist aber weiterhin auch
der Betrieb von SDRAM möglich, ohne
dadurch etwa das Gesamtsystem auszubremsen, da es getrennte Datenpfade (256
Bit; 100, 133 oder 200 MHz Takt) für den
Speicherzugriff gibt. Der Addreß-Space umfaßt bei Slot A 64 GB, im Gegensatz zu den 4 GB, die
mit Slot 1-Systemen möglich sind.
Die Chipsätze für Mainboards werden voraussichtlich von VIA, Acer und AMD selbst hergestellt.25 Somit ist die Verfügbarkeit passender Slot A-Mainboards sichergestellt. Intel dagegen
plant den Camino-Chipsatz für den Pentium-III
erst für Ende 1999. Dieser Chipsatz wird zwar
auch AGP4X unterstützen, an Speicher ist
jedoch nur RAMBUS vorgesehen und der
Bustakt ist auf lediglich 133 MHz beschränkt.
Hier liegt AMD also zur Zeit klar vorne.
Der wesentliche Vorteil von EV-6 ist die Tatsache, daß es sich um einen Point-To-Point-Bus
handelt. Hierdurch lohnt der Einsatz von mehreren Prozessoren erheblich mehr. Jeder Prozessor hat einen eigenen Bus, so daß der Bus bei
Einsatz vieler Prozessoren nicht schnell “voll”
ist, wie es bei Intel-Multiprozessor-Systemen mit GTL+ häufig der Fall ist. Diese Intel-Systeme
sind kaum mit mehr als vier Prozessoren gleichzeitig bei 100 MHz Bustakt betreibbar, da es nur
einen einzigen Bus für I/O, AGP und PCI gibt.
EV-6 bietet dagegen eigene Datenpfade zu den
einzelnen Prozessoren, zum gemeinsamen Speicher, zu AGP und zu PCI. Das Problem des
Memory-Sharing erledigt der Chipsatz. Man hat
hier also wahrhaft “scalable multiprocessing capabilities”.
Cache-Architektur
Der AMD Athlon verfügt über 128 KB Level-1Cache, von denen je 64 KB für Data- und Instruction-Cache vorgesehen sind. Dies ist doppelt so
viel wie AMD K6-2 und AMD K6-III haben und
sogar viermal so viel wie der Pentium-2 hat. Der
Celeron A verfügt über die gleiche Menge an L2Cache. Der L2-Cache des AMD Athlon ist On-Cartridge und kann 512 KB bis 8 MB groß sein. Er
24.[Cholewa 1999]
25.[Cholewa 1999]
Seminar Moderne Prozessorarchitekturen
17
AMD K6/K7-Familie
kann von 1/4 bis Full Speed getaktet sein, wobei 1/3 der Default-Wert ist, da er das beste Preis-/
Leistungsverhältnis bietet.
Mit diesen vielfältigen Optionen und vor allem durch die große Ausbaufähigkeit des L2-Caches auf
bis zu 8 MB und die neue, sehr gute Multiprozessorfähigkeit dringt AMD nun auch in den Servermarkt ein, den bisher Intel mit dem Xeon, der übrigens nur auf 2 MB L2-Cache aufgerüstet werden
kann, bediente.
18
Seminar Moderne Prozessorarchitekturen
Der Neue: AMD Athlon (a.k.a. K7)
Athlon-Architektur
Der Athlon verfügt über 3 parallele x86-Instruction-Decoding-Units, welche die Instruktionen in
fixed-length “Makro-Operationen”, die aus ein bis zwei Operationen bestehen, übersetzen. Diese
werden an die Instruction Control Unit weitergeleitet, in der 72 Instruktionen pufferbar sind, und
die zwei verschiedene Pipelines hat: direct path für common operations und vector path für komplexere x86-Instruktionen, wobei diese im Macro Code ROM (MROM) nachgeschlagen werden. Weiterhin handelt es sich um eine 9-issue superscalar microarchitecture, welche im Einzelnen aus 3
Load-/Store-Units mit 15 Stufen, 3 superskalaren Integer-Units mit 10 Stufen (je 1 Integer Execution und Address Generation Unit) und 3 superskalaren FPU-/Multimedia-Units (FADD + MMXALU + 3DNow!, FMUL + MMX-ALU + 3DNow!, FSTORE) mit 15 Stufen besteht. Es gibt also 9
Execution Units. Der Pentium-III dagegen hat gerade einmal 5 Execution Units.
Ferner erfolgt dynamisches Scheduling und Out-Of-Order Execution, wobei 18 Integer-Operationen und 36 Fließkomma-Operationen durch die Scheduler verteilt werden können. Diese Werte
scheinen zufällig, sind aber explizit
so gewählt, daß maximale Performance auf dem gegebenben DieSpace erreicht wird. Man sieht, Pipelining wird in extremem Maße
betrieben.
Mit 9 Stufen ist die Pipeline sehr
tief, was sehr hohe Taktraten ermöglicht. Außerdem wird Superskalarität
im Athlon großgeschrieben. Im Vergleich erledigen die 3-way-superskalaren Prozessoren K6-III 1.8, der
Pentium-III 2.1 und der Athlon 2.52.8 x86-Instruktionen durchschnittlich pro cycle; die Parallelität der Ressourcen wird also fast optimal genutzt, und das schon bei den Durchschnittswerten.
Damit diese enorm vielen Instruktionen möglichst nicht unnütz abgearbeitet werden, wurde eine
Branch Prediction Table mit 2048 Einträgen und ein Return Stack mit 12 Einträgen vorgesehen.
Seminar Moderne Prozessorarchitekturen
19
AMD K6/K7-Familie
Ausblick auf den AMD K8 (“Sledgehammer”)26
Der “AMD K8” wird ein
Prozessor der achten
Generation sein.
Geplant sind für die Entwicklung wie beim Athlon etwa 18 Monate, das
heißt der erste “K8”Prozessor soll zwischen
dem dritten Quartal
2000 und dem zweiten
Quartal 2001 fertig sein.
Er wird dann voraussichtlich in Konkurrenz
zum “Intel Merced” stehen. Für die Fertigung
ist 0,13 µm-Technologie
anvisiert.
Der “K8” soll etwa so
schnell sein wie die
schnellsten Prozessoren von Alpha dann sein werden, das hofft man wenigstens.
Aber man darf nicht vergessen: dies alles sind nur Spekulationen und optimistische Schätzungen
von AMD.
26.[Craighead 1999]
20
Seminar Moderne Prozessorarchitekturen
Zusammenfassung
Zusammenfassung
Wie sich die - zur Zeit immer noch sehr angespannte - Situation AMDs in der Zukunft entwickeln
wird ist schwer abzuschätzen. Immerhin hat AMD es geschafft, vor Intel einen Prozessor der siebten Generation in Rekordzeit zur Marktreife zu bringen. AMD scheint vom Platz des “Ewigen
Zweiten” entkommen zu sein. Selbst bei der sonst immer so schwachen FPU-Leistung hat man mit
einem wahren Performance-Sprung nicht nur zu Intel aufgeschlossen, sondern sie sogar überholt.
Die Zusammenarbeit mit DEC war erfolgreich und hat AMD den leistungsfähigen EV-6 Bus eingebracht, welcher dem GTL+ Bus von Intel nicht nur wegen der besseren Multiprozessor-Unterstützung (“scalable multiprocessing capabilities”) weit überlegen ist. Es sind sehr hohe
Taktfrequenzen, angefangen bei 500 MHz - geplant sind weit über 1 GHz, möglich. Die CacheArchitektur ist hochentwickelt und dank der vielfältigen Optionen für Speichergröße und -takt individuell an die Bedürfnisse verschiedenster Märkte, vom Privatmann bis zum Server-Betreiber,
anpaßbar. Damit könnte AMD insbesondere den lukrativen Servermarkt, einen Hauptnachfrager für
Multiprozessor-Systeme, den man bisher durch fehlende Multiprozessor-Unterstützung der AMDProzessoren nicht bedienen konnte, erobern. Aber auch der geneigte Computerspieler wird vom
Athlon nicht enttäuscht: Mit 3DNow! hat man einen etablierten Instruktionssatz, für den schon vielfältige Anwendungen und Spiele existieren, die automatisch vom Geschwindigkeitsvorteil des Athlon profitieren. Der Pentium-III dagegen führt mit ISSE einen völlig neuen Instruktionssatz ein, der
unabhängig davon, ob er besser ist als 3DNow!, noch von sehr wenig Software unterstützt wird.
Der Athlon hat also als derzeit leistungsfähigster x86-Prozessor durchaus das Potential, AMD aus
der Krise herauszuführen. Es mangelt jedoch an einer geeigneten Marketingstrategie. Hier hat Intel
immer noch einen großen Image-Vorteil, den AMD versäumt aufzuholen. Denn leider zählt bei vielen Käufern immer noch einzig der “Intel inside”-Aufkleber.
Seminar Moderne Prozessorarchitekturen
21
AMD K6/K7-Familie
Quellenverzeichnis
[AMD 1998a]
History, AMD, 29.09.1998,
http://www.amd.com/about/history.html
[AMD 1998b]
AMD-K5 Processor Overview, AMD, 30.06.1998,
http://www.amd.com/products/cpg/k5/20010b.html
[AMDZONE 1998]
AMD Zone Reports: AMD On 3DNow! vs. KNI, AMD Zone, 12.02.1998,
http://www.amdzone.com
[AMDZONE 1999a]
AMD Zone’s 3DNow! Section, AMD Zone,
http://www.amdzone.com/3dnow/
[AMDZONE 1999b]
Interview With Keith Galocy of AMD by AMD Zone, AMD Zone,
http://www.amdzone.com/
[Cholewa 1999]
John Cholewa: JC's AMD K7 Preview, 14.04.1999,
http://www.chiptech.com/jc/article.cgi?AMD/K7_Preview
[Craighead 1999]
Matt Craighead: Storm3D.Com's K7 Preview, 07.03.1999,
http://www.storm3d.com/k7/
[Cross 1999]
Jason Cross: AMD K7: Aiming the big guns at Intel's flagship, 12.04.1999,
http://www.
[Gelas 1998a]
Johan De Gelas: Understanding the Performance of the K6-3, 31.12.1998,
http://www.aceshardware.com
[Gelas 1998b]
Johan De Gelas: The K7 Versus Katmai, the Battle of the x86-Titans,
http://www.aceshardware.com
[Gelas 1999a]
Johan de Gelas, Understanding the K7: Hype or Next Generation CPU?, 01.04.1999,
http://www.aceshardware.com
[Gelas 1999b]
Johan De Gelas: Understanding the K7: Slot A, RAM, and Cache, 24.03.1999
http://www.aceshardware.com
[Hsieh 1999]
Paul Hsieh: The Next Generation of Microprocessors,
http://www.nettaxi.com/citizens/qed/newcpus.html
22
Seminar Moderne Prozessorarchitekturen
Quellenverzeichnis
[IXBT-LABS 1999]
AMD K6-III 400MHz Review, IxBT-Labs
http://www.ixbt-labs.com/cpu/k6-iii.shtml
[Meyer 1998]
Dirk Meyer: AMD-K7 Technology Presentation, AMD, 13.10.1998,
http://www.amd.com/products/cpg/k7/pres/k7pres.pdf
[Neal 1999]
Brian Neal: Onboard Cache, Other Caches, and the K6-3,
http://www.aceshardware.com
[Pabst 1998]
Thomas Pabst: AMD Moves onto the Overtaking Lane, 15.10.1998,
http://www.tomshardware.com
[Pabst 1999a]
Thomas Pabst: Intel's Enemy No. 1 - The AMD K6 CPU,
httpb://www.tomshardware.com
[Pabst 1999b]
Thomas Pabst: AMD’s K6-2 Processor,
http://www.tomshardware.com
[PAIRNET 1999a]
AMD's K6-2, Pairnet,
http://www.hardware.pairnet.com
[PAIRNET 1999b]
3DNOW! sounds a lot like MMX. Don't they do the same thing?, Pairnet,
http://www.hardware.pairnet.com
[PAIRNET 1999c]
What is 3DNow!?, Pairnet,
http://www.hardware.pairnet.com
[Weber 1998]
Fred Weber: Future PC System Architecture - Internal,
http://www.amd.com/.../winhec.pdf
Seminar Moderne Prozessorarchitekturen
23
AMD K6/K7-Familie
24
Seminar Moderne Prozessorarchitekturen
K APITEL 3
PowerPC/MPC750
Oliver Fritzen
PowerPC - Geschichte
Die PowerPC-Architektur stammt aus dem Jahr 1993 und wurde entwickelt vom PowerPC-Konsortium, bestehend aus den Unternehmen Apple, IBM und Motorola. Die Architektur ist im Wesentlichen eine Weiterentwicklung der POWER1-Architektur (IBM, 1990), einer RISC-Architektur für
Anwendungen im professionellen Workstation-Bereich (z.B. IBM RS/6000er Reihe); der PowerPC
ist sogar assemblerkompatibel zum POWER-Chip (einige POWER-Befehle sind im PowerPCBefehlsmix nicht mehr enthalten und werden mittels Traps über Software emuliert).
Implementierungen:
Bisher existieren folgende Implementierungen der PowerPC-Architektur:
PowerPC 601, 603, 604, MPC740/750
Für Neuentwürfe empfohlen wird zur Zeit (Juli 1999) die PC740/750-Reihe; aktuelle Apple MacIntosh Desktop-Rechner werden mit einem den 750er PowerPC-Prozessor (G3) mit 400 MHz und 1
MByte Level-2-Cache verkauft.
Der Motorola MPC750 - technischer Aufbau
MPC7502 - Technische Daten
Beim MPC/PPC750 handelt es sich um eine reine 32-Bit-Implementierung3 der PowerPC-Architektur mit einem 32-Bit-Adreßbus und einem 64-Bit-Datenbus. Nachfolgend einige technische
Angaben:
1. Performance Optimized With Enhanced RISC
2. MPC740 und MPC750 unterscheiden sich nur dadurch, daß der MPC740 keinen Level-2-Cache hat und
auch keine entsprechenden Steuerleitungen, weshalb der 740er Chip pinkompatibel zur 60x-Reihe ist und
der 750er nicht
3. Es existiert auch eine vollständige 64-Bit-Spezifikation für die PowerPC-Architektur
Seminar Moderne Prozessorarchitekturen
25
PowerPC/MPC750
• Taktrate:300,333,366,400 MHz
• L1-Cache:2 x 32 KByte
• L2-Cache:256, 512, 1024 MByte
• Transistorenzahl:ca. 6.35 Millionen
• Stromverbrauch:ca. 8 Watt (Hochlast, mit 300 MHz getaktet)
• SPECint-Benchmarkwert:18.8 (400 MHz/1 MByte Level-2-Cache mit 200 MHz)
• SPECfp-Benchmarkwert:12.2 (400 MHz/1 MByte Level-2-Cache mit 200 MHz)
Der MPC750 verfügt außerdem über drei verschiedene Stromsparmodi (nap doze sleep) sowie über
eine effiziente Wärmeregulierung, die sogenannte Thermal Assist Unit (TAU), die bei zu starker
Wärmelast die Befehlsausführung unterbricht oder verlangsamt.
MPC750 - Technischer Überblick
Als moderne Prozessor-Architektur ist PowerPC ein typischer Vertreter des RISC-Sparte (siehe
RISC-Kapitel); die Instruktionsausführung ist vierfach in Pipelines organisiert. Folgende Ausführungsstufen werden unterschieden:
• FE - instruction FEtch
• DE - instruction DEcode
• EX - instruction EXecute
• WB - instruction Write Back
• Fetch-Stufe:Befehle werden aus dem Speicher geholt
• Decode-Stufe:Opcode wird decodiert und Befehl identifiziert
• Execute-Stufe:Befehl wird ausgeführt
• Write Back-Stufe: Ergebnis der Operation wird in das Zielregister zurückgeschrieben
Der Prozessor verfügt über mehrere (parallel benutzbare) Ausführungseinheiten (Execution Units),
die es möglich machen, zwei (verschiedenartige) Operationen, z.B. eine Addition und ein Load in
EINEM Taktzyklus auszuführen. Prozessoren mit mehreren unabhängigen Instruktionseinheiten
werden als Superskalare bezeichnet, in Unterscheidung zum einen zu einfachen Skalarprozessoren,
die nur eine Befehlsausführung pro Taktzyklus erlauben, und andererseits zu Vektorprozessoren,
die es ermöglichen, n gleichartige Operationen gleichzeitig auszuführen.
RISC
Mikroprozessorentwürfe teilen sich in zwei Gruppen: CISC und RISC. CISC - Complex Instruction
Set Computer - haben typischerweise einen großen Befehlssatz mit einer Vielzahl an komfortablen
Befehlen mit aufwendiger Funktionalität, welche aber den Betrieb und auch den Entwurf solcher
Maschinen teuer und langsam macht.
Dem gegenüber steht der RISC-Entwurf: typische RISC-Prozessoren haben einen “kleinen”
Befehlsmix mit wenigen verschiedenen Befehlen von vergleichsweise einfacher Funktionalität.
Diese konzeptuelle Einfachheit macht es - nebst einiger anderer mit RISC assoziierten Merkmale möglich, schnellere Prozessoren zu entwerfen und zu bauen. Einige dieser Merkmale sind:
• kleine Befehlssätze mit “primitiven” Operationen
26
Seminar Moderne Prozessorarchitekturen
Aufbau und Arbeitsweise des MPC750-Prozessors
• alle Befehle sind gleichlang (Alignment)
• Pipelining Load/Store-Disziplin4
Typische Vertreter der RISC-Technik sind: DEC Alpha-Prozessoren, SUN SPARC, die Stanford
MIPS, Intel i860 und natürlich der PowerPC.
Typische CISC-Maschinen sind die Motorola 68000-Serie sowie die frühen Modelle der Intel
80x86-Reihe. Die späteren Intel-x86-Modelle sowie dazu kompatible Prozessoren (AMD K-x) sind
eher als Hybride zu bezeichnen, da sie zwar vom Grundkonzept her (Befehlssatz, Microcoding) auf
dem CISC-Rechner 8086 beruhen, die Entwickler aber mit der Zeit dazu übergegangen sind, immer
mehr RISC-typische Features, wie z.B. Pipelining, zu verwenden.
Instruction Unit
64 Bit
=
2 Befehle
BPU
BTIC(64x2)
BHT(512)
CTR
Completion
Unit
128 Bit
=
4 Befehle
Fetcher
Fetcher
CR
LR
Dispatcher
Dispatcher
Instruction
Queue
Reorder
Buffer
IU1
IU1
BPU:
BTIC:
BHT:
CTR:
LR:
IU:
SRU:
LSU:
FPU:
IU2
IU2
Branch Processing Unit
Branch Target
Instruction Cache
Branching History Table
Count Register
Link Register
Integer Unit
System Register
Unit
Load/Store Unit
Floating Point
Unit
SRU
SRU
LSU
LSU
FPU
FPU
Data Cache
Instr. Cache
Data MMU
Instruction
MMU
SR
SR
SR
SR
DTLB
DTLB
DBAT/IBAT:
DTLB/ITLB:
DBAT
DBAT
ARRAY
ARRAY
ITLB
ITLB
IBAT
IBAT
ARRAY
ARRAY
Data/Instruction Block Array Translation
Data/Instruction Target Lookaside Buffer
Aufbau und Arbeitsweise des MPC750-Prozessors
Die Vorgänge im Inneren des Prozessors werden unterteilt in sogenannte Units, die in Abb. 1.1
beschrieben sind. Ich möchte hierbei anmerken, dass dieses Diagramm nur dazu dient, logischfunktionale Zusammenhänge im Prozessor darzustellen; diese Darstellung stimmt i.a. NICHT überein mit der physikalischen Funktion der Prozessorhardware.
4. Als Load/Store-Architektur bezeichnet man solche Rechner, die arithmetisch-logische Operationen nur
zwischen Registern, nicht aber zwischen beliebigen Speicherzellen ausführen können. Solche Operationen
haben dann stets die Form:
lade Argument(e) in Register (LOAD)
führe Operation aus, d.h. schreibe Ergebnis in weiteres Register
schreibe Inhalt des Ergebnisregisters in den Hauptspeicher zurück (STORE)
Seminar Moderne Prozessorarchitekturen
27
PowerPC/MPC750
1. Instruction Unit (Fetch/Decode-Stage)
Die Instruction Unit erledigt die Stufen FETCH und DECODE der Instruktionspipeline:
Der Fetcher lädt bis zu vier Befehle gleichzeitig (in einem Taktzyklus) aus dem Instruktionsspeicher; wie viele Befehle tatsächlich geladen werden, hängt von der Anzahl der freien Slots in der
Instruction Queue ab: sind dort in einem Zyklus 4 Slots frei, so werden in der nächsten Runde 4
Befehle nachgeladen, gab es nur einen freien Slot, holt der Fetcher nur einen Befehl.
• Instruction Queue/Scheduler
Die Instruction Queue puffert ankommende Befehle aus dem Codespeicher zwischen, um sie
jederzeit sofort zugreifbar zu machen. In jeder Runde (Taktzyklus) werden die ein oder zwei
“obersten” Queue-Positionen an den Dispatcher weitergegeben; die darauffolgenden Befehle
rücken in der Queue nach. Der Dispatcher stellt mittels des Opcodes fest, um was für Befehle es
sich handelt (Decoding), ob zwischen den Anweisungen Konflikte auftreten (Beispiel: eine
Instruktion schreibt in ein Register, die nächste liest aus demselben Register). Falls dies nicht
der Fall ist, werden die Befehle an die entsprechenden Execution Units weitergegeben und im
selben Takt zwei neue Instruktionen aus der Instruction Queue nachgezogen. In der Instruction
Queue landen sämtliche Befehle mit Ausnahme aller Verzweigungen: diese werden weitergegeben an die
• Branch Prediction Unit (BPU).
Diese Einheit ist zuständig für die Verabeitung von Verzweigungen: bedingte und unbedingte
Sprünge sowie der Aufruf von Subroutinen. Ausserdem wird hier die Sprungvorhersage geleistet. Für die Adressberechnung verfügt die BPU über ein eigenes Addierwerk sowie eine
Anzahl von reservierten Registern, so dass es nicht auf die allgemeine Prozessorarithmetik in
den Execution Units zugreifen muß.
Aufgrund des Pipelining (siehe Kap. xxx) ergibt sich die Notwendigkeit der Sprungvorhersage:
ein bedingter Sprung besteht aus einer Sprungbedingung und einem Sprungziel. Trifft die
Bedingung zu, wird der Sprung ausgeführt, trifft sie nicht zu, so wird die Programmausführung
einfach nach dem Sprungbefehl fortgesetzt. Die Sprungzieladressenberechnung geschieht mittels der BPU-Adresslogik (s.o.), so dass das Ergebnis direkt zur Verfügung steht. Die Sprungbedingung kann aber nur in der Execution Unit ausgeführt werden, und diese ist in sich wieder
“pipelined”: man muss also sozusagen im Voraus wissen, welche Befehle die Execution Unit in
einem, zwei, drei oder vier Takten ausführen soll. Dies ist bei sequentieller Programmausführung nicht schwierig: man gibt der Unit einfach die nächsten x Befehle. Bei einem bedingten
Sprung aber müßte man vorab wissen, welche Verzweigung genommen wird. Dieses Problem
geht man mittels Sprungvorhersage (Branch Prediction) an.
Die Sprungvorhersage für bedingte Sprünge funktioniert in zwei Modi:
a) statische Sprungvorhersage: zu jedem Sprungziel wird per default-Annahme oder mittels
eines mitgegebenen Bits entschieden, ob ein Sprung genommen wird oder nicht (man geht z.B.
davon aus, daß für einen Sprung zurück i.a. die Sprungbedingung eintritt - siehe while-Schleife
- , für einen Sprung nach i.a. vorne nicht).
b) dynamische Sprungvorhersage: über die Sprungquote bisheriger Sprünge wird in der Branch
History Table (BHT) buchgeführt; aufgeschlüsselt nach den Sprungzielen gibt es für jede Zieladresse vier mögliche Zustände: taken, strongly taken, not-taken und strongly not-taken. So
lässt sich jeder (bereits bekannten) Zieladresse eine Wahrscheinlichkeit zuordnen.
Ausserdem enthält der Branch Target Instruction Cache (BTIC) die 64 häufigsten Sprungziele5,
so dass hier nun also die Befehle bekannt sind, die an der Sprungadresse stehen (meist paarweise) und nicht nur deren Adressen, um die Befehle DANN ERST aus dem Instruktionsspei-
5. ich war leider nicht in der Lage, herauszufinden, ob der BTIC oder andere Caches in der Lage
sind. mit selbstmodifizierendem Code klarzukommen - auch nicht intensiver Webrecherche
28
Seminar Moderne Prozessorarchitekturen
Aufbau und Arbeitsweise des MPC750-Prozessors
cher zu laden, was mindestens einen, schlimmstenfalls etliche Zyklen kosten kann (cache
misses u.a.).
Auf diese Weise ist es nun möglich, einen “educated guess”, eine intelligente Schätzung anzustellen, ob ein Sprung genommen wird oder nicht. Trotzdem kommt es hin und wieder zu Fehlvoraussagen; es muss also eine Rückfallebene für sogenannte Mispredictions geben. Diese sieht
so aus: Bevor der Dispatcher einen Befehl in die Execution-Unit-Pipeline gibt, erhält dieser
Befehl einen Platz im Reorder Buffer in der Completion Unit. Die Operationen, die in der Execution Stage ausgeführt werden, schreiben ihre Ergebnisse nicht direkt in die Zielregister, sondern in sogenannte Register Buffers. Befehle, die nicht auf einem vorhergesagten Zweig liegen,
werden - sobald fertig - aus dem Reorder Buffer gelöscht und der Wert im Register Buffer in
das entsprechende Zielregister zurückgeschrieben (write-back). Bei Befehlen, die auf einem
“unsicheren” (d.h. noch nicht aufgelösten) Zweig einer Sprungvorhersage liegen, wird die
write-back-Stufe solange verzögert, bis die Sprungvorhersage aufgelöst ist. War die Vorhersage
korrekt, so findet das write-back statt und die Befehlsausführung geht regulär weiter. War Die
Vorhersage falsch, findet ein flush statt: es werden alle Befehle, die zum unsicheren Zweig
gehören, aus der Execution Pipeline “hinausgespült” (daher “flush”), ohne dass ein write-back
stattgefunden hat. Auif diese Weise wird gewährleistet, dass keine Ergebnisse aus falsch vorhergesagten Sprüngen Register- oder Speicherinhalte verändern können.
2. Execution Units (Execution-Stage)
Das Ausführen arithmetischer oder binärer Operationen, laden und speichern von Registerinhalten
oder der Zugriff auf Systemvariablen spielen sich in den Execution Units ab, die zusammen die
dritte Pipelining-Ebene (Execution Stage) bilden. Es existieren insgesamt fünf Execution Units:
• zwei Integerarithmetikeinheiten (IU1 und IU2),
• eine Einheit für Gleitkommaarithmetik (FPU, Floating Point Unit),
• die Load/Store-Unit (LSU) sowie die
• System Register Unit (SRU).
Die Integer Units IU1 und IU2 teilen sich 32 GPRs - General Purpose Register, Register für allgemeine Verwendung - von je 32 Bit Breite, und beherrschen Addition/Subtraktion sowie alle gängigen Binär- sowie Shiftoperationen. Multiplikation und ganzzahlige Division stellt lediglich IU1 zur
Verfügung.
Die Floating Point Unit verfügt über 32 Floating Point Register (FPRs) von je 64 Bit Breite, so daß
je ein Register die double precision Darstellung einer reellen Zahl fassen kann. Die FPU unterstützt
den IEEE-Floating-Point Standard 754 in Hardware; ausserdem gibt es einen non-IEEE-mode für
zeitkritische Operationen. Die FPU ist in sich wiederum aufgeteilt in 3 Pipeline-Stufen: normalizedenormalize, add/multiply und round/convert.
Die Load/Store Unit (LSU) ist (wer hätte das gedacht?) für das Ausführen von loads und stores
zuständig, also dafür, Werte aus dem Speicher in Register zu laden und später einen zweiten Wert
in den Speicher zurückzuschreiben (siehe dazu Fußnote zu Load/Store-Architekturen).
In den Systemregistern stehen systemspezifische Daten wie Uhrzeiten, Maschinenstatus, exception
bits bestimmter Operationen wie overflow/underflow, Systemzeit etc. Der Zugriff wird über die
System Register Unit (SRU) geregelt, die wenig mehr ist als eine Anzahl von speziellen Registern
(dedicated Registers), die oft nur für das Betriebssytem sichtbar sind und nicht für den Programmierer bzw für die Applikation.
3. Die Completion Unit (write-back stage)
Die Completion Unit enthält den Reorder Buffer, in dem alle Befehle enthalten sind, die zur Zeit in
der Execution Stage bearbeitet werden. Wenn die Befehle abgearbeitet sind und sichergestellt ist,
Seminar Moderne Prozessorarchitekturen
29
PowerPC/MPC750
daß keine Misprediction eingetreten ist, werden die Werte aus den Register Buffers in die eigentlichen Register zurückgeschrieben und der Befehl aus dem Reorder Buffer gelöscht (retired). Näheres über Sprungvorhersage und Reorder Buffering auch im Abschnitt über die Branch Prediction
Unit.
Weitere Features
Die Entwickler haben den PC750 noch mit weiteren Merkmalen ausgestattet, die den Prozessor
besonders geeignet machen für den Einsatz in Monoprozessorumgebungen im PC-Bereich und bei
Laptops, Handhelds u.ä.
Thermal Management - Power Saving
Es gibt einen Hitzesensor, der in regelmäßigen Abständen die Temperatur im Prozessorkern überprüft. Die Temperaturdaten werden digitalisiert und an die Thermal Management Unit (TAU) weitergegeben. Wird ein bestimmter Grenzwert überschritten, senkt die TAU selbständig (mittels eines
speziellen Interrupts) die Prozessorleitung: es werden Leerzyklen (waiting cycles) eingefügt oder
die Abarbeitung wird komplett ausgesetzt. Ausserdem verfügt der Prozessor über drei kaskadierte
Stromsparmodi: nap, doze und sleep, die ebenfalls schrittweise die Wärmeleistung des Prozessors
verringern. Diese beiden Merkmale erleichtern den Einsatz des Prozessors gerade in hitzeempfindlichen Umgebungen wie in Lap-,Palmtops, Notebooks, Handhelds usw, wo der Energieverbrauch
und die Kühlung erhebliche Probleme bereiten. Die Wärmeleistung, die zwischen 3 (Sleep-Modus)
und 8 Watt (Hochlastmodus bei 400 MHz) liegt, ist erheblich geringer als die der meisten anderen
Prozessorfamilien mit vergleichbaren Leistungsmerkmalen (Bsp. DEC-Alpha-Prozessoren liefern
60 Watt Abwärme und mehr).
Performance Monitoring
Diese Technik erlaubt das Erfassen und Zählen von Instruktionen zur Laufzeit, ohne dabei zusätzlichen Overhead zu verursachen (und so das Ergebnis zu verfälschen). Der MPC740/750 stellt dafür
bestimmte Register zur Verfügung, mit denen man Gruppen von Instruktionen spezifizieren und
über deren Vorkommen Statistik führen kann. Performance Monitoring ist von großer Bedeutung
für die Analyse, das Debugging und die Optimierung von Assembler- und Systemsoftware.
Blick in die Zukunft
Von einigen wurde der PowerPC bereits totgesagt, andere prophezeien ihm noch eine große
Zukunft. Die Fakten, soweit bekannt, sehen so aus:
Apple und Motorola haben für Mitte 1999 (was das auch heißen mag) einen neuen PowerPC-Prozessor angekündigt, der die bisher verwendeten MPC750-Prozessoren im MacIntosh ablösen soll.
Dessen Features umfassen unter anderem:
• Taktraten von 450 MHz und mehr
• Unterstützung von bis zu 2 MByte Level-2-Cache
• AltiVec-Erweiterung (Multimedia-Erweiterung mit mehreren 128-Bit-registern, auf denen man
SIMD-Operationen ausführen kann)
• Herstellung im 0.18 mikrometer-Prozess auf Kupferbasis SPECint- und SPECfp-Benchmarkwerte von 20.0 und mehr
30
Seminar Moderne Prozessorarchitekturen
Verwendete Literatur:
Der Prozessor wird voraussichtlich ca. 10.5 Millionen Transistoren haben - ca 1.1 Millionen davon
entfallen auf die AltiVec-Erweiterung, was die Platine größer und den Prozessor teurer machen
wird, was wohl der Hauptgrund ist wieso IBM AltiVec nicht in ihre PowerPC-Reihe übernimmt.
Ungeachtet dieser Differenzen haben sich IBM und Motorola auf eine neue Embedded-Spezifikation für PowerPC-Prozessoren geeinigt, IBM entwickelt eine PowerPC-Variante (Projektname
“Gekko”) für die nächste Nintendo-Spielekonsole mit dem Arbeitstitel “Dolphin”.
Verwendete Literatur:
“MPC750 RISC Microprocessor Technical Summary”, Motorola Inc. 1/99
“MPC750 RISC Microprocessor Hardware Specifications”, Motorola Inc. 6/98
S. Weiss, J.E. Smith: “POWER and PowerPC”, Morgan Kaufmann Publishers, 1994
“PowerPC Microprocessor Common Hardware Reference Platform: A System
Architecture”, Morgan Kaufmann Publishers, 1996
“C’t - Magazin für Computer und Technik” 11/98 S29-33
Hans Messmer:”Pentium”, Addison-Wesley 1994
Hennessy/Patterson: “Computer Organization and Design”, Morgan Kaufmann Publishers,
1994
Seminar Moderne Prozessorarchitekturen
31
PowerPC/MPC750
32
Seminar Moderne Prozessorarchitekturen
K APITEL 4
Alpha-Prozessoren (21x64)
Jürgen Ballmann
Designkriterien
Zum Projektstart im Herbst 1988 wurden folgende Designkriterien für die Prozessorfamilie 21x64
festgelegt:
1. Hohe Rechnenleistung; Dies sollte durch hohe Taktfrequenz, die parallele Ausführung mehrerer
Instruktionen und durch die Benutzung mehrerer Prozessoren erreicht werden.
2. Langlebigkeit; Die Architektur sollte eine »Lebenszeit« von 25 Jahren haben.
3. Kompatibilität mit VAX und MIPS; um VMS und (Digital-) UNIX ohne konzeptionelle Änderungen zu betreiben.
4. großer Adressraum; Dies ist eine direkte Folgerung aus 2.: 32 Bit Adressen sind heute (“within
10 years”[Sites 1992]) schon eine starke Einschränkung für eine Architektur.
Architektur
Die Alpha-Architektur ist eine 64 Bit Reduced Instruction Set Computer Archtektur. Außer LOAD
und STORE greifen keine Operationen auf den Speicher zu. Alle Operationen (außer LOAD/
STORE) finden nur zwischen Registern statt. Es gibt keine condition codes, alle Ergebnisse von
Operationen werden in Register geschrieben, oder lösen Traps aus.
Alle Register sind 64 Bit breit. Im einzelnen sind das:
• 32 Integer Register,
• 32 Floating Point Register,
• 1 PC,
• je 2 Lock Register (für jeden Prozessor in einem Multiprozessorsystem)
• und optionale Register die für Memory prefetch und VAX-Kompatibilität benutzt werden. Das
letzte Integer / Floating Point Register R31 / F31 wertet jeweils nach Null aus.
FP Operationen können in VAX- und IEEE-Format (siehe defered trap/write) jeweils mit einfacher
und doppelter Genauigkeit ausgeführt werden.
Seminar Moderne Prozessorarchitekturen
33
Alpha-Prozessoren (21x64)
Befehlssatz
Für die Adressierung eines Registers werden 5 Bit benutzt, daraus folgt, daß jeweils nur 32 Register
adressierbar sind. Alle Instruktionen sind 32 Bit lang, wovon 6 Bit Opcode sind. Es werden 4 Formate unterschieden:
1. PALCode Format: Eine PALCode-Funktion wird ausgeführt.
2. Branch Format: Das Register RA wird getestet; Fällt der Test positiv aus, wird nach PC + (4 *
Disp) gesprungen. Das Vorzeichen inm Displacement bleibt bei der Erweiterung von 21 auf 64
Bit erhalten. Durch die Multiplikation mit 4 wird erreicht, das nur ganze 32-Bit Befehle
(LONGWORD) adressiert werden können.
3. Load/store Format: Daten werden zwischen RA und der Speicherzelle, die durch RB und dem
vorzeichenbehafteten Displacement bestimmt wird, verschoben.
4. Operate Format: FloatingPoint-Operationen benutzen RA und RB als Quellen und schreiben
das Ergebnis in RC. Das Function-Feld dient als extended Opcode. Integer-Operationen benutzen RA und RB oder eine 8 Bit Zahl als Quellen und schreiben das Ergebnis ebenfalls in RC.
Sieben Bit des Funktion-Felds werden hier als extended Opcode benutzt.
Besonderheiten
Außer 64 Bit werden auch 32 Bit Operationen unterstützt. Diese können in beliebiger Reihenfolge
ausgeführt werden, es gibt keinen speziellen 64 oder 32 Bit Modus.8 und 16 Bit Operationen können nur mit shift/mask und den auf 8/16Bit äquivalenten 32/64-Bit Operationen emuliert werden.
Mit den Befehlen UMUL und UMULH können die unteren/oberen 64-Bit einer “128 Bit” Multiplikation einzeln berechnet werden. Auch eine Integer-Division muß emuliert werden. Dies geschieht
entweder mit PALCode oder bei Division durch eine Konstante mit einer 128 Bit Multiplikation.
Integer und Floating Point Einheiten können nicht gegenseitig auf Register zugreifen. Zwar kann
die FP-Einheit Zahlen umwandlen, aber der Zugriff muß über den Speicher (L1-Cache) erfolgen.
Mit Conditional Move-Befehlen (CMOVxx) können Sprünge vermieden werden.
Defered write/traps
Lese/Schreib-Operationen auf verschiedenen Speicherbereichen werden zu beliebigen Zeitpunkten
tatsächlich ausgeführt. Insbesondere muß die Reihenfolge der Ausführung nicht von der Reihenfolge im Programm abhängen. Da dies besonders in Multiprozessorsystemen zu Problemen führt
kann man mit dem Befehl MB (Memory Barrier) Lese/Schreib-Operationen serialisieren.
Auch Traps können erst mehrere Prozessorzyklen nach ihrer Auslösung, dann zusammen mit anderen, ausgeführt werden. Der Trap-Handler hat dann evtl. Schwierigkeiten die auslösende Instruktion genau zu bestimmen.
Floating Point Operationen sind so nicht mehr IEEE-konform. Traps lassen sich durch den Befehl
TB (Trap Barrier) serialisieren.
34
Seminar Moderne Prozessorarchitekturen
Adressraum
PALCode
Die Privileged Architecture Library ist eine Menge von Makros aus Assemblerbefehlen, die entwickelt wurde um Microcode zu vermeiden (Microcode-befehle können nicht verändert werden
und es wird eine vergleichsweise großer Teil des Prozessors für Befehle reserviert, die selten oder
nie ausgeführt werden).
Eine PALCode-Operation sieht “von aussen” aus, wie eine atomare Operation. Während der Ausführung sind alle Interrupts abgeschaltet. Man hat volle Kontrolle über den Prozessorstatus, kann
auf interne Register zugreifen.
PALCode wird benutzt um Betriebsystem-Operationen auszuführen: Context switch, Interrupt/
Exception-Handling, Hardwareinitialisierung und Speicherverwaltung. Oder um nicht vorhandene
Befehle zu emulieren: z.B. Integer-Divison, HALT oder wie mit “FX32!” einen anderen Prozessor.
Adressraum
Die Alpha-Architektur bietet 64 Bit breite virtuelle Adressen. Eine Adresse besteht aus fünf Teilen
(s. Abb.):
Das “byte in page” Feld ist 13 bis 16 Bit lang. Entsprechend sind die Seiten 8 bis 64 KB groß.
Die Felder “Level 1” bis “Level 3” adressieren eine Seite in der (dreistufigen) Seitentabelle. Sie
sind 10 bis 13 Bit breit.
Im “Fill” Feld wird nur das höherwertigste Bit aus “Level 1” wiederholt, dieses Feld dient nicht zur
Adressierung.
Es sind also maximal 55 Bit (16+3*13=55) als virtuelle Adressen nutzbar. Als physische Adressen
sind nur 48 Bit nutzbar. Dies entspricht 256 TB an adressierbarem Speicher.
Prozessormodelle
21064 (EV4)
Der erste Vertreter der 21x64 Familie hatte nur jeweils eine Integer, Floating Point und Load/Store
Einheit.
Als 21066 bzw. 21068 wurde der 21064 mit eingebautem PCI Interface (33 bzw. 66MHz) für den
Low-Cost Markt gebaut.
21164 (EV5)
Der Nachfolger, 21164, hat eine weitere FP-Einheit und die Load/Store-Einheit kann nun auch Integer-Berechnungen machen. Um die Geschwindigkeit des Prozessors weiter zu steigern wurde er
mit einem 96 KB großen Level 2 Cache (on-chip) ausgerüstet.
Seminar Moderne Prozessorarchitekturen
35
Alpha-Prozessoren (21x64)
Auf den Markt kam er in Varianten von 300 MHz bis ~700 MHz, bei einer Strukturgröße von 0.5
bis 0.28 µm. Für den Low-Cost Markt wurde der 21164PC gebaut: ein verbesserter 21164er Kern
ohne L2-Cache.
21264 (EV6)
Der aktuelle Prozessor, der 21264, hat nun je zwei Integer, Integer/Load/Store und Floating-Point
Einheiten. Einen L2-Cache hat dieser Prozessor nicht, stattdessen verfügt er über einen schnellen
L2-Cache-Bus. Der L2-Cache befindet sich mit dem Prozessor auf einer Daughter-Card (ähnlich
Intel Pentium II). Hergestellt wird der 21264 mit Taktraten von 525 MHz bis 1GHz, bei Strukturgrößen von 0.35 bis 0.18 µm.
Eine Branch Prediction Unit sorgt u.a. dafür, daß bedingte Sprünge, und die folgenden Instruktionen, ausgeführt werden, obwohl die Bedingung für den Sprung noch nicht ausgewertet wurde (speculative execution). Unabhängige Instruktionen werden in beliebiger Reihenfolge (out of order)
ausgeführt.
Die Prozessoren der 21x64er Familie haben intern mehr als je 32 adressierbare Register. Diese
Register können bei jeder Instruktion ein anderes, adressierbares Register repräsentieren ( rename
register ). So können unabhängige Instruktionen gleichzeit ausgeführt werden, auch wenn sie auf
gleichen Registern operieren.
Die Integer Pipeline hat sieben Stufen:
0: FETCH:
1: TRANSFER:
2: MAP:
3:QUEUE:
4: REG:
5: EXEC:
6: DCACHE:
Instruction Fetch / Branch Prediction
bis zu 4 Instruktionen in MAP-Einheit laden
Register umordnen
Instruktionen aus der Warteschlange lesen
Register lesen
Instruktionen ausführen
Register und DCache schreiben
Die Floating Point Pipeline hat neun Stufen, da die Execute-Phase länger dauert.
36
Seminar Moderne Prozessorarchitekturen
Zusammenfassung
21364 (EV7)
Das zukünftige Falgschiff, der 21364, wird mit einem Takt von mehr als 1GHz betrieben.
Der Prozessor ist aber lediglich ein verbesserter 21264er Kern mit 3 Gimmicks:
1. 1,5 MB L2-Cache: ~90% der 100 Millionen Transistoren des Prozessors sind L2-Cache
2. ein Memory Controller für “Direct RAMbus(TM)”: 800MHz schnell aber nur 16 Bit breit
3. ein Netzwerkinterface um mehrere Prozessoren zu verbinden.
Netzwerkinterface
Dieses Netzwerkinterface bietet dem Prozessor 4 Verbindungen (N, E, S, W) zu anderen Prozessoren. Jede Verbindung kann bis zu 10 GByte pro Sekunde übertragen (vgl: Speicher 6GB/s, IO 3GB/
s). Da die Daten nicht über den Systembus, zu anderen Prozessoren, geleitet werden müssen wird
dieser entlastet.
Durch dieses Interface können einfache Multiprozessorsysteme mit maximal 64 Prozessoren gebaut
werden. z.B. Transputer (s.u.), Systeme mit verteiltem Speicher.
Systeme mit gemeinsamen Speicher sind möglich, ihre Realsierung ist aber durch die elektrischen
Spezifikationen des Direct RAMbus wesentlich schwieriger.
Zusammenfassung
Die Alpha-Architektur ist eine “reine” 64 Bit RISC Architektur, keine 32 Bit Architektur die nur
um 64 Bit-Befehle erweitert wurde.
Mit einer Software-Bibliothek (PALCode) wird Microcode vermieden.
Die Prozessoren können mit einer hohen Taktfrequenz gebaut werden und sind zur Zeit schon verfügbar.
Einsatzbereich:vom Büro-PC bis Parallelrechner. Allein die aktuellen Kosten schränken den Einsatzbereich ein.
UNIX-Systeme auf Basis von 64-Bit Prozessoren sind Jahr - 2038 - kompatibel !
In Zukunft wird der 21364 gegen den IA-64 (alias Merced) antreten.
Seminar Moderne Prozessorarchitekturen
37
Alpha-Prozessoren (21x64)
Literatur
[Sites 1992]
Alpha Architecture Reference Manual
Richard L. Sites ,1992 Digital Press ISBN 1-55558-098-X
http://www.samsungsemi.com
http://www.alphaprocessors.com
http://www.digital.com
http://www.tasc.com
http://chemphys.weizmann.ac.il
http://www.tomshardware.com
38
Seminar Moderne Prozessorarchitekturen
K APITEL 5
Scalable Processor Architecture SPARC - Version 9
Alexander Greiml
Historisches
Die Entwicklungsgeschichte der SPARC-Architektur beginnt bereits in den Jahren 1980-84, als
SUN Microsystems, Hersteller von Unix-Workstations, nach Prozessoren zum Ersatz der zu
rechenschwach gewordenen Motorola 680x0-Reihe suchte. Verschiedene Versuche mit anderen
CPUs (z.B.: SUN 386) ernüchterten die Entwickler und ließen den Entschluß reifen, einen eigenen
Prozessor herzustellen, der den Bedürfnissen nach Geschwindigkeit und Skalierbarkeit entsprach.
Vorgabe war, einen modernen Prozessor mit einfachem Aufbau zu beschreiben, der zudem genügend Potential in sich barg um lange Zeit einsatzfähig zu sein. Da SUN selbst keine Chips produzierte, entwickelte man eine Instruction-Set-Architecture, die an mehrere Prozessorhersteller
lizenziert wurde. Der Name dieser 1985 vorgestellten Architektur war SPARC, ein Acronym für
Scalable Processor Architecture. Basis des Systems war ein entsprechend den Wünschen der SUN
Entwickler modifizierter RISC-2 Prozessor, der TMS 9900, der 1983 um Professor Patterson an der
University of Berkeley entwickelt wurde. Texas Instruments schaffte es, einen, der SPARC-Definition entsprechenden Chip herzustellen und bereits 1987 verkaufte SUN den ersten auf SPARC
basierenden 32-bit Rechner.
Um der fortschreitenden Entwicklung der SPARC Architektur Vorschub zu leisten gründete SUN
1989 SPARC International, ein Konsortium zur Förderung und Wahrung der SPARC Architektur.
Geburtskapital dieses offenen Vereins, bei dem jeder Mitglied werden kann, waren die Rechte an
der SPARC Architektur. 1994 wurde mit der SPARC Version 9 die erste 64-bit SPARC Architektur
vorgestellt, und noch im gleichen Jahr konnte HAL, ein Mitglied von SPARC International, den
ersten SPARC Version 9 konformen Prozessor, SPARC64, anbieten. Wenige Monate später verkaufte SUN den ersten SPARC V9 konformen Prozessor, den UltraSPARC-1 und schließlich wird
seit 1997 der UltraSPARC-2 Prozessor, eine Weiterentwicklung des UltraSPARC-1, produziert.
Was ist SPARC
SPARC ist keine proprietäre Prozessorfamilie, sondern eine Instruction-Set-Architecture, das heißt
eine Beschreibung der Eigenschaften der Hardware aus Sicht der Software. Das Verhalten und die
Eigenschaften des Prozessors werden definiert, nicht aber die Umsetzung dieses Verhaltens in
einem realen Chip oder einem Simulationssystem. Die Überprüfung auf SPARC-Konformität übernimmt SPARC International, das eingereichten Systemen nach bestandener Prüfung die SPARC
Compliance bestätigt. Hieraus folgt, daß unterschiedliche Chips oder Chip-Sets oder gar Simulati-
Seminar Moderne Prozessorarchitekturen
39
Scalable Processor Architecture - SPARC - Version 9
onssysteme konform der SPARC-Definition sein können und sich somit als SPARC-Systeme
bezeichnen dürfen.
Die SPARC-Version 9 Architektur
SPARC-Prozessoren bestehen per Definition aus einer Floating Point Unit (FPU), einer Integer
Execution Unit (IEU) und optional aus einem oder mehreren benutzerdefinierten CoProzessoren
(CP). Weiterhin stellt die SPARC Definition eine Memory Management Unit vor, die als ReferenzMMU nach belieben verwendet werden kann. Als RISC Architektur erlaubt SPARC Speicherzugriffe und I/O nur mittels Load/Store durch die IEU. Die Steuerung und der Datentransfer von/zu
der FPU und dem CP erfolgt immer über die IEU, die die zentrale Steuereinheit des Prozessors ist.
Bild 4.
Allgemeiner Aufbau der SPARC
FPU
IEU
CP
Data-Bus
Control-Bus
MMU
Address-Bus
Speicherworte und Register sind 32 oder 64 bit breit, über die genaue Art des Bussystems, der
Caches und weiterer implementationsabhängiger Systemteile gibt die Definition keine Auskunft,
da, wie bereits angesprochen, SPARC eine Instruction-Set-Architecture ist und somit den Herstellern in allen Fragen der Implementation freie Hand läßt.
Eigenschaften der FPU
Die FPU arbeitet parallel, nicht notwendigerweise synchron, zur IEU, d.h. daß eine einmal angestoßene Operation der FPU bis zu ihrem Abschluß die Operationen der IEU nicht unterbricht oder verzögert. Eine SPARC FPU besitzt 32 Register zu je 64 bit, die wie folgt verwendet werden können:
32 32-bit Register (Half Word)
32 64-bit Register (Word)
16 128-bit Register (Double Word)
Um die Eigenschaften der FPU genau zu beschreiben, wurden die IEEE Standards 754 (32bit Floating Point Processing) und 1596.5 (64bit Floating Point Processing) verwendet, die von jeder
SPARC Version 9 konformen FPU erfüllt werden.
Die Integer Execution Unit
Die Integer Execution Unit (IEU) ist das zentrale Rechenwerk der SPARC Architektur. Sie ist
zuständig für alle Integer- und Adressberechnungen. Da SPARC eine RISC Architektur ist, existiert
kein Microcode. Alle Instruktionen werden in einem Taktzyklus ausgeführt (One-Instruction-perCycle) und alle Speicherzugriffe geschehen RISC-typisch nur durch Load/Store Operationen. Die
SPARC-Architektur besitzt eine Pipeline mit Interlock, d.h. daß die Prozessorpipeline den Zugriff
40
Seminar Moderne Prozessorarchitekturen
Die SPARC-Version 9 Architektur
auf die Zielregister von Load/Store Operationen solange verzögert, bis die Daten korrekt aus dem
Hauptspeicher geladen wurden.
Status- und Kontrollregister der IEU
Die SPARC V9 Architektur beschreibt 25 Register, die für die Steuerung und Kontrolle des Prozessorzustandes unbedingt vorgesehen und damit fest definiert sind. Hierzu gehören neben dem Prozessor Status Register auch Program Counter, Trap Register und Registerfenster Steuer- und
Statusregister, wie in Tabelle 1 aufgelistet. Neben diesen fest definierten Registern können je nach
Prozessorimplementierung weitere Register optional eingesetzt werden.
Tabelle 1. Einige SPARC Register
Program Counter Register
Processor State Register
Current Window Pointer
next Program Counter Register
Condition Codes Register
Restorable Window Register
Trap Program Counter Register
Hardware Clock Register
Savable Window Register
Trap next Program Counter Reg.
Y-Register
Other Window Register
Trap Base Address Register
Processor Interrupt Level Register
Window Status Register
Trap Type Register
Floating Point State Register
Clean Windows Register
Trap Level Register
Floating Point Register State Reg.
Version Register
Trap State Register
Address Space Identifier Register
General Purpose Registers
SPARC Prozessoren besitzen ein Current Window Pointer Register, das auf das jeweils aktive
Registerfenster des Prozessors verweist. Obwohl alle SPARC Register wenigstens 32 bit breit sind,
werden nur 5 bit des CWP Registers verwendet, was zur Folge hat, daß maximal 32 Registerfenster
adressierbar sind. Somit besitzen SPARC Prozessoren maximal 32 Registerfenster zu jeweils 16
Registern, sowie 8 globale Register. Die Definition schreibt unter anderem ein Minimum von 3
Registerfenstern vor, das konforme Prozessoren besitzen. Die User-Software kann von diesen
maximal 520 Registern jeweils nur 32 Register adressieren, nämlich 8 incoming Register, 8 outgoing Register, 8 lokale Register sowie die 8 globalen Register.
Bild 5.
SPARC General Purpose Register Windows
globale Register
globale Register
outgoing Params
CWP
local Parameters
outgoing Params
Overlap
incoming Params
local Parameters
incoming Params
Function Call
with SAVE
Seminar Moderne Prozessorarchitekturen
41
Scalable Processor Architecture - SPARC - Version 9
Wie im folgenden Abschnitt gezeigt wird, sind immer 3 Registerfenster in Verwendung, so daß nur
die Anzahl der Registerfenster-2 für Funktionen verwendbar sind (daher resultiert auch die Forderung nach mindestens 3 Registerfenstern). Dadurch, daß sich die Frames der outgoing- und incoming-Register überschneiden, wird die Verwendung des Speicherstacks bei Funktionsaufrufen und
Traps reduziert. Nur wenn eine Funktion oder Trap mit mehr als 8 Argumenten aufgerufen wird,
muß ein Window Fill/Spill-Trap ausgeführt werden, der einem konventionellen Zugriff auf einen
Stack entspricht. Window Fill/Spill ist auch notwendig, wenn die Anzahl der verwendeten Registerfenster größer der Anzahl der verfügbaren Registerfenster ist. Hierbei werden ganze Registerfenster in den Hauptspeicher ausgelagert und bei Bedarf wieder eingelagert. Dies geschieht durch
einen hochprioren Hardware-Trap (siehe Abschnitt Traps und Interrupts). Wie in Bild 2 dargestellt,
reduziert der Window-Overlap, die Verwendung eines speicherbasierten Stacks. Aufgrund der
Untersuchungen von Patterson/Hennessey um 1980 wurden die quantitativ nachgewiesenen Größen von Funktions- und Prozeduraufrufen zur Auslegung der Registerframes und -fenster verwendet.
Register Window Management mit Register Window State Registern
Das Management der Register Windows geschieht vollständig unter der Kontrolle der Hardware,
was ausschließt, daß Registerfenster überschrieben oder übersprungen werden. Ein Wechseln des
Registerfensters geschieht durch die SAVE Instruktion, die den Inhalt eines Registerfensters sichert
und den Current Window Pointer (CWP) inkrementiert. Sollten keine freien Registerfenster verfügbar sein, so kommt es zu einem Window Spill/Fill Trap, der den Inhalt eines Registerfensters in den
Hauptspeicher auslagert. Hier werden die Inhalte der Registerfenster wie in einem normalen LIFOStack gehalten. Um zu erkennen, wann Registerfenster verfügbar sind, bzw. wann ein Window
Spill/Fill Trap ausgelöst wird, existieren die Zeigerregister Restoreable Windows Register, Savable
Windows Register und Other Windows Register. Restorable Windows Register enthält die Anzahl
der Registerfenster, die vom momentanen Programm verwendet werden können, ohne daß
RESTORE einen Window Fill Trap auslöst. Savable Windows Register enthält die Anzahl der
Registerfenster, die nicht aktuell verwendet werden, und somit ohne Window Spill Trap verfügbar
sind. Other Windows Register enthält die Anzahl der Windows, die mit Spill/Fill ein- bzw. ausgelagert werden sollen.
Bild 6.
42
SPARC Register Window Management (8 Registerfenster)
Seminar Moderne Prozessorarchitekturen
Traps und Interrupts
Traps und Interrupts
Traps sind alle Arten von Unterbrechungen des Kontrollflußes. Dies können Interrupts sein, also
Unterbrechungen durch die Hardware, oder Unterbrechungen durch Funktionsaufrufe der Software,
beispielsweise um Dienste des Kerns in Anspruch zu nehmen (Softwareinterrupts oder KernelTraps). Traps verhalten sich wie unerwartete Prozeduraufrufe. Sie veranlassen die Hardware
4. den Prozessorzustand in einem Hardware Register Stack zu sichern (Program Counters, CWP,
CCR, PSTATE und TrapType),
5. in den privilegierten Modus zu wechseln und
6. mit der Ausführung des Trap Handler Codes, beschrieben durch den Trap Vektor, zu beginnen.
Für den SPARC Prozessor ist keine Unterscheidung dieser Traps nötig, da die Systemsoftware auf
Traps mit entsprechenden Trap Handlern reagieren muß. Der Prozessor bietet hierfür 5 verschiedene Trap Level an, die je nach Dringlichkeit gestaffelt sind. Jeder Trap besitzt eine Dringlichkeit,
die dem Trap-Level entspricht. Bearbeitet der Prozessor einen Trap vom Level 0, so heißt das, daß
der normale Programmfluß abgearbeitet wird. Um die Trap-Handler zu vereinfachen, können nur
Traps eines höheren Levels wie der des momentan Bearbeiteten den Kontrollfluß unterbrechen. Die
Trap Handler müssen dadurch nicht auf niederpriore Traps eingehen, um diese eventuell später zu
behandeln. Die Trap Level und die Trap Typen sind in Tabelle 2 aufgelistet.
Tabelle 2. Trap-Level
Trap-Level
Usage
0
normal execution
1
System calls; interrupt handlers; instruction emulation
2
Window spill/fill
3
Page-fault handler
4
RED-state handler (Handler für Prozessorfehler; Reset-, Error-, Debug State)
Trap Management und Trapping
Um Traps verwenden zu können, müssen zunächst von der Systemsoftware die Trap Handler
installiert werden. Hierzu wird das Trap Base Register der SPARC Version 9 Hardware mit der
Startadresse des Trap Handling Codes beschrieben. Im Trap Type Register ist für den jeweiligen
Trap der Offset des Trap Handlers festgelegt, der beschreibt, wie weit der Handler von der im Trap
Base Register festgelegten Startadresse entfernt ist. Dieser Offset besteht aus jeweils 8 Instruktionen, 32 Instruktionen für Window spill/fill Traps, die von den Trap Handlern mitgenutzt werden
können. Die hieraus resultierende Adresse wird auch als Trap Vektor bezeichnet. Der Vorteil dieser
Methode besteht darin, daß eventuell mit diesen 8 bzw. 32 Instruktionen Sprünge im Trap Handling
Code reduziert oder vermieden werden können. Da Traps des Typs 1, also System Calls und Interrupt Handler die Majorität der Traps ausmachen, wurden mit SPARC V9 Fast-Traps eingeführt.
Bild 7.
Trap Vektoren
Trap Base Register
+
Trap Type Register
}
Handler 1 Handler 2 Handler 3
Seminar Moderne Prozessorarchitekturen
Trap Vector
Handler 4 Handler 5 Handler 6
43
Scalable Processor Architecture - SPARC - Version 9
Hierbei wird nicht wie bisher in Version 7 und 8 üblich für jeden Trap ein Registerfenster der General Purpose Register verwendet, sondern es existieren zusätzlich 8 Alternalte Global Registers, die
exklusiv für Trap Level 1 Code reserviert sind. Durch Fast-Traps werden zusätzliche Window spill/
fill Traps vermieden, bzw. reduziert, da diese 8 Register immer verfügbar sind.
Bild 8.
Registerverwendung beim Trapping
Trap Level 0
Trap Level 1
Trap Level > 1
alternate globals
globale Register
globale Register
globale Register
outgoing Params
local Parameters
outgoing Params
outgoing Params
local Parameters
local Parameters
incoming Params
incoming Params
incoming Params
Deferred Traps
Bei den direkten Traps wird ein Trap vor Abschluß einer Instruktion und der damit verbundenen
Zustandsänderung des Prozessors ausgelöst.
Um den Durchsatz in der Pipeline zu erhöhen und Wartezeiten bei der Instruktionsbearbeitung zu
vermeiden, können Instruktionen beendet werden und den Prozessorzustand ändern bevor alle Auswirkungen auf das System bekannt sind. Erzeugt eine solche Instruktion nach ihrer Beendigung
einen Trap, so spricht man von deferred Traps, da die erforderliche Ausnahmebehandlung erst nach
der Zustandsänderung des Prozessors einsetzen kann. Beispiele für deferred Traps sind Speicheroperationen, bei denen während der Instruktionsausführung nicht klar ist, ob die Operation korrekt
beendet wird, da sie eventuell erst einige Zyklen nach der Instruktionsbearbeitung zum Abschluß
kommt. Statt dessen muß in diesem Fall der Prozessorzustand vor der Instruktionsausführung gesichert werden, um bei Bedarf den Prozessor wieder in seinen ursprünglichen Zustand (Zustand vor
Beginn der Instruktion) zurücksetzen zu können. Die zu sichernde Zustandsmenge ist von der Tiefe
der Pipeline und der Verzögerung der Operationen abhängig. Um den Prozessorzustand zuverlässig
wiederherstellen zu können, erlaubt SPARC keine Verzögerung von Traps über neue Traps hinaus.
Sonst können z.B. die Registerfenster gewechselt, oder I/O durchgeführt werden, was den alten
Systemzustand nicht mehr reproduzierbar macht. Nachteil von verzögerten Traps ist, daß die alten
Prozessorzustände gesichert werden müssen, was nur durch das Speichern der Registerinhalte, und
somit einer erhöhten Speicherkapazität der CPU möglich ist. Der entscheidende Vorteil von verzögerten Traps ist, daß die nachfolgenden Instruktionen bereits abgearbeitet werden können, obwohl
eine vorhergehende Operation noch nicht vollständig abgeschlossen wurde. Die Verwendung von
deferred Traps ist in der SPARC Definition Version 9 optional.
44
Seminar Moderne Prozessorarchitekturen
Instruktionsformate und Instruktionen
Instruktionsformate und Instruktionen
Instruktionsformate
Die Länge einer Instruktion ist immer 32 bit. Die SPARC Instruktionsformate können grob in 4
verschiedene Kategorien gegliedert werden, die wiederum aus mehreren Unterformaten bestehen.
Die bits 30 und 31 bilden das op-Feld, das beim Instruction Predecoding verwendet wird.
Bild 9.
SPARC Version 9 Instruktionsformate
Format 1 (op = 1): Call
op
disp 30
Format 2 (op = 0): SETHI & Branches (Bicc, BPcc, BPr, FBfcc, FBPfcc)
op
op2
Format 3 (op = 2 or 3): Arithmetic, Logical, MOVr, MEMBAR, Load and Store
op
op3
Format 4 (op = 2): MOVcc, FMOVr, FMOVcc and Tcc
op
op3
condition code fields
Instruktionen
Insgesamt besitzt der SPARC Version 9 Instruktionssatz 82 fest definierte Integer-Instruktionen.
Zu diesen kommen je nach Implementierung bis zu 5 herstellerdefinierte Integer-Instruktionen
hinzu. Neu am Instruktionssatz ist, daß in Branch Instruktionen ein 1 bit p-Feld existiert, das angibt,
ob eine Branch verfolgt wird oder nicht. Neu ist auch die Gruppe der Conditional Move Operationen MOVcc, MOVr, FMOVcc und FMOVr, die, abhängig von Condition Codes (cc) bzw. Registerinhalten (r), Inhalte von Source-Registern verschieben. Z.B. kann der C-Ausdruck
if (A > B) X = 1; else X = 0;
codiert werden als
cmp %i0, %i2
| (A > B)
or
%g0, 0, %i3
| set X = 0
movg %xcc, %g0, 1, %i3 | overwrite X with 1 if A > B
was die Notwendigkeit eines Sprunges eliminiert.
Ansonsten werden die Instruktionen der SPARC V8 mit 64 bit Adressformaten verwendet.
Multiprozessor Synchronisationsprimitive
Die bereits in SPARC Version 8 vertretenen Multiprozessor Synchronisationsprimitive wurden an
die neue Architektur angepaßt. Die Barrier Instruktion STBAR wurde zu MEMBAR, der 64 bit
Variante. Obwohl hiermit wechselseitiger Ausschluß programmiert werden kann, existieren weitere, atomare, Instruktionen zum direkten wechselseitigen Ausschluß.
Tabelle 3. Atomare Instruktionen zum wechselseitigen Ausschluß
Compare and Swap (CASA, CAXSA)
Vergleicht den Wert eines Registers mit einem Speicherinhalt. Wenn die Werte gleich sind, wird der
Speicherwert mit dem Registerwert getauscht.
Load Store Unsigned Byte (LDSTUB, LDSTUBA)
klassisches Test and Set
Swap (SWAP, SWAPA)
vertauscht Register- und Speicherinhalt
Seminar Moderne Prozessorarchitekturen
45
Scalable Processor Architecture - SPARC - Version 9
Speichermodelle
Die Speichermodelle der SPARC Architektur definieren die Semantik der Speicheroperationen.
Hauptsächlich werden je nach Speichermodell unterschiedliche Forderungen an die Reihenfolge
der Load und Store Operationen gestellt.
Total Store Order (TSO)
Das Speichermodell Total Store Order definiert, daß alle Store Operationen, also alle Schreiboperationen in den Hauptspeicher in der Reihenfolge ihrer Initiierung, also in Order ausgeführt werden
müssen. Leseoperationen in den Hauptspeicher werden in der Reihenfolge ihrer Initiierung ausgeführt und sind zudem blockierend. D.h. daß aufeinanderfolgende Leseoperationen solange blockieren, bis die Zielregister beschrieben sind. Schließlich sind die atomaren Load/Store Operationen
sowohl bezüglich Load- als auch Store Operationen geordnet.
Der
Einsatzbereich
von
TSO
ist
hauptsächlich
auf
Single-Prozessor-Rechner
beschränkt, da die Einschränkungen dieses Modells im Multiprozessorbetrieb hohe
Wartezeiten bedeuten. Total Store Order ist ein Auslaufmodell in der SPARCArchitektur, da TSO nur aus Kompatibilitätsgründen zu den SPARC Versionen 7
und 8 besteht und in künftigen SPARC Definitionen wahrscheinlich nicht mehr
vorkommt.
Partial Store Order (PSO)
Bei dem Speichermodell Partial Store Order sind die Load Operationen untereinander, sowie die
atomaren Load/Store Operationen bezüglich der Load Operationen geordnet. Load Operationen
sind wie in TSO blockierend, Schreiboperationen sind jedoch nicht geordnet. Auch PSO ist ein
Auslaufmodell, wird jedoch wahrscheinlich später als TSO aus den SPARC-Definitionen entfernt.
Alle Programme, die korrekt im PSO Speichermodell arbeiten, arbeiten zudem auch
korrekt im TSO Speichermodell.
Relaxed Memory Order (RMO)
Relaxed Memory Order legt bei Speicherzugriffen keine Ordnung fest, mit Ausnahme derer, die für
die Konsistenz des Prozessors nötig sind. D.h., daß der Programmierer/Compiler für die Anordnung
der Speicherzugriffe verantwortlich ist. Dies ist besonders im Multiprozessorbetrieb vorteilhaft, da
der Programmierer die Semantik der Operationen überblickt, und nur in notwendigen Fällen die
Speicherzugriffe steuert. Diese Steuerung geschieht explizit mittels MEMBAR Instruktionen, die
die Zugriffe auf Speicherbereiche bis zum Abschluß der Operation blockieren kann. Da im Relaxed
Memory Order Speichermodell keine Ordnung der Speicheroperationen garantiert ist, arbeiten alle
Programme, die korrekt im RMO Speichermodell ablaufen auch korrekt im PSO Speichermodell
und somit auch korrekt im TSO Speichermodell. Programme die im RMO Modell korrekt arbeiten,
arbeiten sowohl im PSO- als auch im TSO Modell korrekt.
Bild 10.
SPARC Speichermodelle
TSO
46
PSO
RMO
Seminar Moderne Prozessorarchitekturen
Address Spaces
Programme die im PSO Modell korrekt arbeiten, arbeiten auch im TSO Modell korrekt. Neue Programme sollten, da PSO und TSO in Zukunft nicht mehr unterstützt werden, bereits jetzt nach den
Anforderungen des Relaxed Memory Order Modell entwickelt werden.
Address Spaces
Eine Adresse in SPARC-V9 ist ein Tupel aus einem 8-bit Address Space Identifier (ASI) und einem
64-bit byte-address Offset in den spezifizierten Adressraum. Speicher ist byte-aligned mit Zugriff
auf Halbworte, der 2-byte-aligned ist, 4-byte-aligned Zugriff auf Ganzworte und 8-byte-aligned
Zugriff auf Doppelworte. Die standard (Maschinen-) Wortlänge beträgt 64 bit, also das Doppelwort. Neben dem einfachen physikalischen und virtuellen Speicherzugriff und dem Zugriff auf
adressierbare I/O Bereiche, unterstützt SPARC V9 bis zu 254 weitere Address Spaces.
Address Spaces sind Speicherbereiche unterschiedlicher Interpretation, die sich physikalisch überlagern können, oder als Namensaliases, mit unterschiedlicher Semantik, auf die physikalisch gleichen Adressbereiche zugreifen. Address Space Identifier werden im Prozessor gesetzt und im
allgemeinen Fall von der Memory Management Hardware interpretiert. Hiermit ist es möglich
• auf verschiedene logische Adressräume zuzugreifen (kernel space, hardware addresses, ...)
• Zugriffe des Kerns auf Speicherbereiche von Programmen zu erlauben, oder
• Shared Memory einzurichten.
Hierzu dienen verschiedene ASIs, nämlich protected und unprotected ASIs. Protected ASIs können
nur im Supervisor Mode des Prozessors zugegriffen und verändert werden, wogegen unprotected
ASIs auch im User Mode verwendet werden können. Address Space Identifier werden z.B. auch für
die Implementierung der atomic Operations, wie MEMBAR oder SWAP verwendet. Dieser Modus
heißt dann ASI_NUCLEUS, im Gegensatz zu ASI_PRIMARY bei normalen Speicherzugriffen.
Insgesamt darf man ASIs als Adress-Aliases verstehen, die zudem die Semantik der Speicherzugriffe definieren. Hiermit können z.B. auch Trap-Operationen in einem vom restlichen System
logisch disjunkten Raum mit veränderter Semantik der Speicherzugriffe ausgeführt werden. Dies
ist besonders beim Debugging hilfreich, wenn der gesamte Adressraum ohne Speicherschutzmechanismen verfügbar ist.
Referenz MMU
Obwohl heutzutage faßt jeder Prozessor mit einer on-Chip MMU ausgeliefert wird, beschränkt sich
die SPARC Architektur auf die Beschreibung einer Referenz-MMU, die wie der Name bereits sagt
nur als Referenz für eventuelle MMUs existiert. Dem jeweiligen Hersteller ist überlassen, ob und
wie er dem System eine MMU hinzufügt. Entsprechend ist die Beschreibung dieser ReferenzMMU einfach gehalten und verlangt kaum mehr als einfach Logik, die
• virtuelle Adressen in physikalische Adressen übersetzt
• Speicherschutz bietet
• verschiedene Address-Spaces unterstützt
• abgeschaltet werden kann (virtual Memory = physical Memory) und
• eventuell Instruction prefetch betreibt.
Eine SPARC-MMU betreibt Adressübersetzung, solange sie nicht ausgeschaltet ist. Hierzu liest sie
aus dem Prozessor Status Register heraus, in welchem Adressierungsmodus der Prozessor arbeitet.
Kann die MMU eine Speicheradresse nicht auflösen, so sendet sie dem Prozessor einen AccessMMU-miss Trap, kann auf eine Speicheradresse aus Gründen des Speicherschutzes nicht zugegrif-
Seminar Moderne Prozessorarchitekturen
47
Scalable Processor Architecture - SPARC - Version 9
fen werden, so sendet die MMU einen Access-Protection Trap. Alle weiteren Eigenschaften der
MMU, wie TLBs oder die Position relativ zu den Caches ist herstellerabhängig.
Sun UltraSPARC-2
Suns Spitzenprozessor ist der seit 1997 verfügbare UltraSPARC-2 Prozessor, ein SPARC Version 9
konformer RISC-Prozessor, der aus einer 9-stufigen Integer-Pipeline, Floating-Point-Unit mit
VIS1- Instruktionssatz sowie einer SPARC Referenz MMU besteht. Lieferbar ist der UltraSPARC2 Prozessor zur Zeit mit Taktfrequenzen zwischen 300 und 480 MHz. Der Sun UltraSPARC-2 Prozessor existiert in wenigstens zwei nicht dokumentierten, unterschiedlichen Versionen, nämlich
einer älteren, in 0.35µm produzierten, nicht mit ECC-Error Correction Code ausgerüsteten Version,
sowie in einer neueren Version mit ECC über alle Caches. Hergestellt in 0.25µm Strukturen und
aus ca. 5,4 Millionen Transistoren bestehend belegt dieser neuere UltraSPARC-2 Prozessor ca. 156
mm² Chipfläche. Beide Prozessoren besitzen 28 Status- und Kontrollregister, 8 Register Fenster zu
je 16 General-Purpose-Registern sowie 8 Trap-Level 1 Register.
Bild 11.
UltraSPARC II - Architectural Overview
Aufgrund der geringen Transistoranzahl besitzt der UltraSPARC-2 Prozessor keine Out-Of-OrderExecution-fähigkeit. Um Synchronisationsprobleme in der Pipeline zu vermeiden operiert die FPU
des UltraSPARC-2 synchron zur IEU, d.h. mit einer 9-stufigen Pipeline mit 3 Wartezyklen (siehe
Bild 9). Auch bei der Branch-Prediction, verwendet Sun einen einfachen Ansatz. Die Branch-Prediction-History ist 2 bit tief, mit der folgenden Funktion
Tabelle 4. Branch History Tabelle - Sun UltraSPARC-2
bit 0
bit 1
Zustand und Folgezustand
0
0
History nicht verwenden (Software-controlled)
0
1
branch was and will be taken
1. VIS - Visual Instruction Set
48
Seminar Moderne Prozessorarchitekturen
Sun UltraSPARC-2
Tabelle 4. Branch History Tabelle - Sun UltraSPARC-2
bit 0
bit 1
Zustand und Folgezustand
1
0
branch was not taken, but will be taken next time. No change in prediction.
1
1
branch was not taken, and will not be taken. History changes prediction
Bild 12.
9-stufige Pipeline des Sun UltraSPARC-2 Prozessors
Fetch Decode Group
128
bit
W
o
r
d
I
n
s
t
r
u
c
t
i
o
n
s
Execute
Data load
Verify
Ready
N1
N2
N3
Trap
Write
Resolution
ASL 1
I1
I2
ASL 2
I3
ASL 3
Trap
Write
Resolution
I4
FPU
Visual Instruction Set (VIS TM)
Das Visual Instruction Set, eine Prozessorerweiterung, die nicht in der SPARC Definition vorkommt, ist ein ähnlicher Ansatz, wie MMX bei Intel. Die FPU übernimmt mit einem erweiterten
Instruktionssatz zusätzliche Aufgaben. Diese beschränken sich auf 64-bit RGBa-Berechnungen.
Hierbei wird jeder Bildpunkt in 4x16 bit codiert (16 bit jeweils für Rot, Grün, und Blau, sowie 16
bit Alphablending). Auf diesem 64-bit Wort wird dann eine SIMD Berechnung ausgeführt. Das
Ergebnis wird FPU-typisch von der IEU wieder gelesen, bzw. in neue Speicherbereiche geschrieben.
Tabelle 5. VIS Instruktionen (1)
FPADD16 / FPSUB16
4x16-bit Partitioned Add/Substract Instructions
FPPACK16 /
FPPACK32
4x16-bit / 2x32-bit Pixel Pack
FPEXPAND
Clips 4x16/2x32-bit Integer Values to 4x8-bit Integer Values
4x16-bit Pixel Expand
Expandiert 4x8-bit Integer nach 4x16-bit Integer Werten
FPMERGE
2x32-bit Merges
Transformiert 2 32-bit RGBa Werte in einen 64-bit RGBa Wert
Bild 13.
VIS Instruktionen (2)
Seminar Moderne Prozessorarchitekturen
49
Scalable Processor Architecture - SPARC - Version 9
Weitere Instruktionen zum Vergleichen, Transformieren, Multiplizieren und Dividieren von Pixelpacks und 8-bit, 16-bit, und 32-bit Teilworten sind verfügbar. Hiermit können komplexe Operationen, z.B. packed -> planar, ausgeführt werden. Nachteil ist wie auch bei MMX, daß während der
Ausführung von VIS-Instruktionen die verwendeten Register der FPU nicht für eigentliche Floating
Point Operationen zur Verfügung stehen. Da die SPARC FPU 32 64-bit Register besitzt, ist hier
jedoch das Aufteilen der Register auf VIS-Instruktionen und Floating Point Instruktionen einfacher
zu handhaben.
Fujitsu/HAL SPARC64-GP
Fujitsus Top-Prozessor der SPARC-Serie ist der SPARC64-GP, ein direkter Nachfolger des
SPARC64. Der SPARC64-GP ist ein mit 272 MHz getakteter SPARC Version 9 konformer RISCProzessor mit 17,5 Millionen Transistoren, der in 0,25µm Strukturen gefertigt wird. Er besitzt ein
volles Out-Of-Order-Execution Modell, 52 sichtbare Kontroll- und Statusregister, sowie 5 GeneralPurpose-Registerfenster zu je 16 Registern. 28 dieser 52 Register werden für Hardware-Performance-Monitoring verwendet
Tabelle 6. Hardware Performance Monitore des SPARC64-GP
Memory Access Latency Counters
Memory Access Event Counters
L1-Cache Access Event Counters
L2-Cache Access Event Counters
MMU Event Counters
Instruction Execution Rate Counters
Issue Stall Counters
Branch Prediction Counters
Weiterhin besitzt er die obligatorischen 8 Fast-Trap Register und 34 freie Register, die für RegisterRenaming, also das Bereitstellen frischer Register in der Out-Of-Order Execution benötigt werden.
Hiermit können bis zu 63 Instruktionen Out-Of-Order bearbeitet werden, die erst in der letzten
Stufe der Pipeline synchronisiert werden.
Bild 14.
50
SPARC64-GP Architectural Overview
Seminar Moderne Prozessorarchitekturen
Vergleich Sun UltraSPARC-2 und Fujitsu/HAL SPARC64-GP
Im Gegensatz zum Sun UltraSPARC-2 Prozessor besitzt der SPARC64-GP zwei Integer Functional
Units, eine für Fixed-Point Integer Operationen, eine weitere für Fixed-Point Integer Operationen
und Adressoperationen. Jede dieser Einheiten besteht aus zwei ALSs (Arithmetic Logic Shift
Units), die parallel zueinander operieren. Zudem besitzt der Prozessor zwei Floating-Point Einheiten die aus jeweils einem Floating-Point Multiply-Adder und einem Floating-Point Divider bestehen, so daß bis zu 4 Floating-Point Operationen parallel ausgeführt werden können. Um auch hier
Out-Of-Order Operationen zu unterstützen, besitzen die FPUs die in SPARC Version 9 definierten
32 Floating-Point Register, sowie weitere 32 Rename Register. Zwei Load-/Store-Units, die für
eine durchschnittliche Beschleunigung des Speicherdurchsatzes um den Faktor 1.5 im Vergleich zu
einer LSU, verantwortlich sind beliefern den Prozessor mit Instruktionen und Daten. Im Gegensatz
zur Sun UltraSPARC operieren die FPUs nicht synchron zur IEU, sondern besitzen eine nur 4 Cyclen tiefe Pipeline. Der Fujitsu/HAL SPARC64-GP besitzt keine On-Chip MMU, was durch die
Verwendung mehrstufiger TLBs ausgeglichen wird. So besitzt der SPARC64-GP drei µTLBs mit
je 32 Einträgen, einen für Instruktionen und zwei µTLBs für Daten, sowie TLBs mit 256 Einträgen
ebenfalls sowohl für Instruktionen wie für Daten. Hiermit unterstützt der SPARC64-GP Seitengrößen des Speichers zwischen 4 KByte und 4GByte. Außerdem wurde ein sogenannter Level-0 Cache
für Instruktionen eingeführt, der 16 KByte groß ist und zwischen Instruktion-Buffer und Level-1
Cache angesiedelt ist. Insgesamt legten die Entwickler des SPARC64-GP stärkeren Wert auf eine
permanent gefüllte und operierende Pipeline, was viele große Caches, parallele Einheiten und eine
hochentwickelte 2-stufige Branch-Prediction Unit zur Folge hat. Circa 11 Millionen der 17,5 Millionen Transistoren des Prozessors werden in Caches und Puffern eingesetzt. Um die Größe des
Prozessor-dies so zu gestalten, daß er in der Ultra-Port-Architecture (UPA), einer von Sun definierten Prozessor-Bus Schnittstelle, eingesetzt werden kann, verzichtete man auf eine On-Chip MMU.
Sie ist als externer Chip mit weiteren, beschleunigenden Eigenschaften, wie getrenntem Memoryund Cache-Bus und vergrößerten TLBs implementiert.
Vergleich Sun UltraSPARC-2 und Fujitsu/HAL SPARC64-GP
Obwohl der Sun UltraSPARC-2 Prozessor mit überlegenen Taktfrequenzen operiert, kann man die
360 MHz Version mit Fujitsu/HALs SPARC64-GP Prozessor mit 272 MHz vergleichen. Trotz des
um ein drittel höheren Takts des UltraSPARC-2 Prozessors schneidet der SPARC64-GP sowohl in
der Integer- als auch in der Floating Point Leistung nach SPECint95, bzw. SPECfp95 besser ab.
Dies liegt hauptsächlich an der besseren Ausnutzung der Pipeline durch große Caches und der OutOf-Order-Execution Fähigkeit des HAL-Prozessors. Allerdings besitzt der UltraSPARC-2 Prozessor einen einfacheren Aufbau. Der SPARC64-GP muß mehr als die dreifache Transistorzahl mit
Spannung versorgen um die erhöhte Leistung zu erbringen. Zudem ist Fujitsu/HALs Prozessor auf
den Bereich der Server-Systeme ausgelegt, was unter anderem an der möglichen sehr großen Seitengröße von 4 GByte erkennbar ist (typische Anwendung Datenbankrechner).
Bild 15.
Vergleich der Leistungsdaten
Seminar Moderne Prozessorarchitekturen
51
Scalable Processor Architecture - SPARC - Version 9
Trotz der Vielzahl gemeinsamer Parameter, sind die Prozessoren jedoch nicht wirklich vergleichbar. Suns Prozessor ist für den Bereich der Hochleistungs-Workstation gebaut worden, der HALProzessor ein echter Server Prozessor, z.B. auch ohne VIS. Da speziell RISC-Rechner von hochentwikkelten Compilern profitieren, die die Nutzung der Pipeline optimieren, ist der SPARC64-GP
zwar auf dem Papier einem UltraSPARC-2 Prozessor überlegen, da er die Ordnung des Programmcodes in Hardware reorganisiert, hochentwickelter und optimierter Code benötigt diese Reorganisierung aber kaum, da Code Reorganisation faßt nur bei schlechten Compilern, altem Code oder bei
Floating Point Instruktionen verwendet wird.
Appendix
Die Definition im „SPARC Architecture Manual Version 9“ auf Seite 18 Paragraph 3.2.1.4 schreibt
zur Harvard-Architektur und Programmen die ihren Code selbst modifizieren:
„For this reason, programs that modify their own code (self-modifying´code) must issue FLUSH
instructions, or a system call with a similar effect, to bring instruction and data memories [caches]
into a consistent state.“
Quellen
[SPARC 1994]
David L.Weaver, Tom Germond: SPARC Architecure Manual Version 9, SPARC
International, Prentice-Hall
[SPARC 1987]
David L. Weaver: SPARC Architecture Manual Version 8, Sparc International, PrenticeHall
[Tanenbaum 1990]
Andrew S. Tanenbaum: Structured Computer Organization, Prentice-Hall International
[HAL 1998]
SPARC64-GP, HAL/Fujitsu, http://www.hal.com/
[Sun 1997]
SPARC Users Manual, 1997, Sun Microsystems, http://www.sun.com/
52
Seminar Moderne Prozessorarchitekturen
K APITEL 6
MIPS-Familie
Matthias Brust
Die Firma MIPS
MIPS Technologies ist der Nachfolger des Prozessorgeschäfts von MIPS Computer Systems, Inc.,
welches 1984 gegründet und 1992 von Silicon Graphics, Inc. an sich gezogen wurde. Silicon Graphics, Inc. hält mehr als 80 Prozent Eigentum von MIPS Technologies, Inc.
Durch Entwicklungen auf dem embeddet Markt arbeitet MIPS mit vielen namhaften Firmen zusammen, wie beispielsweise Broadcom Corporation., LSI Logic Corporation, NEC Corporation,
Philips Semiconductors, Texas Instruments, Toshiba Corporation, Commquest (IBM), Sony Corporation.
Geschäftliche Ziele von MIPS Technologies, Inc.
MIPS Technologies, Inc. entwickelt kostengünstige high-performance 32- und 64-bit RISC (reduced instruction set computing) Prozessoren für den Endbenutzer und den high-end embedded
Markt.
Entwicklungen von MIPS Technologies sind Bestandteile von Produkten wie beispielsweise
Video-Spielkonsolen, Set-top Boxen, Digitalen Kameras, und handlichen Rechengeräten, die Mircosoft Windows CE unterstützen.
Endverbraucher und der embedded Markt
MIPS Technologien können in einem großen Anwendungsbereich von Video Games, wie z.B. Nintendo 64 und die PlayStation Spielekonsole gefunden werden. Aber auch in Network Computers
von Tektronix und in Network Computing Devices, Inc.; handlichen Geräten unter Benutzung von
Microsoft Windows CE und Philips Velo 500, Samsung PalmPC und NEC® MobilePro 750c; und
digitalen set-top Boxen von General Instruments, EchoStar Communications Corporation und
WebTV. Aber auch in anderen Andwendungen von arcade games, Kommunikationsgeräten und
mehr.
High-end embedded Produkte
Die MIPS-Architektur entfaltet seine Kraft in einer Reihe von Anwendungen wie Laser-Drucker
von Hewlett-Packard, Okidata und Lexmark sowie zahlreiche Kopierer, genauso wie Router von
Cisco, Bay Networks und mehr.
Seminar Moderne Prozessorarchitekturen
53
MIPS-Familie
MIPS Höhepunkte
Heute gibt es mehr als 35 seperate Team zur Entwicklung MIPS-basierter Produkte. Es existieren
mahr als 80 verschiedene MIPS Prozessoren, die entwickelt wurden und vermarktet werden von
MIPS Technologies, Inc. und/oder den Partnern. Folgend kurz eine Auflistung der Höhepunkte von
MIPS.
• 1991: R4000TM erster (!) kommerzieller 64-bit Microprozessor.
• 1995: R4700TM ernannt zum "Microprocessor of the Year" von Microprocessor Report.
• 1996: MIPS wurde zur größten und am schnellsten wachsenden RISC Architektur in der Welt
mit 19.2 Millionen Prozessoren. MIPS verzeichnete mehr als 10faches Wachstum von 1994 bis
1996.
• 1997: MIPS Vertragspartner verkauften 48 Millionen Prozessoren und MIPS wurde dadurch die
erste RISC Architektur in der Geschichte, die Motorola's 32-bit 68000 CISC Einheit übertraf.
• 1997: NEC's MIPS RISC VR4300TM wurde zum "Microprocessor of the Year" ernannt von
Microprocessor Report.
• 1998: MIPS Technologies, Inc. gab Aktion raus. Die Firmenstrategie ist den Endverbraucher
anzusprechen und die bereits vorhandene Position im traditionellen embedded Mark verstärkt
auszubauen.
Nennenswerte MIPS-Prozessoren
R4000. Der R4000 ist ein 64-bit Prozessor. Auf ihm können jedoch auch problemlos 32-Bit Applikationen laufen. Selbst dann, wenn der Prozessor im 64-bit Operationsmodus läuft.
R4000 Highlights
• 64-bit On-chip Floating-point Unit (FPU)
• 64-bit Integer Arithmetic Logic Unit (ALU)
• 64-bit Integer Register
• 64-bit Virtueller Adressraum
• 64-bit Systembus
R4300. Der MIPS R4300 ist ein high-performance, low-cost RISC Mikroprozessor, der für den
kostengünstigen embeddet Markt entworfen wurde.
R4300 Highlights
• 64-bit Architektur
• 3.3V, 100+MHz, 1.8W
R5000. Der MIPS R5000 Mikroprozessor ist ein echte 64-bit Implementierung der MIPS IV Architektur und ist ISA kompatibel mit der R4000 Familie. Der R5000 besitzt On-chip-1st Level Caches,
32KB Instruktion und 32KB Data.
R5000 Highlights
• 2-way superskalare Pipeline
• Accelerates 3D graphics
• MIPS IV ISA kompatibel
54
Seminar Moderne Prozessorarchitekturen
Der MIPS 10000 Prozessor
Der MIPS 10000 Prozessor
Leistungsmerkmale
Der R10000 ist ein Einchip superskalarer RISC-Mikroprozessor, der eine konsequente Weiterentwicklung der Prozessoren R2000, R3000 (Embedded Systems), R6000, R4400 (bekannt aus NintendoTM und Freunden) ist.
Skalierbarkeit bezeichnet die Möglichkeit, die Zahl der Prozessoren mit dem tatsächlichen Rechenbedarf zu erweitern, ohne daß eine andere Betriebssoftware erforderlich wird. Neben der dynamischen Erweitbarkeit eines Rechnersystems ist auch einer Reduktion der Zahl der Prozessoren im
laufenden Betrieb von Wichtigkeit, da bei großen Prozessorzahlen die Wahrscheinlichkeit eines
Prozessorausfalls erheblich zunimmt. Die Skalierbarkeit erlaubt in solchen Fällen die Fortsetzung
des Betriebs mit einer geringeren Zahl von Prozessoren.
Diese Konzeption erhält allerdings dadurch einen empfindlichen Dämpfer, daß bei der effizienten
Verteilung einer Berechnung auf mehrere Prozessoren die Laufzeit durch die Zahl der verfügbaren
Prozessoren sowie die Art ihrer Kommunikation erheblich beeinflußt wird. Der Ausfall von einem
oder mehreren Knoten kann dann über die Leistungsreduktion hinaus zu zusätlichen Leerzeiten der
verbleibenden Prozessoren und damit zu einer substantiellen Verschlechterung des Durchsatzes
führen. Deshalb wird der Wert einer Skalierbarbeit in erster Linie für die Bearbeitung unabhängiger
Aufträge, als den Multiprogrammierungsbetrieb, gesehen.
Der R10000 wurde in der MIPS ANDES -Architektur realisiert, was ausgeschrieben heißt Achitektur with Non- sequential Dynamic Execution Scheduling oder Architektur mit nicht-sequentieler
Befehlsausführung.
Fakten
Als Haupteigenschaften des MIPS R10000 sind zu nennen:
• 64-Bit Architektur
• Kerntakt bis 200 MHz
• 599-Pin Ball-grid-Array
• max. 30 Watt Leistungsaufnahme
• Implementierung mit dem MIPS IV - Befehlssatz ( naheliegend, die vierte, erweterte Version
von MIPS I )
• Voll Kompatibel zu älteren MIPS-Befehlssätzen, d.h. es können auch ältere 32-Bit Applikationen
( MIPS I , MIPS II ) ausgeführt werden ( auch neben 64-Bit Applikationen )
• Dekodierung von bis zu vier Befehlen pro Zyklus und Übergabe in entsprechende Warteschlangen vor
den Ausführungseinheiten
• fünf Ausführungseinheiten:
zwei Integer-Einheiten
zwei Floatingpoint-Einheiten
eine Load/Store-Einheit
• in jeder der fünf Ausführungseinheiten ist eine Pipeline vorhanden
• Unterstützung von Registerrenamig
• Unterstützung von dynamischer Befehlsverteilung und Out-Of-order-Execution
• Spekulative Ausführung von Befehlen nach einem Sprung gemäß einer Vorhersage,
miss-prediction-recovery in einem Zyklus
• Präzise Zuordnung von Unterbrechungen zu ihren verursachenden Befehlen
Seminar Moderne Prozessorarchitekturen
55
MIPS-Familie
• Nichtblockiernde Cache-Interfaces mit Prefetchfunktion
• Primär-Cache ist zweifach assoziativ und für Daten und Code jeweils 32K-Byte groß
• Sekundäres Cache-interface/-controler, zweifach assoziativ
• Systeminterface mit Multiprozessorunterstützung, nicht blockierend
• Fehlerkorrektur für Cache-Bus und Systembus
• Hardware-Debugging-Interface ( JTAG )
• Hergestellt in 0,35 mikron CMOS-VLSI-Technologie, mit ungefähr 6.7 millionen Transistoren
Das Schema des MIPS R10000 zeigt seine grundsätzlichen Strukturen. Es sind deutlich die Piplines, sowie der Taktgeber in der unteren Bildhälfte zu erkennen. Auf der oberen Bildhälfte befinden
sich die Caches. Der 1st Level Cache sitzt auf dem Prozessorchip, während sich der 2nd LevelCache außerhalb befinden. Auf die genaue Arbeitsweise soll folgend eingegangen werden.
CACHE-Design und Zugriffsstrategien
Der Prozessor verfügt über einen für Daten und Befehle getrennten 1st-Level- Cache mit einer
Größe von jeweils 32 KB. Beide Casches sind zweifach assoziativ. Der Befehlscache hat eine feste
Zeilenlänge von 16 Words, der Datencache eine von 8 Words.
Für den 2nd-Level-Cache ist ein Cachecontroler mit Unterstützung für Multiprocessing im Chip
vorhanden, der von 512 KB bis zu 16 MB groß sein kann und ebenfalls zweifach assoziativ ist. Die
Länge der Cachezeilen ist zu 16 oder 32 Words konfigurierbar und bei einer Konfiguration zu 32
Word und einer Gesamtgröße bis 2 MByte wird der korrekte Cache-Weg statistisch vorhergesagt.
Alle Cacheebenen arbeiten nach dem Writeback-Algorithmus und mit einer LRU-Strategie.
56
Seminar Moderne Prozessorarchitekturen
Der MIPS 10000 Prozessor
LRU bedeutet least recently used: Die am längsten nicht benutzte Daten werden als Kandidat prognostiziert, auf die auch in Zukunft am längsten nicht mehr zugegriffen werden soll.
Daneben gibt es noch FIFO und LFU, die, um der Theorie Rechnung zu tragen, hier erklärt werden
sollen.
FIFO (first-in, first-out): Die Daten, welche am längsten im Speicher stehen, werden ausgelagert.
LFU (least frequently used): Die Daten, welche am wenigsten oft benutzt wurden, werden ausgelagert.
Im Fall eines Miss-on-Cache-Write kommt eine sogenannte Fill-on-write- miss-Strategie zum Einsatz, die nach o.g. Mechanismus Platz im 1st-Level-Cache schafft, um die Daten möglichst schnell
loszuwerden. Beim zyklischen Write- Back geschieht dieses nach gleichem Prinzip im 2nd-LevelCache, es wird dort Platz geschaffen und später erst in den Hauptspeicher geschrieben. Folglich
gibt es diesem Prozessor keinen Write-through, mit Ausnahme von Bereichen für die das Caching
deaktiviert wurde.
Für Speicherbereiche mit deakiviertem Cache gibt es noch die Möglichkeit eine uncached-accelerated-Strategie zu benutzen, die vier Speicherzugriffe abpuffert und diese dann gesammelt, wenn
möglich im Blockmode, zurückschreibt. Dieses ist besonders für Zugriffe auf Videospeicher von
Interesse, wo der Videochip zur Darstellung immer die aktuellen Daten braucht und nicht darauf
warten kann, das die Daten die Caches durchlaufen hat. Der uncached-Mode ist notwendig, da der
Prozessor memory-mapped-IO für die Anbindung von Peripheriegeräten, wie z.B. eine PCI-Bridge,
benutzt.
Seminar Moderne Prozessorarchitekturen
57
MIPS-Familie
Eine besondere Eigenschaft der Caches ist die Ausführung als nicht blockierender Cache, was es
ermöglicht während eines Cache-Refills, sei es nun aus dem 2nd- Level-Cache oder aus dem
Hauptspeicher, weiter auf den Cache zuzugreifen. Da- durcher wird ein Anhalten der Pipelines weitestgehend ausgeschlossen. Während des Cache-Refill für den 1st-Level-Instruction-Cache ( bzw.
beschreiben ) wird darüber hinaus ein Predecode ausgeführt, der den Aufwand an späterer Stelle
minimiert.
Die Pipelines
Der Prozessorkern ist in einem superskalaren Design ausgeführt und arbeitet mit insgesamt sechs
weitestgehend unabhängigen Pipelines und ebenso vielen Ausführungseinheiten. Für jede der Operationstypen, Integer, Float und Load/Store, steht eine Warteschlange für Befehle zur Verfügung.
Für letztere steht eine streng nach dem FIFO-Prinzip geordnete Warteschlange bereit um Speicherabhängigkeiten und Datenkonsistenz zu gewährleisten. Die anderen beiden sind keiner strengen
Ordnungsregeln unterworfen. Es verläßt ein Befehl dessen Abhängigkeiten, in Bezug auf Operanden, erfüllt sind, die Warteschlange und wird ausgeführt. Jede der beiden Einheiten verfügt über ein
Registerfile mit 32 logischen Registern zu 64 Bit, die auf 64 physikalischen Registern abgebildet
werden. Zu jedem physikalischen Register gehört immer nur ein Wert. Wird auf ein logisches Register eine Operation ausgeführt, so wird das Ergebnis in ein nicht zugewiesenes Register geschrieben.
Nachfolgend die sieben Stufen der 4-Wege-Pipeline (vier Befehle gleichzeitig):
Stufe 1: Diese Stufe holt pro Zyklus bis zu 4 Befehlen, unabhängig, wie sie innerhalb einer Cachezeile ausgerichtet sind. Die einzige Einschränkung besteht darin, daß der Prozessor nicht über die
Grenze einer Cachezeile laden kann.
58
Seminar Moderne Prozessorarchitekturen
Der MIPS 10000 Prozessor
Stufe 2: In der 2. Stufe werden die Befehle dekodiert und die Operandenregister, die durch logische
Adressen referenziert werden, umbenannt, d.h. an ihrer Stelle die physikalische Adresse eingetragen und als benutzt markiert. Des weiteren wird ein freies Register reserviert, das das Ergebnis des
Befehls aufnimmt.
Stufe 3: In dieser Stufe werden die Befehle in die Warteschlangen vor den Ausführungseinheiten
eingetragen. In dieser Stufe beginnt die eigentliche Befehlsausführung.
Stufen 4-6: In den Stufen 4-6 werden die eigentlichen Operationen ausgeführt. Für die einzelnen
Ausführungseinheiten stehen verschieden Pipelines zur Verfügung.
• Floating-Point-Multiplizierer
Diese Pipeline ist 3-stufig. In ihr werden Multiplikation und bedingte Speicherbefehle für einfach und doppelte Genauigkeit mit einer Wiederholrate von 1 Zyklus und einer Latenzzeit von 2
Zyklen ausgeführt. In der dritten Stufe wird das Ergebnis in das Zielformat gepackt und in das
Registerfile zurückgeschrieben.
• Floating-Point-Dividierer und Radizierer
Diese Einheit hat keine Pipeline im eigentlichen Sinn. Vielmehr verwendet sie die Recheneinheiten der Multiplizierereinheit und arbeitet iterativ. Sie ist in der Lage Divisionen und Radizierungen parallel auszuführen.
• Floating-Point-Addierer
Auch diese Pipeline ist 3-stufig. In ihr werden Additionen, Subtraktionen Vergleiche und Formatwandlungen mit einer Wiederholrate von 1 Zyklus und einer Latenzzeit von 1 Zyklus ausgeführt.
• Integer-Einheit 1
Diese Pipeline ist, soferner man davon sprechen kann, 1-stufig. Diese Stufe führt Additionen,
Subtraktionen, logische Operationen und die Auswertung der Sprungvorhersage aus. Die
Latenzzeit ist 1 Zyklus und die Wiederholrate ebenfalls 1 Zyklus.
• Integer-Einheit 2
In dieser, ebenfalls 1-stufigen, Pipeline werden Additionen und Subtraktionen sowie Multiplikationen und Divisionen durchgeführt. Die Latenzzeit ist 1 Zyklus und die Wiederholrate ebenfalls 1 Zyklus für Addition und Subtraktion, ansonsten deutlich höher, nach Tabellen
bestimmbar.
• Load/Store
Diese Einheit hat einen 16-Einträge-Stack um ebenso viele Speicherzugriffe nicht blockierend
auszuführen. Sie verfügt über ein eigenes 44-Bit Adressrechenwerk für logische Adressen und
einen 64 Einträge großen TLB, der vollassoziativ ist.
Stufe 7: In dieser Stufe beenden die Befehle gemäß ihrer ursprünglichen Programmreihenfolge. Es
können bis zu 32 Befehlen außerhalb ihrer Reihenfolge behandelt werden.
Register-Renaming
Registerrenaming ist eine Methode um auf relativ einfache Art und Weise Operandenabhängigkeiten zu überprüfen und die spekulative Ergebnisse von Befehlen reversible zu machen. Die Implementierung im R10000 macht von dieser Methode sehr aggressiv Gebrauch. Wie oben erwähnt,
besitzt der Prozessor zwei Registerbänke zu 32 logischen, die auf 64 physikalische Register abgebildet werden und im Bezug auf das Renaming identisch sind. Beim Renaming werden im ersten
Schritt logische Registeradressen gegen physikalische Adressen ersetzt und dem Zielregister ein
neues physikalisches Register zugewiesen. Das Originalregister und dessen logische Adresse werden bis zur Befehlsbeendigung durch die siebte Stufe der Pipeline zwischengespeichert. Dadurch
ist es möglich Befehle außerhalb ihrer Reihenfolge zu bearbeiten und die produzierten Ergebnisse
gemäß der Programmreihenfolge in die Registerfiles zu schreiben. Ferner ist das Abbrechen eines
spekulativ ausgeführten Befehles möglich wie sie bei bedingten Sprüngen auftreten.
Seminar Moderne Prozessorarchitekturen
59
MIPS-Familie
Spekulationen und Vorhersagen
Die Entwickler des Prozessors sind wahrscheinlich nach dem Prinzip vorgegangen, das man so
ziemlich alles vorhersagen kann. Die in diesem Zusammenhang herausragende Funktion ist die
speculativ execution. Der Prozessor führt intern eine Sprungvorhersage nach einem statistischen 2Bit-Kriterium aus und führt die Befehle entlang des Vorhergesagt Pfades aus. Es wird die Sprunggeschichte der letzten 512 ausgeführten Sprünge protokolliert. Er ist in der Lage bis zu vier falsch
vorhergesagte Sprünge zu revidieren, was durch den Mechanismus des Registerrenaming vereinfacht wird. Beim Abbruch oder rückgängig machen einer Operation wird dem logischen Ergebnisregister sein ursprüngliches physikalisches Register wieder zugewiesen und somit das Ergebnis
verworfen.
Des weiteren trifft der Prozessor Vorhersagen darüber, wo in dem, wie Eingangs erwähnt 2-fach
assoziativen, Cache die Daten liegen. Er ist in der Lage bis zu einer Cachegröße von 2 MByte und
einer Zeilenlänge von 32 Words Vorhersagen zu machen. Laut Entwicklerangaben ist der Performancegewinn größer als wenn man mehr Cache verwendet.
Systeminterface
Die Schnittstelle zum Chipsatz, der hier external-agent heiß, und zu anderen Prozessoren besteht im
wesentlichen aus einem 64-Bit Adress-/Daten-Multiplexbus, einem 12-Bit Commandbus und einer
Anzahl von Signalen zur Datenflußkontrolle. Das Interface ist asynchron und nicht blockierend,
was durch mehrere Pufferspeichern, teils auch FIFO's, realisiert wird. Darunter befindet sich auch
die Logik für den oben erwähnten uncached accelerated-Mode. Ferner unterstützt das Interface
auch das Multiprocessing in zwei verschiedenen Arten:
• Multiprocessing using dedictated extrenal agents
Diese Variante findet Anwendung bei großen Rechner-Arrays, wo man deutlich mehr Leistung
braucht, als man es aus einem Computer in Big-Tower-Größe erwarten könnte. Es können hiermit beliebig (annähernd) viele Prozessoren verbunden werden. Jeder von ihnen muß über einen
exteranl agent verfügen, der für die Kommunikation mit dem Hauptspeicher, der I/O und den
anderen ea verantwortlich ist. Es muß selbstverständlich dafür sorge getragen werden, das die
Verbindung der ea kohärent ist.
• Multiprocessing using a Cluster-bus
Dieses ist die einfachere Variante, wo 2-4 Prozessoren direkt am Systeminterface verbunden
sind und sich den ea, der Jet cluster-coordinater heißt, teilen. Die Verteilung der Zugriffsrechte
wird mit den drei Signalen SysRequest, SysRelease und SysGrant durch den cluster-coordinater gesteuert.
In beiden der Betriebsarten werden folgende drei Kohärenzprotokolle unterstützt:
• snoopy-based
Die Prozessoren im Slave-Mode ,"schnüffeln" auf dem Bus und reagieren, je nachdem, ob sie
angesprochen sind oder nicht. Dieses ist das einfachste aller Protokolle mit dem geringsten
Hardware-Aufwand, aber auch das langsamste. Jeder Prozessor, wenn er nichts mit den Informationen auf dem Bus anfangen kann, muß dieses dem aktuellen Master-Prozessor mitteilen,
was bei drei Slaves einen beträchtlichen Protokoll-Overhead ausmacht..
• snoopy-based with external duplicate tags and control
Bei diesem Protokoll melden sich Slave-Prozessoren nur, wenn sie vom cluster- coordinater
angesprochen werden. Selbiger besitzt eine Kopie aller 2nd-Level- Tags im Cluster und weiß
somit, ob sich ein angefordertes Datum in einem der Slave-Caches befindet. Wenn dem so ist,
dann gibt er die Anfrage an den entsprechenden Prozessor weiter, der dem Auftraggeber einen
Response liefert, ansonsten wird ein Hauptspeicher ausgeführt. Der Protokoll-Overhead sinkt
auf dem Bus und der Hardware-Aufwand beim vom cluster-coordinater steigt.
60
Seminar Moderne Prozessorarchitekturen
Ein Vergleich zum MIPS R12000
• directory-based with external directory structure and control
Über dieses Protokol schweigt sich die Dokumentation weitestgehend aus. Sie ist den duplicated Tags ähnlich. Es werden zusätzlich Informationen über den Prozessor gehalten. Welcher
Cache hält welche Einträge.
Die external agents oder cluster-coordinater sind nicht wie bei anderen Prozessoren erhältlich. Sie
werden in der Regel nach eigenen Bedürfnissen von dem Systemdesigner entworfen und in ASIC's
realisiert.
Ein Vergleich zum MIPS R12000
Der MIPS R12000 stellt eine direkteWeiterentwicklung
des MIPS R10000 dar. Es wurden einige kleine Verbesserungen vorgenommen, die die Prozessor-Performance
insgesamt auf über 23 % gegenüber dem MIPS R10000
erhöhte, und dadurch eine eigene Prozossornummer
rechtfertigt. Auszugsweise werden jetzt diese Verbesserungen vorgestellt.
Beim MIPS R12000 wurde die Active List von 32 Einträgen auf 48 Einträge erhöht. Diese Erweiterung erlaubt
mehr Befehlen entweder in der Liste auf ihre Ausführung zu warten oder Ausgeführt zu werden. Bei einem
Branch, erlaubt diese dem Prozessor spekulativ mehr
Befehle auszuführen, was auch tiefere Spekulation
genannt wird. In den allermeisten Situationen, erhöhen
diese beiden Effekte die Anwendungs-Performance.
Wenn der MIPS R10000 Daten vom
Systembus zu dem zweiten Cache transferierd, wird der Cache-Controller für eine
Weile lahmgelegt, bis die komplete CacheZeile vom Hauptspeicher eingelesen
wurde. Da der Systembus-Takt entscheidend langsamer ist als der Prozessortakt,
kann ein ganzer Zeilenübertrag für den
zweiten Cache eine Ruhepause von einigen
Duzent Zyklen bedeuten. Während dieser
Zeit keine andere Anfrage kann beanwortet
werden. Beim MIPS R12000 ist der Transfer einer Cachezeile vom Systembus zum
zweiten Cache in zwei Unterblöcke geteilt,
vier für den Datencache und drei für den
Instruktionencache mit freien Zyklen zwischen jedem Unterblock. Während diesen
Zyklen können andere Operationen initiert
werden vom zweiten Cache Controller.
Wenn Daten vom Systembus kommen
während dieser Zeit, werden sie gespeichert bis der Transfer vorbei ist. Insgesamt
reduziert diese Veränderung den Zeitverbrauch der anderen Operationen. Das hilft ganz besonders
den Anwendungen, die permanenten Miss auf den ersten und zweiten Cache haben.
Seminar Moderne Prozessorarchitekturen
61
MIPS-Familie
Zwei Veränderungen verbessern den MIPS R12000 bezüglich seiner Performance bei BranchBefehlen. Erstens die 4fache Erweiterung der Voraussagetabelle erhöht die Genauigkeit. Zweitens,
ein 32einträgiger Target Adress Cache produziert die Zieladressen für Branch-Befehle. Beim MIPS
R10000 jeder Branch verursacht einen 1 Leerlaufzyklus in der Pipline, während die Zieladresse
berechnet wird. Der Leerlauf wird eliminiert, wennimmer der Branch einen hit auf das Zielcache
macht. Branch-Befehle können von 15 % bis 20 % der gesamten auszuführenden Instruktionen
einer Anwendung ausmachen. Deshalb ist die Vergrößerung der Branch Prediction Table und die
Branch Target adress Cache ein großer zur allgemeinen Verbesserung der Anwendungs-Performance.
Der MIPS R10000 kann keine Instruktionen
dekodieren, wenn die Adress-Warteschlange
voll wird. Beim MIPS R12000, alle load,
store, cacheop, und prefetch Instruktionen
werden zu der Integer-Warteschlange gesendet und in der Address calculation Unit veröffentlicht. Sie werden dann aus der IntegerWarteschlange in die load/store Warteschlange plaziert. Obwohl dadurch zusätzliche
Instruktionen
in
die
IntegerWarteschlange kommen, werden sie normalerweise sehr schnell weitergeleitet. Diese
Veränderung vereinfacht beträchtlich das
Design dieser Prozessorkomponenten ohne
die Anwendungs-Performance zu verändern.
Quellenangaben
[1] www.mips.com
[2] www.sgi.com
[3] www.sgi.de
[4] Hennessy and Patterson: Computer Architecture - A quantitative Approach (1996)
[5] Kane, G.: MIPS RISC Architecture, Prentice-Hall (1988)
62
Seminar Moderne Prozessorarchitekturen
K APITEL 7
ARM & relatives
Heng Yiu Chau
Ein wenig Historisches
Die Wiege der ARM-Prozessoren ist in der Firma Acorn Electronics zu finden, welche 1978 von
Adam Curry und Hermann Hauser in England gegründet wurde. Großgeworden ist die Firma mit
der Herstellung von 8-Bit Homecomputern, von denen der BBC Micro-Rechner (’82) wohl als der
Durchbruch bezeichnet werden kann. Dieser, in Kooperation mit der Sende-Anstalt BBC verkaufte
Rechner wurde in fast allen Schulen installiert, als Begleitwerk für edukativen BBC-Sendungen.
Auch als Homecomputer verkaufte sich der BBC Micro formidabel. BBC Micro's Features, wie
Networking, (Pseudo)Multiprozessorbetrieb...., waren ein frühes Zeichen für die Innovativität,
Creativität und den Mut der Firma Acorn.
Als aber 16Bit und 32Bit Prozessoren auf dem Markt erschienen, sogar im Homecomputerbereich
Einzug hielten, und graphische Benutzeroberflächen (LISA) immer mehr salonfähig wurden, neigte
sich die 8-Bit Ära dem Ende zu, angesichts des für Windowing Systeme erforderlichen Rechenpowers. Acorn war sich darüber im Klaren, daß ein Nachfolger der BBC micro's hermußte. Außerdem wollte Acorn den Personal Computer Markt ("Business class") im Angriff nehmen, wo der
Poweruser sicherlich sich einen performanten Computer wünscht.
Man nahm sich fast alle 16- und 32-Bit Prozessoren, die auf dem Markt verfügbar waren, unter die
Lupe, fand aber leider keinen geeigneten. Bemängelt wurde meistens deren zu komplexer Instruction set, niedrige Daten-Bandbreite und langsame Interruptbehandlung. Nachdem man keinen
Nachfolger für den Rockwell CPU 6502, einen einfach gestrickten 8-Bit Prozessor, dessen Simplizität und Mächtigkeit man bei Acorn sehr schätzte, finden konnte, faßte man den kühnen Entschluß,
einen eignen 32Bit RISC-Prozessor zu entwickeln.
Begeistert von der RISC-Philosophie wurde 1983 ein, in Chipdesign unerfahrener Entwicklungsteam unter der Leitung von Steve Furber zusammengetrommelt, bestehend aus Acorn Entwicklern
und RISC-Forschern der Berkeley University, mit Verstärkung in Form erfahrener Hardware-Designer aus dem Hause VLSI. Natürlich konnte nach anderthalb Jahren Entwicklungszeit hieraus nur
etwas Simples und Kleines entstehen, aber dies war durchaus in Acorns Sinne, wie der folgende
Zitat Hermann Hausers belegt: "... when we decided to do a microprocessor on our own, I made two
great decisions - I gave them two things which National, Intel and Motorola had never given their
design teams: the first was no money; the second was no people. The only way they could do it was
to keep it really simple.". Voller Stolz taufte Acorn den 1. kommerziellen RISC-Prozessor Acorn
RISC Machine oder ARM.
Seminar Moderne Prozessorarchitekturen
63
ARM & relatives
Die hatte in der Tat auch Vorteile; kürze Entwicklungszeiten, leichtere Herstellung. Bislang gelang
es Acorn ihren Prozessordesign bereits in der 1. Silizium-Fassung lauffähig herzustellen; eine lange
Reihe von Champagneflaschen in der Empfangshalle zeugt von diesen Erfolgen.
Allgemeiner Aufbau eines ARM Prozessors
Der Prozessor hat, gemäß RISC-Konzept eine Load/Store Architektur, ein Instruktionssatz fester
Instruktionslänge (32 Bit) mit Conditional Execution, und eine dreistufige Pipeline.
Damit die Pipeline durch Sprungbefehle nicht so häufig geleert werden muß, hat man das Konzept
der Conditional Execution sich ausgedacht. Alle Instruktionen sind mit Bedingungen kombiniert.
So kann man einige Branches sparen, und die Pipeline effektiver einsetzen.
Der ARM besitzt 16 universelle (von denen eine die Rolle des Program Counters hat) 32Bit Register, die zu allen Zeitpunkten sichtbar sind. Mit Augenmerk auf eine rasche Interrupt-Abarbeitung
weisen ARM Prozessoren sogar mehrere Duplikate auf. In (Fast)Interrupt- und SupervisorMode
überblenden diese dann die entsprechenden UserMode-Register. Dadurch erspart man sich, im
Falle eines Interrupts das umständliche Retten von Register, was ja mit teueren Speicherzugriffen
verbunden ist.
Die ersten Modelle ARM1, ARM2 und ARM3 hatten außerdem eine Besonderheit, die wohl aus
Sparsamkeit entstanden war. Der Adreßraum dieser CPUs war nur 26Bit lang, sodaß der 16. Register R15 neben den PC auch Platz für das PSW hatte. Da alle Adressen word-aligned waren, verwendete man zudem die untersten zwei Bits des PCs als den ProzessorModus.
Diese eigenwillige Verwendung von R15 wurde später aufgegeben. "Dafür" haben spätere Modelle
einige schöne Extras, u.a. On-chip Cache, Verlängerung des Pipelines, noch mehr ProzessorModi,
Thumb Extension. Aber später mehr dazu.
Aus ARM wird ARM
Leider kam Acorn mit seinen Prozessoren und Homecomputern etwas spät auf dem Markt: Gegen
1985 war die Nachfrage an Homecomputern sehr stark zurückgegangen, da der Markt gesättig war.
Dabei hatte Acorn erst 1987 seinen ersten ARM-gesteuerten Homecomputer, den Archimedes fertiggestellt.
Während sich Acorn weiter auf Personal Computer konzentrierte, untersuchte VLSI neue Einsatzbereiche für die ARM Prozessoren und rührte dabei kräftig den Werbetrommel. Es stellte sich heraus, daß viele Firmen an den Einsatz von ARM als embedded Controller sehr interessiert waren.
Gerade die neue Entwickling hin zu Portables und Handhelds richtete die Augen der Hardwarehersteller auf ARM und RISC allgemein, wegen deren besonderen stromsparenden Eigenschaften
zusammen mit hoher Performance. Insbesondere zeigte Apple großes Interesse an ARMs Produktpalette.
64
Seminar Moderne Prozessorarchitekturen
ARMs im Überblick
Zur Verbesserung der Akzeptanz der Prozessorreihe ARM bei anderen Computerherstellern, hatte
man sich bei Acorn dazu entschlossen, die ARM-Division auszugliedern. Unter Beteiligung von
VLSI und Apple entstand aus dieser die ARM ltd. Man mache sich klar, daß ARM nicht mehr für
Acorn RISC Machine steht, sondern für Advanced RISC Machine.
ARM ltd. führte gleich Veränderungen in der ARM Architektur durch, um seine Produkte attraktiver zu gestalten für potentiellen Lizenznehmer: Die ARM Prozessoren wurden um zwei dedizierte
Register, CPSW und SPSW und Prozessor Mode-Register erweitert, infolge dessen der 26 bittige
Adreßraum der Vergangenheit angehört. Ein paar Modelle bieten aber noch eine 26Bit Emulationsmodus an, womit alte "26Bit"-Software noch verwendet werden können.
Auch lassen sich die ARMs nun wahlweise als big- und little-endian betreiben.
Eine neue Nomenklatur der (neuen) CPUs wird eingeführt, zur schnelleren Identifikation der CPUs
als Prozessorkern (einstellige -), Prozessor (zweistellige -) und Makrozelle (dreistellige Modellnr).
Zur Verdeutlichung des Wandels zu ARM ltd. soll der nächte ARM Prozessor ARM6 heißen.
Die mittlerweile große Bibliothek an Schaltkreisen, I/O Bausteinen rundum ARM-CPUs wurde den
Lizenznehmer, neben mächtigen Entwicklungstools und Debuggingtools zur Verfügung gestellt.
Dank des Baukastenkonzeption wird die Entwicklung von Chips und Makrozellen beschleunigt.
Aus eigener Erfahrung wußte Acorn nur allzu gut, daß eine möglichst kurze Entwicklungszeit bei
Herstellung von Custom-CPUs von essentieller Bedeutung war.
ARM ltd. lebt von den Lizenzen an ihren ARMs, der Vielzahl an mächtigen Entwicklungstools, die
sie ihren Kunden zur Verfügung stellt. Auch begleitet sie ihren Kunden bei der Entwicklungsprozeß von Custom-Chips.
Neben der ARM-Reihe sind noch der, in Zusammenarbeit mit Digital entwickelte StrongARM und
das Forschungsobjekt Amulet im Rahmen asynchroner Prozessoren an der Manchester Universität
wichtig, da diese noch Innovationen gegenüber ARM bieten. Daher werde ich kurz auf die drei Prozessorreihen eingehen.
Die ARMs sind gegliedert nach Modellnummer und nach Architektur (oder Instruction Set Architecture). Neben den typischen Hardware-Spezifika der Prozessoren, wie Taktfrequenz, Cache,
Pipeline spielt die Architektur eine übergeordnete Rolle, denn an ihr kann man erkennen, welche
Prozessoren kompatibel sind.
ARMs im Überblick
ARM Architektur v1
ARM1
ARM Architektur v2
ARM2 ARM3
ARM Architektur v3
ARM6, ARM7, Amulet
ARM Architektur v4
ARM8, ARM9, StrongARM
ARM Architekur v5 & VFP v1
ARM10 & VFP10
Seminar Moderne Prozessorarchitekturen
65
ARM & relatives
Thumb extension
die Wiederanwendung des RISCprinzips auf ARMs RISCprozessor ?
Das Thumb ISA ist eine Erweiterung des bestehenden ARM ISA, kann auch als eigenständiger 16bittige Instruktionssatz verstanden werden.
Wieso Thumb? Man hat immer bei RISC-basierten Systemen kritisiert, daß diese recht speicherhungrig sind. Für performante und große Rechnersysteme dürfte dieses Argument kein Hindernis
sein, aber für Handhelds, Portables und Ähnliches wird die Frage nach benötigten Ressourcen
nahezu zur Grethenfrage. Man halte sich vor Augen, wie wichtig die optimale Ressourcenplanung
ist, was eine starke Ressourcenknappheit zur Folge hat.
Aus Erfahrung ist bekannt, daß durch Code-Optimierungen per Hand ca. 10 bis 20% Platz eingespart werden kann, wobei dies recht zeit- und arbeitsintensiv ist. Verbesserungen am Compiler
erreichen einen noch geringeren Platzersparnis.
Der Einsatz von komprimierten Code kostet Performance für die Dekomprimierung, und stellt
somit evtl. auch keine akzeptable Lösung dar.
Zwar hat ARM ISA im Vergleich zu anderen Instruktionssätzen anderer RISC Prozessoren eine
recht hohe Code-Dichte, dennoch hat sich das ARM-Team bemüht, Ihre Prozessoren in diesem Disziplin noch besser zu gestalten. Das Ergebnis, Thumb ISA, kann sich sehen lassen und hatte zudem
ein noch weiterer Vorteil im Petto!
Alle Thumbinstruktionen sind 16 Bit lang, halb so lang wie ARM Instruktionen. Damit diese
Instruktionen vom unveränderten Prozessorkern, der nur 32-bittige ARM Instruktionen versteht,
wird ein Decompressor-Unit zwischengeschaltet. Dieser Dekompressor wandelt 16-bittige ThumbCode in 32-bittige ARMCode um, und das ohne Performance-Einbußen!
Bei dem Design des Thumb Instruktionssatzes wurde eine Untermenge des ARM Inktruktionssatzes gewählt, bestehend aus den wichtigsten Instruktionen des ARM Instruktionssatzes, angereichert
mit einigen zusätzliche Instruktionen, die das Leben eines ThumbProgrammierers erleichtern. Bei
der Kodierung dieser in 16-Bit Wörter ging man ebensfalls sorgfältig vor, sodaß eine möglichst
kostengünstige Konvertierung begünstigt wird.
Da nun 16 Bit statt 32 Bit zur Verfügung stehen, sind gewisse Einschränkungen unumgänglich,
beide Wichtigen wären das Wegfallen des Conditional Bits und somit der Feature Conditional Execution und des direkten Zugriffs auf die obere Hälfte der Register.
66
Seminar Moderne Prozessorarchitekturen
ARM10 Thumb Das aktuelle ARM Modell 1020T mit Vector FPU
Trotz des Verlustes der Condition Execution ist Thumb-Code ist ca. 30-40% kürzer als ARM-Code.
Aber die Sahne auf den Törtchen ist der mögliche Einsatz von 32-Bit ARM Prozessoren (um somit
potentielle 32Bit Performance) in einer 16-Bit Umgebung. Oder denkbar wäre auch der Einsatz von
16-Bit Komponenten in einem Thumb-System, womit den Designern ein neues Kostensparungspotential angeboten wird, auch wenn das Performance-Einbuß mit sich brächte.
Dadurch, daß sich der Prozessor entweder im Thumb- oder ARM-Modus (Bit in PSW) befindet,
läßt sich Thumb- und ARM-Code mischen. Umschaltung zwischen beiden Modi erfolgt mittels
Branch and eXchange Befehl, also wird dabei auch die Pipeline geleert.
Fazit: Ein neues Konzept mit vielen Vorteilen und geringen Nachteilen. Mit rel. wenig Einsatz können ARM Prozessoren eine Thumb-Erweiterung erfahren. Somit hat sich am Design der ARMs
auch wenig verändern müssen.
ARM10 Thumb
Das aktuelle ARM Modell 1020T mit Vector FPU
Mit dem ARM9 gelang es ARM nicht wirklich den StrongARM wesentlich zu übertreffen. Daher
war man gespannt auf die offizielle Ankündigung des ARM10. Im Oktober 1998 war’s soweit: und
man wurde nicht enttäuscht: Fabriziert in 0,25und 0,18= µm liefert er 400 MIPS bei 300 MHz mit
(nahezu sicher) ca. 0,6 mWatt. Der optionale Vektor Floating Point Unit bringt es auf 600
MFLOPS. Die ARM1020T Macrozelle basiert auf den ARM10TDMI Integer Core und VFP10
FPU mit Caches und MMU, wobei die internen Datenpfade des 32Bit Kerns zu den Caches und
zum Coprozessor sind 64Bit breit sind. Bloß auf Super-skalarität hat man verzichtet.
Sie hat eine set-assoziativ arbeitende, Hardvard Cache Architektur mit jeweils 32 kB, einer MMU
und einem TLB. Das Betriebsystem kann bei der Ersetzungsstrategie wählen zwischen RoundRobin und fully-random. Der Instruktionscache und TLB bieten ein Feature namens lock-down:
Bereiche des Caches können gezielt dort verbleiben. Dem Datencache wurde ein kleiner Write Buffer mit 8 Einträgen spendiert, damit der Kern ohne Wartezyklen weiterrechnen kann. Auch bei
Cache Miss wird die Pipeline nicht angehalten, das Datum kann "nachgereicht" werden. Damit
würde sich dieser Prozessor auch für RealTimeBetriebsysteme und RT-Applikationen eignen.
Seminar Moderne Prozessorarchitekturen
67
ARM & relatives
Der ARM10TDMI Kern hat fünf pipelines:
1. Fetch (Instruction Fetch & Branch Prediction)
2. Instruction Decode & Register Read
3. Execute (Shift & ALU), Adress calculate und Multiply
4. Memory Access / Multiply und
5. Register Write
Wie man auf der obigen Abbildung erkennen kann, fällt auf, daß einige Units der Execution Stufe
mit dem Decode und Memory Access & Multiply Stufe überlappen. Auch können mehrere Instruktionen in gleicher Stufe verarbeitet werden, soweit sie von einander unabhängig sind.
Die Branch Prediction Einheit profitiert von den 64Bit Anbindung an den Cache und kann Sprünge
vorm Fetch erkennen, die Zieladresse auswerten und Instruction Fetch an der Zieladresse veranlassen. Es wird spekuliert, daß Zieladressen vorm PC Schleifen sind, und genommen werden. Im
Schnitt liegt man bei dieser statischen Annahme zu 80% richtig.
Now for something completely different:
VFP10, ein FPU nach Vector Floating Point Architecture (VFP v1) besitzt einen Satz Register, die
je nach gewünschten Genauigkeit entweder 16 double precision Werte , und 32 single precision
Werte aufnimmt.
Entweder werden einzelne Vektoren abgelegt, und diese im SIMD Verfahren mit einer Operation
verarbeitet. Alternativ kann der Satz so genutzt werden, daß 8 Skalare mit, entweder 6 vier-elementige oder 3 acht-elementige Vektoren Platz haben.
Die FPU besitzt zwei Pipelines, die nicht völlig getrennt sind; sie teilen sich die ersten beiden Stufen Fetch und Decode. Bedingt durch das Vektorkonzept des VFPs stellt dies aber keine Beeinträchtigung der Parallelität beider Pipelines.
Die fünf-stufige Load/Store Pipeline überträgt pro Zyklus ein double oder zwei single precision
Werte in den / aus dem Speicher.
Die sieben-stufige arithmetische Pipeline ist eine multiple-add Pipeline, in der elementare Operationen "direkt", komplexere, wie Division, Wurzelfunktion oder Modulo als iterative Prozesse ausgeführt werden.
StrongARM-Reihe
Digital´s ARM-Implementation
StrongARM (1996) ist ein Gemeinschaftsprojekt von Digital und ARM, wobei Digital hier sein
jahrenlange Expertise in Chipdesign mit einbrachte und einige Erneuerungen und weitere Ideen zur
Verringerung der Stromaufnahme einführte. StrongARM liefert 230 MIPS bei 200 MHz.
Intel übernahm die StrongARM-Reihe von Digital, pflegt sie weiter und vermarktet sie heute.
68
Seminar Moderne Prozessorarchitekturen
AMULET Forschung asynchroner Prozessoren auf Baszs von ARMs
Das erste Modell SA-110 (Ende 96) der StrongARM Reihe, basiert auf den ARM6, hatte aber weitreichende Verbesserungen:
• 32Bit x 32Bit => 64Bit + Akkumulator Instruktion
• Byte-, Halfword- und Word-Datentyp (neue Instruktionen)
• eine fünfstufige Pipeline
• Cache on chip in Harvard Cachearchitektur: Instruction Cache und Data Cache jeweils 16KByte
• interne PLL clock: Erzeugung hoher Freq. aus niederfreq. Quarz, der wenig Strom verbraucht
• Einführung Stromsparmodi neben Normalbetrieb: Idle- und Sleepmode
• Write buffer mit 8 Einträgen
• kein Branch History Table
Somit klassifiziert sich dieser Prozessor als ARM v4 und visiert den PDA-Markt an, für den er aufgrund seiner geringen Stromaufnahme bei guter Leistung prädestiniert ist. Digital stellte ARMs
Prozessor ARM8 ziemlich in den Schatten, sodaß dieser von der Welt wenig Abachtung erfuhr
(sogar ARM verschweigt nahezu den Existenz ihres Stück Silizium auf der ARM Website!).
Leider hatte der StrongARM einen Nachteil: er war nicht komplett ARM v3 konform; dank der
Harvard Architektur und der fünfstufigen Pipeline gab es keine hundertprozentige Binärkompatibilität mit Prozessoren der ARM v3 Architektur. Beide sind ein Novum für die ARM-Welt, in der ja
meist um jedes Byte gerungen wird. Daher wird man vor unsauberen Programmiermethoden wie
selbstmodifizierendem Code nicht zurückschrecken.
Die genauen Problemstellen:- Bislang wiesen gängige ARM Prozessoren eine dreistufige Pipeline
auf, mit der Programmierer dann gerechnet haben. Leider bringt die Verlängerung des Pipelines ein
paar Veränderungen mit, z.B. ist der gesicherte PC bei Stack calls nicht zwei 32Bit Wörter, sonder
vier 32Bit Wörter dem aktuellen PC voraus ist.
- Selbstmodifizierender Code und eine Harvard Cache-Architektur harmonisieren besonders gut,
wie man sich leicht vorstellen kann.
Man reicht einen Chip namens 21285 nach, der dem SA-110 als I/O Interface zu gängigen Komponenten fungiert. 21285 bietet u.a. eine SDRAM-, FlashROM-, PCI-Bus Schnittstelle an.
Die Modelle SA-1100 bzw. 1110 mit Companionchip SA-1101 resp. SA-1111 sind nahezu identsch
(PCMCIA - und Speicher Controller unterschiedlich) und werden daher zusammen besprochen:
Sie sind Nachfolger des SA-110 mit integrienten I/O Schnittstellen, wie USB end point controller,
LCD Controller, UART, IrDA, PCMCIA
AMULET
Forschung asynchroner Prozessoren auf Baszs von ARMs
Amulet1 (1990-1993)
Asynchrone Schaltkreise werden schon länger erforscht, aber Steve Furber implementierte mit seiner Forschungsgruppe an der Manchester University den ARM6 in asynchroner Logik, das Ergebnis heißt Amulet1. Hergestellt unter nahezu gleichen Bedingungen, erreicht das Amulet1 ca. 70%
eines 20 MHz getakten ARM6. Das eigentliche Ziel wurde leider nicht errreicht: man wollte zeigen, daß ein asynchroner Prozessor weniger Strom verbraucht, als sein synchroner Pendant.
Amulet1 verbrauchte nämlich genau so viel wie der ARM6. Man muß dabei aber bedenken, daß
ARM6 schon ein revidiertes Design hatte, wogegen Amulet1 in der ersten Fassung vorlag.
Seminar Moderne Prozessorarchitekturen
69
ARM & relatives
Amulet2 (1996)
Eine Weiterentwicklung des Amulet1, der weniger Strom verbraucht, vier 1kB Cache-Bloecke hat
und um kleinere Tweaks wie Branch Prediction ergänzt wurde. Die Leistung bewegt sich zwischen
ARM7 und ARM8
Amulet3
Dieser asynchroner Prozessor baut auf den ARM7 Core mit Thumb Extensions. Erwartet werden
über 100 MIPS.
Quellenverzeichnis
Homepage der Firma ARM
http://www.arm.com
The history of the ARM chip
http://www.ant.co.uk/~carol/armchap1.html
StrongARM bei Intel©
http://support.intel.com/support/processors/strong/
ARM chips list
http://www.geocities.com/~banksp/Archives/ARMChips.html
Amulet development
http://www.cs.man.ac.uk/amulet/index.html
70
Seminar Moderne Prozessorarchitekturen