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