10. Rechnerarchitektur und Assemblerprogrammierung
Transcription
10. Rechnerarchitektur und Assemblerprogrammierung
10. Rechnerarchitektur und Assemblerprogrammierung Inhalt: Schichtenmodell Konvertierung zwischen Schichten Neue Funktionen in Hardware oder Software? Rechnerarchitektur Assemblersprache und Einbindung in C Peter Sobe Informatik I, Sommersem. 2012 1 Schichtenmodell Strukturierung des Rechensystems (Hardware und Software) in mehrere aufeinander liegende Schichten. Höhere Schichten benutzen darunter liegende über Schnittstellen Nur die Schnittstellen sind nach oben sichtbar, die Implementierung der zugehörigen Schicht bleibt verborgen (’information hiding’). Schichten können ausgetauscht werden (unter Beibehaltung ihrer Schnittstelle), ohne dass die darüber liegenden Schichten geändert werden müssen. Beispiel: Verschiedene Sprachschichten High-level language level (C): A = B + C; Peter Sobe Assembly language level (MC68020): MOVE.W B, D1 ADD.W C, D1 MOVE.W D1, A 2 Beispiel Machine language level (MC68020) (in bits): 1000: MOVE.W (0x2002).W,D1 0011 0010 0010 0000 0011 0000 1000 0010 1004: ADD.W (0x2004).W,D1 1101 0010 0010 0000 0111 0000 1000 0100 1008: MOVE.W D1,(0x2000).W 0011 0010 0001 0000 1100 0000 0001 0000 2000: A 2002: B 2004: C Peter Sobe 3 Beispiel Die C-Anweisung summe = a + b + c + d; ist für einen Assembler zu kompliziert und muss daher in mehrere einzelne Anweisungen aufgeteilt werden. Ein Prozessor kann immer nur zwei Zahlen addieren und das Ergebnis in einer der beiden verwendeten "Variablen" (Akkumulatorregister) speichern. Das Programm oben entspricht daher eher einem Assemblerprogramm: …das würde beim x86 so aussehen: summe = a; mov eax,[a] summe = summe + b; add eax,[b] summe = summe + c; add eax,[c] summe = summe + d; add eax,[d] Peter Sobe 4 Schichtenmodell Schnittstelle zu Level 2 entspricht Rechnerarchitektur Schicht Level 1 wird im Allgemeinen zur Hardware gerechnet, obwohl sie auch Mikroprogramme (Firmware) enthalten kann. Heute aber meist fest verdrahtete‚ Ablaufsteuerungen (Hardware). Einzelne Schichten sind intern selbst wieder in Schichten unterteilt. Systementwurf muss auch Wechselwirkung zwischen Schichten berücksichtigen. Peter Sobe 5 Konvertierung zwischen Schichten (1) - Compilierung von Programm Phigh auf Plow (Sprache Lhigh auf Llow) (Beispiel: C-Compiler) Source program Compiler Phigh (Lhigh) Object program Object program Plow (Llow) Hardware Hardware Execution Execution In Visual-Studio wird ein Programm durch “Erstellen“ übersetzt, d.h. es wird die Compilierung vorgenommen. Peter Sobe 6 Konvertierung zwischen Schichten (2) Interpretation von Lhigh auf Llow (Beispiele: Mikroprogramme, BasicInterpreter) Source program Lhigh Machine instructions Interpreter Phigh (Lhigh) Llow Hardware Execution Eine umgekehrte Konvertierung von einer tieferen auf eine höhere Schicht ist im Allgemeinen nicht mehr möglich, da Semantik verloren geht (’semantic gap’) Peter Sobe 7 Konvertierung zwischen Schichten (3) Level3: Hybride Schicht: Einige Befehle von Level3 (z. B. ADD) sind identisch mit Level 2. Dazu kommen Betriebssystemaufrufe (system calls) wie open(), write(),gettimeofday() etc., die von L3 interpretiert werden. Level2: Die Mikroarchitekur auf Level1 interpretiert die Maschinensprache (per Mikroprogramm oder festverdrahtet). Peter Sobe Level1: Die Mikro-Operationen bzw. Steuerungen des Leitwerks werden durch die digitalen Schaltkreise aus Schicht Level0 interpretiert (’Hardware-Interpreter’). 8 Konvertierung zwischen Schichten (4) Level 5 Problem-oriented language Translation (compiler) Level 4 Assembly language Translation (assembler) Level 3 Operating system machine Partial interpretation (operating system) Level 2 Instruction set architecture Interpretation (microprogram) or direct execution Level 1 Microarchitecture Interpretation (Hardware) Level 0 Digital logic Schichtenmodell kann auch als eine Hierarchie immer abstrakter virtueller Maschinen aufgefasst werden. Level5: Eine höhere Programmiersprache wird durch Compilation oder Interpretation auf die Schnittstelle zu Level4 konvertiert. Level5 stellt eine virtuelle Maschine dar. Level4 stellt eine virtuelle Maschine dar, die dem Benutzer als Schnittstelle Assemblerbefehle plus Systemaufrufe anbietet. Level4: Assembler auf Schicht Level4 übersetzt ein Assemblerprogramm in die erweiterte Maschinensprache (inkl. Systemaufrufe). Einfache Form von Compilation. Peter Sobe 9 Implementierung neuer Schichten Beispiel: ’Spracherweiterung’ durch Prozeduren in C. Hybride Schicht: Schnittstellen der alten Schicht bleiben weiter sichtbar. Modulkonzept (Funktionen und Bibliotheken) erlaubt Einführung einer echten Schicht (tiefere Schnittstellen werden in Implementierung verborgen). Peter Sobe 10 Funktionen in Hardware oder Software ? Peter Sobe 11 Funktionen in Hardware oder Software ? Hardware (Entwicklung eines Mikroprozessors): schnell, aber unflexibel, teurer Software: leicht änderbar, langsamer, billiger Beispiel: Implementierung eines neuen Datentyps mit zugehörigen Operationen als Speicherstruktur mit Funktionen (Softwarebibilothek) als Datentyp der Programmiersprache (Übersetzer) als Maschinendatentyp (Hardware) Peter Sobe 12 Funktionen in Hardware oder Software ? Vergleich: Realisierungsvarianten von Funktionen y[i ] w1 x[i ] w2 x[i 1] w3 x[i 2] w4 x[i 3] Software: Befehlsfolge auf universalProzessor (links) • Register x1 bis x3 werden nach x2 bis x4 umkopiert • Adressrechnung für x[i] • Register x1 (x[i]) wird aus Speicher geladen • Multiplikationen und Additionen • Adressrechnung für y[i] • Speichern von y[i] Zugehörige Strukturen und Datenpfad rechts dargestellt Peter Sobe 13 Funktionen in Hardware oder Software ? y [ i ] w1 x [ i ] w 2 x [ i 1] w 3 x [ i 2 ] w 4 x [ i 3 ] Hardware: Funktionsspezifische Realisierung z.B. durch FPGA Peter Sobe 14 Rechnerarchitektur Rechnerarchitektur (RA) nach Amdahl/Blaauw/Brooks, 1964 (Architekten des IBM System/360): “The term architecture is used here to describe the attributes of a system as seen by the programmer, i. e. the conceptual structure and functional behavior, as distinct from the organization and data flow and control, the logical design and physical implementation.” Architektur: Äußeres funktionelles Erscheinungsbild des Rechners, wie es der unmittelbare Benutzer (Maschinenprogrammierer) sieht. Implementierung: Logische Struktur (Organisation), mehrere Implementierungen der gleichen Architektur möglich. Realisierung: Konkrete Version einer Implementierung in Peter Sobe Hardware und evtl. Firmware (mehrere Realisierungen einer Implementierung möglich). 15 Rechnerarchitektur Als Rechnerarchitektur verstanden: Äußeres funktionelles Erscheinungsbild • Anzahl der Prozessorregister, Registerbreite (32 oder 64 Bit) und Einschränkungen für deren Benutzung • Liste der Befehle eines Prozessors • Adressierungsarten, d.h. Art wie Daten von Befehlen adressiert werden können Peter Sobe 16 Rechnerarchitektur Als Rechnerorganisation verstanden, z.T. auch als Rechnerarchitektur: Implementierung Art und Anordnung von Hardwarebausteinen, die Funktionen der äußeren Sicht realisieren Beispiel: Implementierung eines einfachen Prozessors: Peter Sobe 17 Rechnerarchitektur Nicht zu Rechnerarchitektur gezählt: Konkrete Version einer Implementierung Taktfrequenz eines Prozessors Strukturbreite der Halbleiterstrukturen (Beispiel: CellBE PS3 mit 65nm und CellBE in PS3Slim mit 45nm) Cache-Größe Peter Sobe 18 Beispiel für Rechnerarchitektur (1) Feldrechnerarchitektur zur datenparallelen Befehlsverarbeitung (z.B. SIMD Befehlssatzerweiterungen, oder GPUs) Leitwerk u. skalare Befehle Programmspeicher Kontrolleinheit ADD MUL . . . ... PE1 PE2 p Rechenwerke (PEs) PEp-1 PEp Privatspeicher Verbindungsnetzwerk Peter Sobe 19 Beispiel für Rechnerarchitektur (2) Prozessorpipeline zur schnellen Befehlsverarbeitung S4 ALU Befehlspipeline ALU S1 S2 S3 Instruction fetch unit Instruction decode unit Oberand fetch unit Phasenpipeline S6 LOAD Write back unit STORE Floating point Peter Sobe 20 Beschleunigung des Speicherzugriffs (1) Von-Neumann-Architektur (gemeinsamer Befehls- und Datenspeicher) Instruction and Data memory Universell, aber „Flaschenhals“ Harvard-Architektur (getrennter Befehls- und Datenspeicher) Instruction memory CPU Data memory VT: Befehle und Daten können gleichzeitig geholt werden. NT: Speicher weniger flexibel nutzbar Speicherverschränkung (Memory Interleaving) Einteilung des Speichers in mehrere Module, aus denen gleichzeitig gelesen bzw. geschrieben werden kann. Verschränkung der unteren Adressbits erlaubt gleichzeitigen Zugriff auf konsekutive Elemente in Modulen 0, 1, ... 2m - 1. Peter Sobe 21 Beschleunigung des Speicherzugriffs (2) Blockschaltbild eines verschränkten Speichers: n-m m Address in module Module Decoder 0 Module 2 m -1 Module 1 2m-1 Module 0 Interleaving-Faktor: 2m Peter Sobe 22 Beschleunigung des Speicherzugriffs (3) Data buffer Module 0 Multiplexer Module 2m - 1 Single-word bus Data buffer low order Bits nm- m high-order bits n - m high-order bits Zeitdiagramm 2m - 1 . . . . . . 0 Access 1 Access 2 Access 1 Access 2 M0 OUT M1 ... Typische InterleavingFaktoren: 4 – 64 Interleaving oft kombiniert mit dem Blockzugriff von Cache-Speichern. M2 1 M0 m Transfer data of access 1 0 t Bei entsprechend schnellem Bus und Zugriff auf konsekutive Speicherzellen (z. B. Vektoren) erscheint der Speicher um den Interleaving-Faktor schneller. 2t Time Peter Sobe 23 Cache-Speicher (1) Lokalitätsprinzip: Lokalität ist der Umstand, dass die innerhalb eines kurzen Zeitintervalls eintretenden Speicherreferenzen die Tendenz aufweisen, sich nur auf einen kleinen Teil des gesamten Speicherraums zu beziehen. (10/90) Regel: zu 90% der Programmlaufzeit wird auf 10% des Speicherbereichs eines Prozesses zugegriffen Cache: ein schneller Zwischenspeicher zwischen CPU und Hauptspeicher; um ein Vielfaches schneller als Hauptspeicher durch engere Anbindung an Verarbeitungseinheiten und durch bessere Technologie wesentlich kleiner als Hauptspeicher Peter Sobe 24 Cache-Speicher (1) Prinzip (Cache für physikalische Adressen): Platzierung des Caches im Speicherpfad Treffer (Cache Hit): Auslesen bzw. Einschreiben der Daten kein Treffer (Miss): Nachladen aus Hauptspeicher Peter Sobe 25 Cache-Speicher (2) Meist Einteilung in Blöcke (Linien) à mehreren Worten (Cache Lines), d. h. Aufteilung der Adressen in Linienadresse (Tag) und Adresse innerhalb der Linie. Adresse:: Tag Bereich für Platzierung bzgl. Cache-Teilbereiche Adresse innerh. Linie MSB LSB Reale Linienadresse (Requested Tag) wird mittels assoziativem Speicher Requested tag mit Tags der Linien im Cache Tag 0 verglichen. Tag 1 Line 0 Line 1 Tag memory Data memory Tag N Line N Miss Peter Sobe Data 26 Cache-Speicher (3) Aufgrund der Lokalität (räumlich und zeitlich) von Programmen sehr hohe Trefferraten (95 - 98 %). Oft Kombination mit verschränktem Speicher (stets Transfer ganzer Blöcke). Heute meist ausgefeilte Cache-Hierarchien, zum Beispiel: • Level 1-Cache (on chip): (64...128 KByte) • Level 2-Cache (extern o. on chip): (512 KByte...8 MByte) Level 1-Caches oft in Daten- und Befehlscaches getrennt (Split-Caches, Harvard-Architektur). Teilweise auch Level 3-Caches. Caches konnten im physikalischen Adressraum (hinter der MMU) oder im logischen Adressraum (vor der MMU) angeordnet sein. Peter Sobe 27 Ablauf eines Speicherzugriffs Real address Search cache tag memory Cache hit NO YES Update line status Get line from cache Send real address to main memory Select cache entry for replacement Receive line Select requested bytes Store line in cache Output to CPU Peter Sobe 28 Platzierungsstrategien Wo im Cache ist welcher Teil der Hauptspeicherdaten (Cache Linie) unterzubringen? Ort ist nicht fest vorgegeben, da die Hauptspeicherdaten zusammen mit ihrer Adresse im Cache abgelegt werden. → Voll-assoziativer Cache Dennoch ist Ortsvorgabe/ bzw. Einschränkung der möglichen Orte sinnvoll: → Direkt abgebildeter Cache → Mengenassoziativer Cache Peter Sobe 29 Voll-assoziativer Cache (fully associative) Platzierungsstrategien (Placement Policies) (Beispiel: 1 MByte Hauptspeicher, 16 KByte Cache) Cache Tag Main memory Data Line 0 Line 0 Line 1 Line 1 . . . . . . Line 1023 Da Reihenfolge der Linien im Cache beliebig, ist ein Assoziativspeicher für die Tags erforderlich. Line 12345 . . . Line 65535 Peter Sobe Jede Cache-Linie kann jede beliebige Linie aus dem Hauptspeicher aufnehmen. Hohe Trefferrate, aber hoher Aufwand: • entweder zusätzlicher Zeitbedarf durch assoziative Suche • oder hohe Anzahl von Komparatoren 30 Direkt abgebildeter Cache (direct mapped) Cache Tag Main memory Data Line 0 Line 1 Line 0 Line 1 A mod M = i ; (Restklassen-Einteilung) Line 2 . . . . . . M: Anzahl Linien pro Cache Line 1023 Line 1024 Line 1025 Line 1022 Line 1023 Jeder Cache-Eintrag i kann nur Linien mit Adressen A aufnehmen, für die gilt . . . Line 16383 Line 16384 Line 16385 . . . Line 65535 Kein assoziativer Speicher erforderlich: Mittels Adressteil Line wird der zugehörige Eintrag im Cache direkt ausgewählt. Stimmt Tag überein, so liegt ein Treffer (Hit) vor. Vorteile: • Leicht implementierbar • Aufwandsarmer Zugriff, da keine assoziative Suche erforderlich ist Nachteil: Geringe Trefferraten wenn Speicherzellen aus gleicher Restklasse benötigt werden. Peter Sobe 31 Mengen-assoziativer Cache (set-associative) Cache Data Set 0 Tag Line 0 Line 0 Line 1 . . . Line 2 Line 3 Line 4 Set 255 Main memory Line 255 Line 256 . . . . . . Line 1022 Line 16383 Line 1022 Line 16384 Line 1022 . . . Line 1023 Line 65535 M: Anzahl Linien pro Cache Cache wird in S Mengen eingeteilt. Wie bei direkter Abbildung Zuordnung der Adressen A mit A mod S = i zu Menge i. Da L = M/S Linien pro Menge vorhanden, assoziative Suche mittels Tag, ob gewünschte Linie im Cache liegt. Spezialfälle: S = 1: voll-assoziativer Cache L = 1: direkt abgebildeter Cache Guter Kompromiss, in der Praxis häufig eingesetzt. A: Adresse Peter Sobe 32 Cache(Replacement Ersetzungsstrategien Ersetzungsstrategien Policies) Bei (voll-/mengen-)assoziativen Caches muss entschieden werden, welche Cache-Linie beim Einlagern einer neuen Linie ausgelagert wird: Häufigste Strategien: - Random: Auszulagernde Linie wird zufällig ausgewählt. - LRU (Least Recently Used): Diejenige Linie wird ausgelagert, die am längsten nicht referenziert worden ist. LRU ist schwieriger zu implementieren (zusätzlicher Zähler je Cache Linie). In einer Studie wurde festgestellt. Dass bei einem 2-fach assoziativen Cache die Hit Rate nur 1.1 mal höher ist als für Random. Für große Caches und damit kleine Miss Rate ist der Unterschied nur noch gering. Peter Sobe 33 Cache Rückspeicherstrategien Behandlung von Schreibzugriffen: Write-Through: Rückspeichern bei jedem Schreiben auf den Cache (Konsistenz bleibt erhalten!) Write-Back (Copy Back):Rückspeichern nur bei Ersetzen einer Cache-Linie (zeitweise Inkonsistenz zwischen Cache und Hauptspeicher) Vorteile von Write-Back: - Prozessor kann mit Cache-Rate schreiben (bei Write Hit), nicht nur mit Hauptspeicher-Rate. - Mehrfaches Schreiben in die gleiche Linie erfordert nur einmal das Rückschreiben in den Hauptspeicher. - Beim Rückspeichern der Linie kann von Techniken zur Erhöhung der Speicherbandbreite wie z.B. Speicherverschränkung gemacht werden. Peter Sobe 34 Cache Rückspeicherstrategien Vorteile von Write-Through: - Write-Through ist einfacher zu implementieren. Zur Erhöhung der Geschwindigkeit kann ein Write Buffer eingesetzt werden, d. h. das langsame Speichern in den Hauptspeicher wird von einem Puffer aus abgewickelt, während der Prozessor nach einem Write Hit bereits weiterläuft. - Konsistenz mit Hauptspeicher ist vorteilhaft, wenn auch andere Einheiten (z. B. I/O-Einheiten, andere Prozessoren) auf den Hauptspeicher zugreifen. Multiprozessoren und Cache-Konsistenz/Kohärenz Peter Sobe 35