Sie sind auf Seite 1von 4

5.1.

In dieser Übung betrachten wir die Speicherlokalitätseigenschaften der


Matrixberechnung. Der folgende Code wird in C geschrieben, wobei Elemente
innerhalb derselben Zeile zusammenhängend gespeichert werden.
Angenommen, jedes Wort ist eine 64-Bit-Ganzzahl.
for (I=0; I<8; I++)
for (J=0; J<8000; J++)
A[I][J]=B[I][0]+A[J][I];
5.1.1 Wie viele 64-Bit-Ganzzahlen können in einem 16-Byte-Cache-Block
gespeichert
werden?
Antwort:
1 Byte = 8 Bit
=> 16 Byte
= 128 Bit => In einem 16-Byte-Cache-Block können 2 64-Bit-Ganzzahlen
gespeichert werden.
5.1.2 Welche variablen Referenzen weisen eine zeitliche Lokalität auf?
Antwort:
Zeitliche Ortsvariable: I, J, B[I][0]

5.1.3 Welche Variablenreferenzen weisen eine räumliche Lokalität auf? Die


Lokalität wird sowohl von der Referenzreihenfolge als auch vom Datenlayout
beeinflusst. Die gleiche Berechnung kann auch unten in Matlab geschrieben
werden, das sich von C dadurch unterscheidet, dass es Matrixelemente
innerhalb derselben Spalte zusammenhängend im Speicher speichert.
für I=1:8
für J=1:8000
A(I,J)=B(I,0)+A(J,I);
Ende
Ende
Antwort: A[I][J]
5.1.4 Welche variablen Referenzen weisen eine zeitliche Lokalität auf?
Antwort: I, J, B(I,0)

5.1.5 Welche Variablenreferenzen weisen eine räumliche Lokalität auf?


Antwort: A(J,I) und B(I,0)
5.1.6 Wie viele 16-Byte-Cache-Blöcke werden benötigt, um alle 64-Bit-
Matrixelemente zu speichern,
auf die mit dem Matrixspeicher von Matlab verwiesen wird? Wie viele
verwenden den Matrixspeicher von C? (Angenommen, jede Zeile enthält mehr
als ein Element.)
Antwort:
Bei der Matrix A sind die Code-Referenzen 8*8000=64 000 ganze Zahlen. Da 2
Ganzzahlen pro 16-Byte-Block benötigt werden, benötigen wir 64 000/2 = 32
000 Blöcke.
Verwenden des Matrixspeichers von C (dass er Matrixelemente innerhalb
derselben Spalte zusammenhängend im Speicher speichert), wobei die Matrix B
8 Blöcke hat
=> 32000 + 8 = 32 008 (Blöcke)
Mithilfe des Matrixspeichers von Matlab (dass er Matrixelemente innerhalb
derselben Zeile zusammenhängend im Speicher speichert) hat die Matrix B 4
Blöcke (2 Ganzzahlen pro Block)
=> 32000 + 4 = 32 004 (Blöcke)

5.2 Caches sind wichtig, um Prozessoren eine leistungsfähige


Speicherhierarchie
zur Verfügung zu stellen. Nachfolgend finden Sie eine Liste von 64-Bit-
Speicheradressenreferenzen, die als Wortadressen angegeben werden.
0x03, 0xb4, 0x2b, 0x02, 0xbf, 0x58, 0xbe, 0x0e, 0xb5, 0x2c, 0xba, 0xfd
5.2.1 Identifizieren Sie für jede dieser Referenzen die binäre Wortadresse, das
Tag und den Index bei einem direkt zugeordneten Cache mit 16
Einwortblöcken. Listen Sie auch auf, ob jeder Verweis ein Treffer oder ein
Fehlschlag ist, vorausgesetzt, der Cache ist zunächst leer.
Antwort:
16 Blöcke = 24 => 4-Bit-Index
Wortadresse Binäre Adresse Tag Index Treffer/
Verfehlu
ng
0x03 0000 0011 0x0 0011 M
0xb4 1011 0100 0xb 0100 M
0x2b 0010 1011 0x2 1011 M
0x02 0000 0010 0x0 0010 M
0xbf 1011 1111 0xb 1111 M
0x58 0101 1000 0x5 1000 M
0xbe 1011 1110 0xb 1110 M
0x0e 0000 1110 0x0 1110 M
0xb5 1011 0101 0xb 0101 M
0x2c 0010 1100 0x2 1100 M
0xba 1011 1010 0xb 1010 M
0xfd 1111 1101 0xf 1101 M

