Lernziele
In dieser Aufgabe …
- festigen die Studierenden ihre Kenntnisse der Struktur direkt abgebildeter Caches.
- leiten die Studierenden aus einem Adressierungsschema den Aufbau des Caches ab.
- berechnen die Studierenden einfache Kennzahlen.
Betrachten Sie einen direkt abgebildeten Cache (en. direct-mapped) mit 64-Bit-Adressen, wobei die folgenden Bits der Adresse zum Zugriff auf den Cache verwendet werden:
| Tag | Index | Offset |
|---|---|---|
| 63–10 | 9–5 | 4–0 |
Die Adressierung erfolgt byteweise.
Diese Aufgabe stammt aus Kapitel 5.3 von "Computer Organization and Design. The Hardware/Software Interface. RISC-V Edition" (Patterson & Hennessy, 2018).
Level 3: Anwenden
Was ist die Blockgröße des Caches (in Worten)?
Level 1: Wissen
Wie viele Blöcke hat der Cache?
Level 1: Wissen
Wie ist das Verhältnis von den für diese Implementierung des Caches insgesamt benötigten Bits zu den gespeicherten Datenbits?
Level 3: Anwenden
Ab dem Moment des Einschaltens wurden folgende byte-adressierte Adresszugriffe aufgezeichnet:
0x00, 0x04, 0x10, 0x84, 0xe8, 0xa0,
0x400, 0x1e, 0x8c, 0xc1c, 0xb4, 0x884
Vollziehen Sie die Funktionsweise des Caches nach. Identifizieren Sie für jeden Zugriff den Tag, den Index und den Offset. Geben Sie weiterhin an, ob es sich um einen Hit oder einen Miss handelt und gegebenenfalls, welche Bytes ersetzt wurden.
| Binär-Adresse | Tag | Index | Offset | Hit? | ersetzte Bytes | |
|---|---|---|---|---|---|---|
0x00 | 0000.0000.0000 | |||||
0x04 | 0000.0000.0100 | |||||
0x10 | 0000.0001.0000 | |||||
0x84 | 0000.1000.0100 | |||||
0xe8 | 0000.1110.1000 | |||||
0xa0 | 0000.1010.0000 | |||||
0x400 | 0100.0000.0000 | |||||
0x1e | 0000.0001.1110 | |||||
0x8c | 0000.1000.1100 | |||||
0xc1c | 1100.0001.1100 | |||||
0xb4 | 0000.1011.0100 | |||||
0x884 | 1000.1000.0100 |
Hinweis zur Darstellung: In der Binär-Adresse werden führende Nullen weggelassen und somit nur die letzten 12 Bit gezeigt.
| Binär-Adresse | Tag | Index | Offset | Hit? | ersetzte Bytes | |
|---|---|---|---|---|---|---|
0x00 | 0000.0000.0000 | 0x0 | 0x00 | 0x00 | Miss | |
0x04 | 0000.0000.0100 | 0x0 | 0x00 | 0x04 | Hit | |
0x10 | 0000.0001.0000 | 0x0 | 0x00 | 0x10 | Hit | |
0x84 | 0000.1000.0100 | 0x0 | 0x04 | 0x04 | Miss | |
0xe8 | 0000.1110.1000 | 0x0 | 0x07 | 0x08 | Miss | |
0xa0 | 0000.1010.0000 | 0x0 | 0x05 | 0x00 | Miss | |
0x400 | 0100.0000.0000 | 0x1 | 0x00 | 0x00 | Miss | 0x00–0x1f |
0x1e | 0000.0001.1110 | 0x0 | 0x00 | 0x1e | Miss | 0x400–0x41f |
0x8c | 0000.1000.1100 | 0x0 | 0x04 | 0x0c | Hit | |
0xc1c | 1100.0001.1100 | 0x3 | 0x00 | 0x1c | Miss | 0x00–0x1f |
0xb4 | 0000.1011.0100 | 0x0 | 0x05 | 0x14 | Hit | |
0x884 | 1000.1000.0100 | 0x2 | 0x04 | 0x04 | Miss | 0x80–0x9f |
Zur Frage, welche Bytes bei einem Cache Miss ersetzt werden:
0.0000 bis 1.1111 möglich0x00) bis (Startadresse + 0x1f)Level 3: Anwenden
Erstellen Sie eine Liste, die den Endzustand des Caches beschreibt. Jeder gültige Eintrag soll in der Form <index, tag, data> angegeben werden (z. B. <0x0, 0x3, Mem[0xc00]-Mem[0xc1f]>).
<index, tag, data>
<0x.., 0x.., Mem[0x...]-Mem[0x...]>
<index, tag, data>
<0x00, 0x03, Mem[0xc00]-Mem[0xc1f]>
<0x04, 0x02, Mem[0x880]-Mem[0x89f]>
<0x05, 0x00, Mem[0x0a0]-Mem[0x0bf]>
<0x07, 0x00, Mem[0x0e0]-Mem[0x0ff]>
Level 1: Wissen
Ermitteln Sie die Hit Ratio, also den Anteil der Zugriffe, die aus dem Cache erfüllt werden konnten.
In dieser Aufgabe …