G.1.1 Kontext & Orientierung G. Caches Caches sind kleine, aber schnelle Zwischen- bzw. Pufferspeicher. Assoziative Adressierung anstelle von direkter Adressierung. Für Code, Daten & virtuelle Adressen. Verschiedene Ersetzungsstratgien. Höhere Informatik Systemprogrammierung: - Betriebssystemkonzepte, Ein- & Ausgabe K J Caches G Architektur: - Modellrechner, Pipelining, Out-Of-Order Technik Digitaltechnik: - Logikbausteine, Schaltnetze & -werke, Zahlen E F H C I D Elektronik B Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-1
G.2. Assoziatives Adressierungsverfahren G.2.1 Inhaltsadressierter Speicher, CAM (Content-Adressed Memory) Adressierung herkömmlichen Speichers: die Adresse adr liefert Speicherwort[ adr ], genau ein Ergebnisdatum, ähnlich wie ein Array. Inhaltsadressierter Speicher (Assoziativspeicher): die einzelnen Speicherwörter haben keine Adresse, werden anhand eines Schlüssels ausgewählt, oder anhand des Inhaltes, 0, 1 oder n Ergebnisse.? Bereits 1943 durch Konrad Zuse vorgeschlagen, erst mit Halbleitertechnik in Hardware implementiert. Schneller Zugriff auf Dateninhalte, die teilweise bekannt, deren Speicherzelle jedoch unbekannt sind. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-2
G.2.2 Möglicher Hardware-Aufbau eines Assoziativspeichers Zeile besteht aus k Bit Schlüssel (Key) und n Bit Daten. binäre Codierung der Daten, des Schlüssels und einer Suchmaske. Suche wird durch Maske auf bestimmte Bits des Schlüssels eingeschränkt. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-3
G.2.3 Suchen und Abfragen im Assoziativspeicher Suchen: Eingabe des Suchschlüssels und einer Suchmaske z.b. in besonderen Steuerregistern, parallele oder teilparallele Suche in allen Zeilen nach passendem Muster, Trefferregister hat jeweils 1 Bit gesetzt für alle gefundenen Zeilen. Abfragen der Ergebnisse: gesteuert durch spezielle Steuerlogik, sequentiell anhand des Trefferregisters, jeweils ein Wert in speziellem Ausgaberegister. Ursprüngliche Hoffnungen: massiv parallele Verarbeitung, spezielle Datenbankmaschinen & -speicher, Nachbildung der Arbeitsweise des menschlichen Gehirns (Assoziativ), Heute weitgehend ersetzt durch Hash-Algorithmen und konventionelle Speicher. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-4
G.3. Puffer zum Hauptspeicher G.3.1 RAM-Caches Pufferspeicher bzw. Caches gibt es nicht nur zwischen RAM und CPU. Hier ist aber vorerst RAM-Cache gemeint. Geschwindigkeitsgefälle zwischen Hauptspeicher und Prozessorregistern: Hauptspeicherzugriffe gehen "off-chip" und sind vergleichsweise langsam, obschon CPU und RAM dieselbe Halbleitertechnologie verwenden, superskalare Prozessoren benötigen mehr Befehle pro Zeiteinheit, kürzere Zugriffszeit, höhere Transferrate erforderlich. Lösungsansatz: Speicherhierarchie mit gestaffelt schnellen Speichertechnologien. kein Multiplexverfahren für Zeilen- und Spaltenadresse, schneller Pufferspeicher "on-chip" (Cache). Typische Arbeitsparameter: L1 Cache: SRAM (8 64 kbyte, 1 3 Takte Zugriffszeit) L2 Cache: SRAM (256 16386 kbyte, 3 15 Takte) L3 Cache (selten): SRAM (4 64 MByte, 12 15 Takte) Hauptspeicher: DRAM (64 MByte 8 GByte, 25 40 Takte) Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-5
G.3.2 Analyse der Cache-Organisation mit RMMA RMMA Right Mark Memory Analyzer: hier verwendet für die Beurteilung der Cache-Organisation eines Notebooks, Open Source Programm zur Analyse von Leistungsparametern, Level 1 Daten, Level 1 Code, Level 2 Cache: Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-6
G.3.3 Speichern von Teilbereichen des Adressraumes Hierarchische Strukturen: Transport zwischen Festplatte und Hauptspeicher mithilfe des Dateisystems, Transport zwischen Hauptspeicher und RAM-Cache durch die Hardware, Evtl. getrennte Caches für Code und Daten, Evtl. mehrstufige Caches (L1, L2, L3). Dateisystem Hauptspeicher MCH Daten-Cache Code-Cache Execution Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-7
G.3.4 Cache-Aufbau Cache ist ein Assoziativspeicher für Speichereinträge des Hauptspeichers Schlüssel (Key, Tag) entspricht der gepufferten Hauptspeicheradresse, übrige Daten entsprechen dem Speicherinhalt. Aufbau im Detail: üblicherweise ganze Zeilen, Cache-Lines, Cache-Blocks, mit 8, 16, 32, 64 Bytes, d.h. 64, 128, 256, 512 Bits, "Valid"-Bit für gültige Cache-Zeilen. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-8
G.4. Assoziativität von Caches G.4.1 Direct Mapped Cache - Direkt abgebildet: Pro Hauptspeicheradresse ist immer nur eine Zeile möglich. Unterschiedliche Hauptspeicheradressen in einer Cachezeile möglich. Leistungseinbussen bei ungünstigen Zugriffmustern. Byteadressierung innerhalb einer Cachezeile. Tag-RAM speichert die restlichen Adressteile. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-9
G.4.2 Voll assoziative Cacheorganisation: Sehr viele Komparatorschaltkreise erforderlich. Pro Zeile und Zugriff ein Vergleich, Jede Adresse in jeder Zeile möglich. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-10
G.4.3 z.b. 4-Wege Assoziativspeicher: Eine Adresse kann sich in genau 4 Zeilen befinden. Pro Zugriff 4 simultane Vergleiche. Nur 4 Komparatoren. Typisch in 2006: Plattform Cache Cache Size Line Size # of Lines Mapping Pentium 4 L1 Daten 32 KByte 64 Byte 512 Zeilen 8 way set-assoziativ Pentium 4 L2 2-4 MByte 64 Byte 32-64 kzeilen 8-16 way set-assoziativ G5 L1 Daten 32 KByte 64 Byte 512 Zeilen 2 way set-assoziativ G5 L2 512 KByte 128 Byte 4096 Zeilen 8 way set-assoziativ Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-11
G.5. Verhalten von Caches G.5.1 Durchschreibe-Strategien Wird Cachezeile überschrieben, muß sie evtl. vorher zurückgeschr. werden. Ganze Cache-Zeilen (z.b. 64 Bytes) werden als Burst-Zugriffe transportiert. Write-Through (Leicht implementierbar): Cache-Inhalt sofort im Hauptspeicher nachführen, Erhebliche Verzögerungen über den Speicherbus. Write-Back: Modifikationen im Cache durchführen, Cache-Inhalt erst beim Ersetzen zurückschreiben, Ersatz einer Zeile dauert länger als Write-Through, Trotzdem weniger Speicherbuszyklen erforderlich, Konsistenzproblem zwischen Cache & Hauptspeicher. Write-Allocate: Neue Zeile anlegen, wenn bisher nicht im Cache, Evtl. modifizierte alte Zeile zurückschreiben, Rest der neuen Zeile später nachladen, Schwierige Implementierung. Hauptspeicher Cache CPU Cache t t Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-12
G.5.2 Lese- und Schreibzugriffe Read Hit - Übereinstimmung des Tagsfeldes: Daten werden sofort zur CPU-transportiert. Read Miss - kein passender Tagwert im Cache: die betroffene Cache-Zeile wird im Burst-Mode aus dem Hauptspeicher geladen, die gewünschten Datenbytes kommen zuerst an, weitere Bytes der Zeile später, bei Platzmangel muss eine passende Cache-Zeile ersetzt werden, ersetzen z.b. nach LRU-Verfahren (Least-Recently-Used) Write Hit - Übereinstimmung des Tagfeldes: Daten werden im Cache aktualisiert, entweder Write Back: als "Dirty" markieren, bei Verdrängung Zeile zurückschreiben, oder Write Through: unmittelbar in den Hauptspeicher zurückschreiben. Write Miss - kein passender Tagwert im Cache: entweder Fetch on Write: Cache-Eintrag aus Speicher holen und wie bei Write Hit () oder Write Around: Zugriff direkt im Hauptspeicher ohne Cache-Aktualisierung, oder Write Allocate: Neue Zeile vorsorglich bereitstellen, später komplettieren. Statt auf Hauptspeicher evtl. Zugriff auf Cache der nächsten Ebene. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-13
Faustregeln zur Cache-Dimensionierung: Ein 2-Wege teilassoziativer Cache hat typischerweise eine Miss Rate wie ein doppelt großer direkt abgebildeteter Cache. Ein 8-Wege teilassoziativer Cache hat für die meisten Anwendungen eine Hit Rate wie ein vollassoziativer Cache. Die Zugriffszeiten akkumulieren sich: mittlere Speicherzugriffszeit auf L1-Cache: taccess = tl1 + mrl1 tmem mit Miss Rate des L1-Cache mittlere Speicherzugriffszeit auf L2-Cache: taccess = tl1 + mrl1 ( tl2 + mrl2 tmem ) Drei Arten von Fehlzugriffen/"Cache Misses" (3 C s) mit mrl2 als L2- Miss Rate Erstbelegung (Compulsory): erste Einlagerung in Cache nach Programmstart Kapazität (Capacity): zu wenig Cachezeilen, Verdrängung ohne Adresskonflikt, Konflikte (Conflict): Verdrängung notwendiger Cache-Zeilen durch Konflikte Fehlzugriffe durch Erstbelegung im Allgemeinen vernachlässigbar, Vergrößerung des Caches reduziert Fehlzugriffe erheblich. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-14
G.5.3 Fehlzugriffsverhalten von Caches Die drei Fehlzugriffs-Ursachen in Abhängigkeit von Cachegröße und -typ: Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-15
G.5.4 Cache-Implementierung Internes Pipelining beim Cache-Zugriff Dauer eines Zugriffs ingesamt mehrere Takte, pro Takt wird aber ein Zugriff fertig. Speicheradressen im Cache entweder logisch/virtuell oder physikalisch: logische Adressierung oft im L1-Cache: Vorteil: keine Speicherabbildung (Memory Map) notwendig, Nachteil: Prozessumschaltung muss evtl. L1-Cache löschen, NB: Oft hat jeder Prozess seine eigene Memory Map. physikalische Adressierung in L2/L3-Caches. Vorteil: Die Prozessumschaltung verlangt kein Löschen des Caches, Nachteil: bei jedem Zugriff vorherige Speicherabbildung notwendig Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-16
G.6. Optimierungen im Programm Prefetch-Instruktionen holen benötigte Daten schon vorab in den Cache. Erhöhung der Lokalität: Wiederbenutzung der schon gefüllten Cachezeile, mehr Zugriffe auf weniger Adressen Je nach Compiler horizontal oder vertikal dominierte Arrayindizierung: entweder: horiz = 1024; vertik = 1024; long matrix[ horiz ][ vertik ]; for( ve = 0; ve < vertik; ve ++ ) for( ho = 0; ho < horiz; ho ++ ) matrix[ ho ][ ve ]= 1; oder: long matrix[ vertik ][ horiz ]; for( ve = 0; ve < vertik; ve ++ ) for( ho = 0; ho < horiz; ho ++ ) matrix[ ve ][ ho ]= 1; Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-17
G.6.1 Zugriffsmuster der Programmschleifen Beispielsweise: Angenommen matrix[1024][1024], Elemente à 4 Byte integer, Cachezeile 64 Bytes, Die Elemente matrix[ ho ][0..N-1] konkurrieren evtl. um dieselben Cachezeilen, die Cachezeilen werden evtl. wiederholt ein- und ausgelagert. ungünstig besser Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-18
G.6.2 Erhöhung der Lokalität mit Datenstrukturen Zusammenfassung von gemeinsam genutzten Dreiecks-Koordinaten: als Pascal-Record: point3d = record x, y, z: real end; triangle = record a, b, c: point3d end; und nicht als: koord: array[1..4096, 1..9] of real;... Empfehlung: keine 2er Potenzen als Dimension eines Feldes (niedrigere Assoziativität genügt), sequentiell durch den Speicher laufen (Cachekapazität schonen), Speicherlayout des Compilers untersuchen, Operanden auf Cachezeilen ausrichten. Technische Informatik 2, Wintersemester 2007/08, P. Schulthess & F. Hauck, VS Informatik, Ulm E-19