5.2.2 Identifizieren Sie für jede dieser Referenzen die Binärwortadresse, das
Tag, den Index und den Offset bei einem direkt zugeordneten Cache mit zwei
Wortblöcken und einer Gesamtgröße von acht Blöcken. Listen Sie auch auf, ob
jeder Verweis ein Treffer oder ein Fehlschlag ist, vorausgesetzt,
der Cache ist zunächst leer.
Antwort:
8 Blöcke = 23 => 3-Bit-Index
2 Wörter/Block = 21 => 1-Bit-Offset
Wortadresse Binäre Adresse Tag Index Versa Treffer/
tz Verfehlu
ng
0x03 0000 0011 0x0 001 1 M
0xb4 1011 0100 0xb 010 0 M
0x2b 0010 1011 0x2 101 1 M
0x02 0000 0010 0x0 001 0 M
0xbf 1011 1111 0xb 111 1 M
0x58 0101 1000 0x5 100 0 M
0xbe 1011 1110 0xb 111 0 M
0x0e 0000 1110 0x0 111 0 M
0xb5 1011 0101 0xb 010 1 M
0x2c 0010 1100 0x2 110 0 M
0xba 1011 1010 0xb 101 0 M
0xfd 1111 1101 0xf 110 1 M
5.2.3 Sie werden gebeten, ein Cache-Design für die angegebenen Referenzen zu
optimieren. Es sind drei direkt abgebildete Cache-Designs möglich, alle mit
insgesamt acht Datenwörtern:
■ C1 hat 1-Wort-Blöcke
■ C2 hat 2-Wort-Blöcke
■ C3 hat 4-Wort-Blöcke.
Antwort:
C1 hat 1-Wort-Blöcke => 8 Blöcke => 3-Bit-Index, kein Bit-Offset
C2 hat 2-Wort-Blöcke => 4 Blöcke => 2-Bit-Index + 1-Bit-Offset
C3 hat 4-Wort-Blöcke => 2 Blöcke => 1-Bit-Index + 2-Bit-Offset

Wortadr Binäre Tag Cache 1 Cache 2 Cache 3


esse Adresse Index Treffer/ Index Treffer/ Index Treffer/
Verfehlu Verfehlu Verfehlu
ng ng ng
0x03 0000 0011 0x00 011 M 01 M 0 M
0xb4 1011 0100 0x16 100 M 10 M 1 M
0x2b 0010 1011 0x05 011 M 01 M 0 M
0x02 0000 0010 0x00 010 M 01 M 0 M
0xbf 1011 1111 0x17 111 M 11 M 1 M
0x58 0101 1000 0x0b 000 M 00 M 0 M
0xbe 1011 1110 0x17 110 M 11 H 1 H
0x0e 0000 1110 0x01 110 M 11 M 1 M
0xb5 1011 0101 0x16 101 M 10 H 1 M
0x2c 0010 1100 0x02 100 M 10 M 1 M
0xba 1011 1010 0x17 010 M 01 M 0 M
0xfd 1111 1101 0x1f 101 M 10 M 1 M

Cache 1 Fehlrate = 100%


Cache 2 Fehlrate = 10/12 = 83%
Cache 3 Fehlrate = 11/12 = 92%
=> Cache 2 bietet die beste Leistung.

Das könnte Ihnen auch gefallen