Speicher - CCS Labs
Transcription
Speicher - CCS Labs
Computer and Communication Systems (Lehrstuhl für Technische Informatik) Speicher Historische Entwicklung, Begriffe, SRAM, DRAM, Nichtflüchtige Speicher, Caches [TI] Winter 2013/2014 Speicher 1 Lernziele Begriffe: SRAM, DRAM, SDRAM, DDR-SDRAM, PROM, EPROM, ... Aufbau, Organisation und Arbeitsweise von statischem und dynamischem Speicher Kennenlernen moderner DRAM-Varianten und ihrer wichtigsten Charakteristika Vorteile und Eigenschaften einer Cache-Hierarchie Aufbau, Arbeitsweise und Unterschiede von vollassoziativem Cache, n-Wege teilassoziativem Cache und direkt abbildendem Cache Optimierung von Programmen bzgl. Cache [TI] Winter 2013/2014 Speicher 2 HISTORISCHE ENTWICKLUNG [TI] Winter 2013/2014 Speicher 3 Historische Entwicklung (1) Im Laufe der Geschichte wurden verschiedene Technologien eingesetzt, um Informationen zu speichern: Modifikation von Strukturen: Lochkarte, Schallplatte Rückkopplung: Flip-Flops, SRAM Elektrische Ladungen: Kondensator, DRAM Magnetismus: Magnetkernspeicher, Magnetband, Diskette, Festplatte, MRAM Optik: Bar-Codes, CD-ROM, DVD Kriterien zum Vergleich von Speichertechnologien: Geschwindigkeit, Kapazität, Dichte, Energiebedarf, Robustheit, Kosten [TI] Winter 2013/2014 Speicher 4 Historische Entwicklung (2) Entwicklung der Komplexität von CPU und Speicher: Mooresches Gesetz : Verdopplung der Transistoranzahl alle 2 Jahre [TI] Winter 2013/2014 Speicher 5 Historische Entwicklung (3) Entwicklung der relativen Leistung von CPU und Speicher: [TI] Winter 2013/2014 Speicher 6 Historische Entwicklung (4) In heutigen Rechnersystemen findet man eine mehrstufige Speicherhierarchie: [TI] Winter 2013/2014 Speicher 7 BEGRIFFE [TI] Winter 2013/2014 Speicher 8 Begriffe (1) RAM (Random Access Memory) Speicher mit wahlfreiem Zugriff auf beliebige Adressen SRAM (Static RAM) Statischer RAM-Speicher DRAM (Dynamic Random Access Memory) Dynamischer RAM-Speicher SDRAM (Synchronous DRAM) Synchroner dynamischer RAM-Speicher DDR-SDRAM (Double Data Rate SDRAM) Synchroner dynamischer RAM-Speicher mit doppelter Datenrate [TI] Winter 2013/2014 Speicher 9 Begriffe (2) ROM (Read-Only Memory) PROM (Programmable ROM) Einmalig programmierbarer Speicher, z.B. durch MaskenProgrammierung bei der Chip-Herstellung. EPROM (Erasable PROM) Mit UV-Licht löschbares und elektrisch (durch zusätzliche Steuerleitungen und Überspannungen) programmierbares PROM. EEPROM (Electrically Erasable PROM) Elektronisch löschbares und danach wieder programmierbares PROM. Flash (Eigenname), ähnliche Eigenschaften wie EEPROM [TI] Winter 2013/2014 Speicher 10 Begriffe (3) Speicher werden eingeteilt in Flüchtige Speicher: SRAM, DRAM, SDRAM, ... Informationen gehen nach Ausschalten der Versorgungsspannung verloren! Nichtflüchtige Speicher: PROM, EPROM, EEPROM, ... Informationen bleiben auch ohne Versorgungsspannung über längere Zeit (typischerweise einige Jahre) erhalten! Die Kapazität von Speicherbausteinen wird (noch immer) in KByte (bzw. KBit), MByte (bzw. MBit) oder GByte (bzw. GBit) angegeben: [TI] Winter 2013/2014 Speicher 11 Begriffe (4) SI-Präfixe Verwendet in der Datenübertragung oder auch (!) bei Speichermedien Exp. Langform Präfix Exp. Langform Präfix 10-3 0,001 Milli 103 1.000 Kilo 10-6 0,000001 Mikro 106 1.000.000 10-9 0,000000001 Nano 109 1.000.000.000 Giga 10-12 0,000000000001 Pico 1012 1.000.000.000.000 Tera 10-15 0,000000000000001 Femto 1015 1.000.000.000.000.000 Peta 10-18 0,000000000000000001 Atto 1018 1.000.000.000.000.000.000 10-21 0,000000000000000000001 Zepto 1021 1.000.000.000.000.000.000.000 Zetta 10-24 0,000000000000000000000001 Yocto 1024 1.000.000.000.000.000.000.000.000 Yotta Mega Exa Besondere, an die SI-Präfixe angelehnte, explizite Binärpräfixe Sollten in Zukunft verwendet werden. Beispiele: Kibibyte = 210 Bytes; Mebibyte = 220 Bytes; Gibibyte = 230 Bytes usw. [TI] Winter 2013/2014 Speicher 12 Begriffe (5) Als Zugriffszeit tac bezeichnet man die Zeitspanne vom Anlegen einer Adresse bis zur Gültigkeit der ausgelesenen Daten. Als Zykluszeit tcycle bezeichnet man die Zeitspanne vom Anlegen einer Adresse bis zum möglichen Anlegen der nächsten Adresse. Mögliches Zeitdiagramm eines Lesezyklus: Zykluszeit ist oft (z.B. bei DRAMs) größer als die Zugriffszeit! [TI] Winter 2013/2014 Speicher 13 Begriffe (6) Zwei Arten der Realisierung flüchtiger Speicher: Statischer Speicher Speicherung durch 4 bis 6 Transistoren je Bit. Kein Refresh notwendig. Bausteine: SRAM, Dual-ported SRAM. Zugriffs- und Zykluszeit: ca. 10 ns als externe Bausteine (schneller, wenn sie direkt in den Prozessor integriert werden, z.B. als Cache). Dynamischer Speicher Speicherung durch einen Transistor und einen Kondensator je Bit. Refresh notwendig, da der Kondensator im Verlauf der Zeit (Größenordnung: einige ms) seine Ladung verliert. Sehr hohe Datendichte (Kapazität je mm 2 Chipfläche) möglich. Bausteine: DRAM, SDRAM, DDR-SDRAM, RDRAM Zugriffszeit für erstes Datenwort: ca. 40 ns, Zykluszeit: ca. 60 ns [TI] Winter 2013/2014 Speicher 14 SRAM [TI] Winter 2013/2014 Speicher 15 SRAM (1) Idee: Auf einem Flip-Flop basierender Speicherbaustein, z.B. ein DFlip-Flop für ein Bit: Bei Write = 1 wird Information von Din gespeichert und steht am Ausgang Dout zur Verfügung. Information bleibt gespeichert, auch wenn sich Din bei Write = 0 wieder ändern sollte (solange Versorgungsspannung anliegt). [TI] Winter 2013/2014 Speicher 16 SRAM (2) SRAM-Bausteine basieren jedoch nicht auf vollständigen D-Flip-Flops, sondern auf einfacheren SRAM-Zellen. Vereinfachter Aufbau einer typischen SRAM-Zelle mit FETTransistoren: Zwei Inverter repräsentieren bistabile Kippstufe. Bei Select = 1 leiten FETs und verbinden die bistabile Kippstufe mit den Leitungen Bit und Bit, bei Select = 0 sperren FETs. [TI] Winter 2013/2014 Speicher 17 SRAM (3) Beschreiben einer SRAM-Zelle: Bit-Leitungen werden mit Bit = 1 und Bit = 0 (zum Speichern einer „1“), bzw. mit Bit = 0 und Bit = 1 (zum Speichern einer „0“) geladen. Auswahl-Leitung wird auf Select = 1 gesetzt. Kippstufe schwingt gegebenenfalls in den anderen stabilen Zustand. Rücksetzen der Pegel auf Select-Leitung und danach auf Bit-Leitungen. Zustand bleibt erhalten, solange Versorgungsspannung anliegt. [TI] Winter 2013/2014 Speicher 18 SRAM (4) Auslesen einer SRAM-Zelle: Bit-Leitungen werden mit Bit = 1 und Bit = 1 geladen („Precharging“). Auf Auswahl-Leitung wird ein kurzer Impuls gegeben. Resultierender geringer Spannungsabfall auf Bit oder Bit wird durch Verstärkerschaltung erkannt, die eine entsprechende Ausgabe generiert. [TI] Winter 2013/2014 Speicher 19 SRAM (5) Organisation eines SRAM-Bausteins: m × n Speichermatrix (m Speicherzeilen mit je n SRAM-Zellen) Auswahl einer der m = 2k Zeilen über k Adressleitungen sowie einem k-zu-m Adress-Dekoder. Alle Zellen einer Spalte nutzen die gleichen Bit-Leitungen. Steuerlogik eines SRAMs mit einigen weiteren Steuerleitungen: CS (Chip Select) zur Auswahl und Aktivierung eines SRAMBausteins. WE (Write Enable) zum Speichern eines Wertes. OE (Output Enable) zum Lesen und Freischalten der Ausgänge. [TI] Winter 2013/2014 Speicher 20 SRAM (6) Vereinfachte Architektur eines m × 4 SRAM-Bausteins: [TI] Winter 2013/2014 Speicher 21 SRAM (7) SRAM-Bausteine gibt es in verschiedenen Organisationsformen, und Kapazitäten, z.B.: 128k × 4 512k × 8 1M × 8 2M × 16 128k Worte à 4 Bit (17 Adress-, 4 Datenleitungen, 64 KByte) 512k Worte à 8 Bit (19 Adress-, 8 Datenleitungen, 512 KByte) 1M Worte à 8 Bit (20 Adress-, 8 Datenleitungen, 1 MByte) 2M Worte à 16 Bit (21 Adress-, 16 Datenleitungen, 4 MByte) Auch synchrone (d.h. getaktete) SRAMs verfügbar. Arbeiten synchron mit Prozessortakt. Sehr kurze Zugriffszeiten (weniger als 5 ns). Viele für DRAMs eingeführte Verbesserungen (Burst-Modus, Double Data Rate, ..) mittlerweile auch bei SRAMs erhältlich. Werden im nächsten Abschnitt besprochen. [TI] Winter 2013/2014 Speicher 22 SRAM (8) Vor-/Nachteile von SRAMs + + - Schneller Zugriff (weniger als 5 ns möglich) Unempfindlich gegen elektromagnetische Strahlung Geringe Datendichte auf dem Chip (hoher Flächenbedarf: ca. 4fach im Vergleich zu DRAM) Energiebedarf hoch (bei vielen Zugriffen), niedrig (im Standby) Hoher Preis Typischer Einsatz von SRAMs Mobile Geräte Netzwerkkomponenten (z.B. Switches, Router) Weltraumgeräte Höchstgeschwindigkeitsrechner (z.B. Vektorrechner) L1, L2 und L3 Cachespeicher (mit synchronen SRAMs) [TI] Winter 2013/2014 Speicher 23 DRAM [TI] Winter 2013/2014 Speicher 24 DRAM (1) Benötigt zur Speicherung eines Bits nur einen Transistor und einen Kondensator. Patent im Jahre 1968, verfügbar seit 1970. Aufbau einer DRAM-Zelle: Extrem hohe Speicherkapazität durch geringen Flächenbedarf einer DRAM-Zelle. [TI] Winter 2013/2014 Speicher 25 DRAM (2) Schreiben einer DRAM-Zelle: Bit-Leitung wird auf Bit = 1 oder Bit = 0 gesetzt. Auswahlleitung Select = 1 setzen. Transistor leitet und Kondensator wird aufgeladen oder entladen. Auslesen einer DRAM-Zelle: Auswahlleitung Select = 1 setzen. Transistor leitet Falls Kondensator aufgeladen war, erzeugt die Ladung einen kurzen Impuls auf der Bit-Leitung. Impuls kann durch Leseverstärker erkannt werden, der eine logische 1 am Ausgang erzeugt. Der Kondensator wird jedoch beim Auslesen entladen. Daher muss die DRAM-Zelle nach jedem Lesen wieder mit dem zuvor gelesenen Wert beschrieben werden! [TI] Winter 2013/2014 Speicher 26 DRAM (3) Organisation eines m2 × 1 DRAMs (vereinfacht): Multiplex-Interface: Jede 2k-Bit Adresse (mit m = 2k) besteht aus Zeilen- und Spaltenadressteil. Um E/A-Pins einzusparen, werden beide Teile sequentiell über k Adressleitungen übertragen (zusätzliche Steuersignale CAS, RAS nötig). [TI] Winter 2013/2014 Speicher 27 DRAM (4) Lesen eines Wertes aus einem 64k × 1 DRAM-Baustein: Zuerst werden die Adressbits 15 bis 8 an A7 bis A0 angelegt. Das Signal RAS (Row Address Strobe) wird aktiviert und alle 256 Bits der Speicherzeile werden von den Leseverstärkern ausgelesen. Dann werden die Adressbits 7 bis 0 an A7 bis A0 angelegt. Das Signal CAS (Column Address Strobe) wird aktiviert, wodurch aus den Ausgängen der 256 Leseverstärker das gewünschte Bit ausgewählt und am Pin D ausgegeben wird. Ein weiteres Bit aus der gleichen Zeile (Page) kann ausgelesen werden, indem CAS deaktiviert, eine andere Spaltenadresse angelegt wird und CAS wieder aktiviert wird (Fast Page Mode, FPM). Nach Deaktivierung von RAS und CAS wird die Zeile zurückgeschrieben. [TI] Winter 2013/2014 Speicher 28 DRAM (5) Schreiben eines Wertes in einen 64k × 1 DRAM-Baustein: Zuerst werden die Adressbits 15 bis 8 an A7 bis A0 angelegt. Das Signal RAS (Row Address Strobe) wird aktiviert und alle 256 Bits der Speicherzeile werden von den Leseverstärkern ausgelesen. Die Adressbits 7 bis 0 an A7 bis A0 werden angelegt. Die Signal CAS (Column Address Strobe) und WE werden aktiviert und das zu schreibende Bit wird an D angelegt; im Leseverstärker wird das ausgewählte Bit durch das Signal an D überschrieben. In der ausgewählten Zeile können gegebenenfalls weitere Bits geschrieben werden (Fast Page Mode, siehe vorherige Folie). Nach Deaktivierung von RAS und CAS wird modifizierte Zeile in die Speichermatrix zurückgeschrieben. [TI] Winter 2013/2014 Speicher 29 DRAM (6) Kapazität C des Kondensators einer DRAM-Zelle ist sehr gering. Ladungsverlust nicht nur bei jedem Lesen, sondern auch langsam mit der Zeit aufgrund eines geringen Leckstroms im Transistor (Größenordung: einige ms), durch elektromagnetische Strahlung. Periodischer Refresh erforderlich, um Zelleninhalt über längere Zeit zu speichern: Jede Zeile muss regelmäßig in Abständen von typischerweise 32 bis 64 ms gelesen werden, wodurch ihr Inhalt erneut geschrieben wird. Dies wird implementiert durch einen in das DRAM integrierten Zähler, dessen Zählerstand die nächste aufzufrischende Zeilenadresse angibt. Der Memory-Controller erzeugt periodisch (z.B. alle 15.6 µs, → BIOS) eine bestimmte Kombination der Steuersignale (z.B. CAS-before-RAS), durch die ein Blindlesezyklus ausgelöst und der Zähler inkrementiert wird. [TI] Winter 2013/2014 Speicher 30 DRAM (7) Zugriff auf eine beliebige Speicheradresse benötigt ca. 60 ns. Da Auslesen der sehr geringen Ladung über Leitungen mit hohem Widerstand und das Verstärken eine gewisse Zeit benötigen. Folgezugriffe mit anderen Spaltenadressen in der gleichen Speicherzeile benötigen jeweils ca. 30 ns. DRAM-Bausteine sind wie SRAMs in unterschiedlichen Organisationen verfügbar. z.B. kann ein 16 MBit Speicher als 1M × 16, 2M × 8, 4M × 4 oder auch als 16M × 1 organisiert sein. Bei einer Kapazität c und einer Wortbreite von n Bit benötigt man n Speichermatrizen aus m × m DRAM-Zellen mit m = Erfüllen einzelne DRAM-Bausteine nicht die Anforderungen bezüglich Wortbreite oder Adressraum, so können mehrere DRAM-Bausteine geeignet zusammengeschaltet werden. [TI] Winter 2013/2014 Speicher 𝑐𝑐 𝑛𝑛 31 DRAM (8) Möglichkeiten der Zusammenschaltung von DRAM-Bausteinen: 1) Vergrößern der Wortbreite: Identische Adress- und Steuerleitungen zu allen Speicherbausteinen, Datenleitungen werden aufgeteilt. Beispiel: Speicher mit 256k Worten à 16 Bit Auch die Speicherbandbreite (Anzahl übertragbarer Bytes je Sekunde zwischen CPU und Speicher) wird hierdurch erhöht! [TI] Winter 2013/2014 Speicher 32 DRAM (9) 2) Vergrößern des Adressraums: Datenleitungen und untere Adressleitungen an allen Bausteinen identisch; obere Adressleitungen dienen dem Multiplexen der Steuersignale. Beispiel: Speicher mit 64M Worten à 8 Bit Möglichkeiten 1) und 2) werden oft kombiniert ! [TI] Winter 2013/2014 Speicher 33 DRAM (10) Vor-/Nachteile von DRAM-Bausteinen - + + Periodischer Refresh erforderlich (→ kostet Energie, auch bei Nichtbenutzung des Speichers!) Hohe Zugriffszeit von ca. 60 ns für das erste Datenwort, dank FPM kürzere Zugriffszeit von ca. 30 ns für folgende Datenworte der gleichen Zeile. Ca. 4-fach höhere Datendichte als bei SRAM. Geringer Preis je Mbit. Typischer Einsatz von DRAMs Hauptspeicher in PCs und Workstations Pufferspeicher, z.B. in Druckern „Einfache“ DRAMs sind heute nicht mehr erhältlich, sondern nur noch die schnelleren DRAM-Varianten ... [TI] Winter 2013/2014 Speicher 34 DRAM-Varianten (1) Möglichkeiten der Beschleunigung des Zugriffs auf Daten aus DRAM-Bausteinen: Überlappung: Auslesen eines Datenwortes erfolgt simultan zum Anlegen der Adresse für den nächsten Zugriff. Burst-Modus: Eine festgelegte Anzahl von Daten wird aus aufeinander folgenden Spaltenadressen gelesen oder geschrieben, wobei nur die Startadresse bereitgestellt wird. Pipelining: Durch eine mit dem Systemtakt synchrone Arbeitsweise kann je Taktzyklus ein neuer Spaltenzugriff initialisiert bzw. abgeschlossen werden. [TI] Winter 2013/2014 Speicher 35 DRAM-Varianten (2) SDRAM (Synchronous DRAM, 1999) Getakteter Speicherbus (typisch 100, 133 oder 166 MHz) Alle Signale werden nur bei steigender Taktflanke als gültig betrachtet. Kombination von Signalen auf CS, RAS, CAS, WE definiert Buszyklus und wird als Steuerbefehl bezeichnet. Arbeitet mit Pipelining: In jedem Taktzyklus kann eine neue Spaltenadresse angelegt werden, wobei die zugehörigen Daten eine bestimmte Anzahl von Takten später am Ausgang bereitstehen. Kann im Burst Modus arbeiten: Lesen oder Schreiben einer bestimmten, einstellbaren Anzahl von Datenworten von benachbarten Spaltenadressen (meist 2, 4 oder 8 Datenworte). Zugriffszeit im Burst-Modus: ca. 6 bis 10 ns Entspricht einer maximalen Speicherbandbreite von 400 bis 666 MByte/s bei Einsatz eines 32-Bit Speicherbusses, bzw. von 800 bis 1,33 GByte/s bei einem 64-Bit Speicherbus. [TI] Winter 2013/2014 Speicher 36 DRAM-Varianten (3) Nomenklatur von SDRAMs: PC-xxx CL a-b-c xxx gibt die maximale Taktfrequenz des Speicherbusses an. a gibt die CAS-Latenzzeit (CAS Latency) an, d.h. die Zeit tCL (in Taktzyklen) von der fallenden Flanke des CAS-Signals bis zur Ausgabe der Daten. b gibt die RAS-zu-CAS-Verzögerung (RAS-to-CAS Delay) an, d.h. die minimale Zeit tRCD (in Taktzyklen) zwischen Anlegen von RAS und CAS. c gibt die RAS-Vorladezeit (RAS Precharge Time) an, d.h. die Zeit tRP (in Taktzyklen) zum Beenden des letzten Zugriffszyklus und Vorbereiten des nächsten Zeilenzugriffes (Precharging). Oft wird nur die CAS-Latenzzeit tCL angegeben (z.B. als CL2 oder CL3). [TI] Winter 2013/2014 Speicher 37 DRAM-Varianten (4) Beispiel: Burst-Lesezyklus bei PC-133 CL 2-2-2 SDRAM: mit den Steuerbefehlen: Activate (CS = 0, RAS = 0, CAS = 1, WE = 1) Read (CS = 0, RAS = 1, CAS = 0, WE = 1) Precharge (CS = 0, RAS = 0, CAS = 1, WE = 0) [TI] Winter 2013/2014 Speicher 38 DRAM-Varianten (5) DDR-SDRAM (Double Data Rate SDRAM, 2001) − Bei jedem Zugriff auf eine Speichermatrix werden zwei benachbarte Bits ausgelesen (2-Bit Prefetch). Pro Takt wird bei der steigenden und bei der fallenden Taktflanke übertragen. Verdopplung der Datenrate im Burst-Modus. Nomenklatur bei DDR-SDRAMs: DDR-xxx xxx bezeichnet die doppelte Taktfrequenz. Zusätzliche Angaben in der Form CL a-b-c bedeuten a = tCL, b = tRCD und c = tRP (vgl. SDRAMs). [TI] Winter 2013/2014 Speicher 39 DRAM-Varianten (6) Beispiel: Burst-Lesezyklus bei DDR -266 CL 2-3-3 Baustein, Burstlänge = 4, Zugriff auf zwei Spalten a und b in einer Zeile. [TI] Winter 2013/2014 Speicher 40 DRAM-Varianten (7) DDR2-SDRAM (2004) Weiterentwicklung des DDR-SDRAM Standards. Übertragen wie DDR-SDRAMs Daten sowohl bei der steigenden als auch bei der fallenden Taktflanke. Geringere Versorgungsspannung: 1,8 Volt anstatt 2,5 Volt Geringe Stromaufnahme, geringere Wärmeentwicklung Bei jedem Zugriff auf die Speichermatrix werden 4 benachbarte Datenbits ausgelesen bzw. geschrieben (4-Bit Prefetch). Im Vergleich zu DDR halber interner Speichertakt, nur noch Burstlänge von 4 und 8. Nomenklatur wie bei DDR-SDRAMs: DDR2-xxx xxx bezeichnet die doppelte Taktfrequenz des Speicherbusses. [TI] Winter 2013/2014 Speicher 41 DRAM-Varianten (8) DDR3-SDRAM (2007) Weiterentwicklung des DDR2-SDRAM Standards. Übertragen wie DDR-SDRAMs Daten sowohl bei der steigenden als auch bei der fallenden Taktflanke. Noch geringere Versorgungsspannung: 1,5 Volt anstatt 1,8 Volt Bei jedem Zugriff auf die Speichermatrix werden 8 benachbarte Datenbits ausgelesen bzw. geschrieben (8-Bit Prefetch). Im Vergleich zu DDR ist interner Speichertakt um Faktor 4 kleiner. Nomenklatur wie bei DDR-SDRAMs: DDR3-xxxx xxxx bezeichnet die doppelte Taktfrequenz des Speicherbusses. Zusätzliche Angaben in der Form CL a-b-c bedeuten a = tCL, b = tRCD und c = tRP. [TI] Winter 2013/2014 Speicher 42 DRAM-Varianten (9) Zusammenfassung typischer Werte: Variante Zykluszeit Zugriffszeit DRAM (FPM) SDRAM PC-133 externer Takt − 133 MHz 60 ns 40 ns SpaltenZugriffszeit 30 ns 15 ns BurstZugriffszeit 30 ns 7,5 ns 80 ns 60 ns DDR-400 2,5-3-3 DDR2-800 6-6-6 DDR3-1066 7-7-7 200 MHz 400 MHz 533 MHz 55 ns 45 ns 40 ns 30 ns 30 ns 26 ns 12,5 ns 15 ns 13 ns 2,5 ns 1,25 ns 0,94 ns DDR3-1600 9-9-9 800 MHz 34 ns 23 ns 11 ns 0.63 ns Eine einzelne DRAM-Speicherzelle ist kaum schneller geworden; lediglich das Interface wurde so verbessert, dass die Zugriffszeit im Burst-Modus erheblich reduziert wurde! [TI] Winter 2013/2014 Speicher 43 Speichermodule (1) Speicherbausteine werden nicht einzeln verwendet, sondern als Module: SIMM (Single Inline Memory Module) oder PS/2-Modul Einseitig bestückt, 72 Kontakte nur auf einer Seite der Speicherplatine, 32 Datenbits Jeweils 2 identische Module für 64-Bit Bus erforderlich. DIMM (Dual Inline Memory Module) Kontakte beidseitig, meist zweiseitig bestückt, 64 Datenbits Bei Verwendung von SDRAMS: 168 Kontakte, bei DDR-SDRAMs: 184 Kontakte, bei DDR2- und DDR3-SDRAMs: 240 Kontakte [TI] Winter 2013/2014 Speicher 44 Speichermodule (2) Neben den normalen („unbuffered“) Speichermodulen gibt es auch solche mit zusätzlichen Registern („registered“) zum Aufbau von Servern mit sehr großem Arbeitsspeicher. Auch Speichermodule mit Fehlererkennung oder Fehlerkorrektur verfügbar: Zusätzlicher Speicherbaustein für Prüfbits erforderlich. Parity-Module gestatten eine Fehlererkennung. 1 zusätzliches Prüfbit ECC-Module (Error Correcting Code) gestatten eine Fehlerkorrektur. 8 zusätzliche Prüfbits bei 64-Bit Modulen [TI] Winter 2013/2014 Speicher 45 NICHTFLÜCHTIGE SPEICHER [TI] Winter 2013/2014 Speicher 46 Nichtflüchtige Speicher (1) Ein Festwertspeicher (ROM = Read Only Memory) hat auch eine matrixartige Architektur. Der FET in einer jeden Zelle wird über eine Maske bei der Produktion permanent leitend oder sperrend. [TI] Winter 2013/2014 Speicher 47 Nichtflüchtige Speicher (2) Bei einem PROM (Programmable ROM) sind die Transistoren nur über eine sehr dünne Metallschicht (fuse) mit der Bitleitung verbunden. Bipolare Transistoren anstatt FETs Alle Transistoren eines PROMs sind zunächst leitend. Durch einen kurzen Überspannungsimpuls auf der Bitleitung kann die Metallschicht verdampft werden (Transistor sperrt). Programmierung ist irreversibel. Sehr kurze Zugriffszeiten (ca. 5 ns) beim Lesen möglich. Auch zur Realisierung logischer Schaltungen geeignet. [TI] Winter 2013/2014 Speicher 48 Nichtflüchtige Speicher (3) Ein EPROM (Erasable PROM) basiert auf Floating Gate FETs: FET ist zunächst leitend. Bei Anlegen einer hohen Spannung VGS (12V) an gate2 entsteht ein elektrisches Feld, das die Elektronen auf das „Floating Gate“ (gate1) springen lässt (FET sperrt). Ladung auf „Floating Gate“ bleibt einige Jahre erhalten. Erst durch UV Licht werden Elektronen wieder freigesetzt (FET leitet). Programmierung erfordert spezielles Programmiergerät. Lebensdauer: einige 100 Lösch-/Brennvorgänge [TI] Winter 2013/2014 Speicher 49 Nichtflüchtige Speicher (4) Ein EEPROM (Electronically Erasable PROM) basiert auf Floating Gate Tunnel Oxide FET Transistoren: Dünne Oxidschicht, durch die bei Anlegen negativer Spannungen VGS die Elektronen zurückspringen können. Bis zu 10000 Schreibvorgänge möglich. Löschen einzelner Werte möglich. Zeit für das Lesen eines Wertes: 35 ns Zeit für das Schreiben eines Wertes: 5 bis 10 ms [TI] Winter 2013/2014 Speicher 50 Nichtflüchtige Speicher (5) Flash-Speicher arbeiten ähnlich wie EEPROMs, haben jedoch günstigere Eigenschaften. Zwei Technologien: NOR (1998, Intel) und NAND (1999, Toshiba) Zugriffszeit beim Lesen: NOR: 25 bis 70 ns (wahlfrei) NAND: 50 ns (seriell in einer Seite aus z.B. 512 Byte) Zeit für Schreibvorgang: NOR: 5 bis 10 µs je Wort NAND: ca. 200 µs je Seite (z.B. 512 Byte) Bis zu 1000000 Schreibvorgänge sind möglich (bei NAND). Typische Speicherdauer: ca. 10 Jahre NAND Flash-Speicherbausteine bieten dank kleinerer Speicherzellen eine höhere Kapazität. Nur blockweises Löschen möglich, bei NAND wesentlich schneller. [TI] Winter 2013/2014 Speicher 51 Nichtflüchtige Speicher (6) Typische Anwendungen von Festwertspeichern: Speicherung des BIOS (Basic Input/Output System) beim PC. Speicherung von Programmen bei eingebetteten Systemen. In Geräten der Kommunikationstechnik zur Speicherung von Rufnummern, Senderfrequenzen, … Als Flashkarten zur Speicherung von Bildern in digitalen Fotoapparaten, für Musikdateien beim MP3-Player, … In USB Memory-Sticks oder SSDs zur Speicherung von Daten oder Programmen. [TI] Winter 2013/2014 Speicher 52 CACHES [TI] Winter 2013/2014 Speicher 53 Caches (1) Aufgrund immer höherer Leistung moderner CPUs nehmen die Anforderungen an den Speicher ständig zu benötigt werden: Kurze Zugriffszeit Hohe Transferrate Speichermodule aus aktuellen DRAM-Varianten erreichen zwar eine relativ hohe Transferrate; die Zugriffszeit ist bei wahlfreier Adressierung jedoch völlig unzureichend! Durch Einsatz einer Speicherhierarchie (aus gestaffelt schnellen Speichern) soll ein Speicher aus DRAMBausteinen ähnlich schnell werden wie ein Speicher aus SRAM-Bausteinen. [TI] Winter 2013/2014 Speicher 54 Caches (2) Grundidee: Programme verfügen meist über eine hohe Lokalität, d.h. sie greifen in einer Zeitspanne nur auf einen kleinen Teil des Adressraums zu. Es gibt zwei Arten von Lokalität: Zeitliche Lokalität: Wenn Zugriff auf ein Element im Speicher erfolgt, ist die Wahrscheinlichkeit groß, dass dieses Element noch einmal verwendet wird (z.B. bei Schleifen). Räumliche Lokalität: Nach Zugriff auf ein Element aus dem Speicher ist die Wahrscheinlichkeit groß, dass auch auf benachbarte Elemente zugegriffen wird (z.B. bei Arrays). Bei Zugriff auf Speicheradresse a wird daher nicht nur ein einzelnes Speicherwort gelesen. Es werden auch alle benachbarten Speicherworte gelesen und im Cache gespeichert (hohe Übertragungsrate im DRAM BurstModus kann ausgenutzt werden!). [TI] Winter 2013/2014 Speicher 55 Speicherhierarchie (1) Heutige Rechner verfügen über eine mehrstufige Speicherhierarchie: Prozessorinterne L1 Caches für Code und Daten: Zugriff in 1-3 Takten Typische Größe von 8−64 KByte, SRAM Prozessorexterner, aber jedoch auf dem gleichen Chip integrierter (für Code und Daten gemeinsamer) L2 Cache Zugriff in 4-15 Takten Typische Größe von 256 KByte bis 16 MByte, SRAM Mittlerweile zusätzlicher (externer) L3 Cache Typische Größe 2-64 Mbyte Hauptspeicher (DRAM) mit einigen (z.B. 8,16) Gbyte Zugriff in ca. 40 ns [TI] Winter 2013/2014 Speicher 56 Speicherhierarchie (2) Cache auf Ebene i + 1 ist größer und langsamer als auf Ebene i. Jeder Cache arbeitet wie ein Assoziativspeicher für Speichereinträge des Hauptspeichers: Über einen Schlüssel wird auf ein Datenfeld zugegriffen. Der Schlüssel entspricht der Speicheradresse. Das Datenfeld enthält den Speicherinhalt. Bei jedem Speicherzugriff wird beginnend beim Cache auf der Ebene i = 1 überprüft, ob die Speicheradresse als Schlüssel gespeichert ist: Falls vorhanden (Cache Hit), enthält der Cache der Ebene i eine Kopie des Speicherinhaltes. Falls nicht vorhanden (Cache Miss), wird der Cache auf Ebene i + 1 bzw. der Hauptspeicher konsultiert und die adressierten Daten werden für spätere Zugriffe im Cache der Ebene i gespeichert. [TI] Winter 2013/2014 Speicher 57 Cache-Aufbau Ein Cache besteht aus c = 2k Cache-Zeilen. Jede Cache-Zeile (Cache Line oder Cache Block) besteht aus einem tBit Identifikator (Tag), einem Datenbereich, einem Index und Gültigkeits-Flag V (Valid Bit): Datenbereich besteht aus m = 2d Bytes (typisch: m = 8, 16, 32); m wird Eintragsgröße (Block Size oder Line Size) genannt. Der Tag enthält einen Teil der Speicheradresse. Größe des Cache-Speichers: Sc = c ⋅ m Nur für Datenbereich, zusätzlicher Speicherbedarf von c ⋅ t Bit für Tags und c Bit für Valid Bits. [TI] Winter 2013/2014 Speicher 58 Vollassoziativer Cache (1) Beim vollassoziativen Cache wird eine Hauptspeicherzeile in beliebiger Cache-Zeile abgelegt: Bei Zugriff auf ein Wort auf beliebiger Adresse a werden m = 2d Bytes ab der Adresse a' = a – a mod m in den Cache geladen. Für eine CPU mit Adressen der Breite w bit (Größe des Adressraums ist SM = 2w) ist ein Tag von t = w – d Bit erforderlich. Beispiel: 32-Bit Adressen (w = 32) Cache mit Zeilen aus je m = 16 Bytes (d = 4) Niedrige d Bit einer Adresse nicht im Tag enthalten; sie dienen der Auswahl eines Bytes aus Cache-Zeile. [TI] Winter 2013/2014 Speicher 59 Vollassoziativer Cache (2) Aufbau und Arbeitsweise eines vollassoziativen 4 KByte Caches mit 256 Zeilen à 16 Byte für eine 32-bit CPU: [TI] Winter 2013/2014 Speicher 60 Vollassoziativer Cache (3) Bei Zugriff auf Adresse a wird das Tag aller gültigen Cache-Zeilen meist gleichzeitig (vollparallel) mit den entsprechenden Adress-Bits von a verglichen. Aufwand: (w− d) ⋅ c Bit-Vergleicher Ein c-Bit Treffer-Register Ein Baum aus UND- und ODER-Gattern zur Bestimmung eines Cache Hit Signals für CPU aus Treffer-Registern. Vollassoziativer Cache wird nur für kleine Caches verwendet! Ansonsten ist Aufwand zu hoch und die Trefferbestimmung aufgrund der aufwendigen Logik zu langsam. [TI] Winter 2013/2014 Speicher 61 Direkt abbildender Cache (1) Beim direkt abbildenden Cache (direct mapped cache) kann jede Hauptspeicherzeile nur auf eine bestimmte Cache-Zeile abgebildet werden. Die Cache-Zeile wird direkt durch den Index-Anteil einer Adresse festgelegt! Bei einem Hauptspeicher der Größe SM = 2w Byte und einem Cache mit c = 2k Zeilen aus jeweils m = 2d Byte ist ein Tag von nur noch t = w – k – d Bit erforderlich. Beispiel: 32-Bit Adressen (w = 32) 64 KByte Cache mit 4096 Zeilen (k = 12) aus je 16 Bytes (d = 4) [TI] Winter 2013/2014 Speicher 62 Direkt abbildender Cache (2) Aufbau und Arbeitsweise eines direkt abbildenden 64 KByte Caches mit 4096 Zeilen à 16 Byte für eine 32-Bit CPU: [TI] Winter 2013/2014 Speicher 63 Direkt abbildender Cache (3) Man kann sich den Hauptspeicher in gleich große Segmente unterteilt vorstellen: Größe des Hauptspeichers S M = 2w Byte. Aufteilung in s = 2t der Cachegröße SC entsprechende Segmente. Insgesamt s Hauptspeicherzeilen mit gleichem Indexanteil (d.h. mit Adress-Distanz 2w-t) konkurrieren um eine CacheZeile. Die i-te Hauptspeicherzeile eines jeden Segmentes kann nur in der Cache-Zeile i gespeichert werden. Bei einem Konflikt muss entsprechende Zeile erst freigegeben werden, bevor sie erneut belegt wird. Bei Cache-Zugriff muss nur ein t-Bit Tag mit den zugehörigen t Bit der Adresse verglichen werden. Aufwand: t Bit-Vergleicher, kein Assoziativspeicher! [TI] Winter 2013/2014 Speicher 64 n-Wege teilassoziativer Cache (1) Mischform aus einem vollassoziativen und einem direkt abbildenden Cache: Der Cache wird nun in n Partitionen (Sets) der Größe SC / n unterteilt (n-Way Set-Associative Cache). Jede Partition ist ein direkt abbildender Cache; assoziativer Zugriff auf entsprechende Zeilen aller n Partitionen. Jede Hauptspeicherzeile kann in einer beliebigen Partition, dort aber nur in einer bestimmten Cache-Zeile abgespeichert werden. Bei einer Kollision kann eine andere Partition ausgewählt werden, sofern dort in der entsprechenden Zeile ein Eintrag kollisionsfrei möglich ist. [TI] Winter 2013/2014 Speicher 65 n-Wege teilassoziativer Cache (2) Bei einem Hauptspeicher der Größe SM = 2w Byte und einem n-Wege teilassoziativem Cache mit c = 2k Zeilen je Partition und Cache-Zeilen aus m = 2d Byte ist ein Tag von t = w – k – d Bit erforderlich. Resultierende Cache-Gesamtgröße: SC = n ⋅ c ⋅ m Byte = n ⋅ 2k ⋅ 2m Byte Beispiel: 32-Bit Adressen (w = 32), 2-Wege teilassoziativer Cache der Größe 128 KByte, d.h. 2 Partitionen à 64 KByte mit jeweils c = 4096 Zeilen (k = 12) und Cache-Zeilen aus m = 16 Bytes (d = 4) Adressbildung erfolgt somit wie bei einem direkt abbildendem Cache der Größe SC / n. [TI] Winter 2013/2014 Speicher 66 n-Wege teilassoziativer Cache (3) Aufbau und Arbeitsweise eines 2-Wege teilassoziativen Caches der Größe 128 KByte mit Zeilen à 16 Byte: [TI] Winter 2013/2014 Speicher 67 n-Wege teilassoziativer Cache (4) Insgesamt s Hauptspeicherzeilen mit gleichem Indexanteil (d.h. mit Adress-Distanz 2w− t) konkurrieren um n Cache-Zeilen! Allgemein gilt n << s, d.h. Konflikte sind möglich, aber seltener als beim direkt abbildenden Cache. Man kann sich Hauptspeicher wie beim direkt abbildendem Cache in s = 2t Segmente der Größe SM / s unterteilt vorstellen: Beim Eintrag der i-ten Hauptspeicherzeile des j-ten Segmentes entspricht i dem Index. Es wird eine Partition ermittelt, in der eine Cache -Zeile mit Index i frei ist, j wird dort als Tag eingetragen. Bei einem Cache-Zugriff müssen die t-Bit Tags aller n Zeilen mit den zugehörigen t Bit der Adresse verglichen werden. n parallele Vergleiche, Aufwand: n ⋅ t Bit-Vergleicher [TI] Winter 2013/2014 Speicher 68 Lese- und Schreibzugriffe (1) Folgende Situationen können bei einem Lesezugriff auf eine Cache-Zeile auftreten: Read Hit: Bei einem erfolgreichen Lesezugriff (d.h. Tag und die zugehörigen Adress-Bits stimmen überein) wird ein Datum aus typisch 1, 2, 4, 8 oder m Bytes aus der CacheZeile in den Befehlspuffer bzw. in ein Register der CPU geladen. Read Miss: Bei einem erfolglosen Lesezugriff auf Adresse a wird stets eine komplette Cache-Zeile mit m Bytes (Burst-Modus!) ab der Adresse a – a mod m aus dem Hauptspeicher bzw. aus dem Cache der nächsten Hierarchie-Stufe eingelesen. muss gegebenenfalls eine Cache-Zeile ersetzt werden, typischerweise gemäß der LRU-Strategie (Least Recently Used ). – Ersetze jene Zeile, auf die am längsten nicht mehr zugegriffen wurde. – In der Praxis oft nur approximierter LRU oder zufälliges Ersetzen. [TI] Winter 2013/2014 Speicher 69 Lese- und Schreibzugriffe (2) Folgende Situationen können bei einem Schreibzugriff auf eine Cache-Zeile auftreten: Write Hit: Bei erfolgreichem Schreibzugriff auf Adresse a wird ein Datum aus typisch 1, 2, 4 oder 8 Byte im Cache aktualisiert und die komplette Cache-Zeile wird entweder unmittelbar in den Hauptspeicher zurück geschrieben (Write Through), oder durch ein zusätzliches Flag (Dirty Bit) markiert und erst später bei Verdrängung in den Hauptspeicher zurück geschrieben (Write Back). Write Miss : Bei erfolglosem Schreibzugriff wird entweder der Eintrag zunächst aus dem Speicher geholt und dann wie bei einem Write Hit aktualisiert (Fetch on Write), oder der Eintrag wird nur im Hauptspeicher ohne Modifikation des Caches aktualisiert (Write Around). Hinweis: Bei modernen Multicore-Prozessoren wird die Verwaltung noch komplizierter da jeder Core einen eigenen Cache besitzt. Zusätzliche Cache-Kohärenz Protokolle! [TI] Winter 2013/2014 Speicher 70 Verhalten von Caches (1) Faustregeln Ein 2-Wege teilassoziativer Cache hat typischerweise eine Miss Rate wie ein doppelt so großer direkt abbildender Cache! Ein 8-Wege teilassoziativer Cache weist für die meisten Anwendungen ungefähr eine Miss Rate wie ein vollassoziativer Cache auf! 3 Ursachen für Cache-Fehlzugriffe (3 „C“s) Bei Erstbelegung nach Programmstart (Compulsory) Wenn wegen zu geringer Kapazität Verdrängungen benötigter Zeilen auftreten (Capacity). Wenn benötigte Zeilen wegen Konflikten verdrängt werden (Conflict). [TI] Winter 2013/2014 Speicher 71 Verhalten von Caches (2) Miss-Rate in Abhängigkeit von der Cache-Größe und der Assoziativität (für bestimmte Benchmarks): [TI] Winter 2013/2014 Speicher 72 Verhalten von Caches (3) Typische Fehlzugriffsrate in Abhängigkeit von Ursache, Cache-Größe und -Typ (ermittelt für Spec2000 Benchmark, Patterson 2009) Fehlzugriffsrate sinkt deutlich bei Vergrößerung des Caches! Fehlzugriffe durch Erstbelegung sind für viele Anwendungen vernachlässigbar! [TI] Winter 2013/2014 Speicher 73 Verhalten von Caches (4) Fazit: Eine gut dimensionierte Cache-Hierarchie kann durch Ausnutzung von zeitlicher und räumlicher Lokalität in Programmen und des Burst-Modus bei ausreichend hoher Eintragsgröße die Nachteile von langsamen DRAM-Bausteinen weitgehend verdecken! [TI] Winter 2013/2014 Speicher 74 Cache-Optimierungen in Programmen (1) Einfügen von Prefetch-Instruktionen, d.h. benötigte Daten werden schon vorab in den Cache geholt. Automatisch vom Compiler oder manuell im Assemblerprogramm! Erhöhung der Lokalität beim Zugriff auf Daten: Beispiel 1: Merging Beispiel 2: Loop Interchange /* vorher: */ char *name[100]; int personalnummer[100]; /* vorher: */ for (j=0;j<100;j=j+1) for (i=0;i<5000;i=i+1) x[i][j] = 2*x[i][j] /* nachher: */ struct person { char *name; int personalnummer; }; struct person personal[100]; [TI] Winter 2013/2014 Speicher /* nachher: */ for (i=0;i<5000;i=i+1) for (j=0;j<100;j=j+1) x[i][j] = 2*x[i][j] 75 Cache-Optimierungen in Programmen (2) Vermeidung von Cache-Konflikten Die Wahrscheinlichkeit für Verdrängungen durch Cache-Konflikte kann z.B. steigen, wenn die Größe einer Dimension eines mehrdimensionalen Feldes einer Zweierpotenz entspricht, die Elemente mehrerer Felder, deren Größe jeweils einer Zweierpotenz entspricht, verknüpft werden. Lösung: Einfügen von Füllworten (Padding), z.B. Durch Erhöhen der Feldgröße auf einen Wert, der keine Zweierpotenz darstellt. Durch Einfügen zusätzlicher Variablen zwischen der Deklaration von Feldern. Einige Compiler für Höchstleistungscomputer können ein Padding auch automatisch durchführen. [TI] Winter 2013/2014 Speicher 76