« »

Effekte unterschiedlicher Cache-Größen

Konventionell wird ein Cache nach der Menge an Daten benannt, die er fassen kann: Ein 4-KiB-Cache kann 4 KiB Daten enthalten. Allerdings benötigen Caches auch SRAM, um Metadaten wie Tags und Gültigkeits-Bits zu speichern. In dieser Aufgabe sehen wir uns an, wie die Konfiguration eines Caches beeinflusst, wie viel SRAM insgesamt für die Implementierung benötigt wird – und wie dies die Performance des Caches beeinflusst.

Unser System nutzt 64-Bit-Adressen. 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).

a)

Level 3: Anwenden

Berechnen Sie die Gesamtanzahl der Bits, die benötigt werden, um einen direkt abgebildeten 32-KiB-Cache mit zwei Worte breiten Blöcken zu implementieren.

Lösung
  • die Wortgröße entspricht der Adressgröße, also 64 Bit oder 8 Byte
  • Blockgröße von zwei Worten zu 8 Byte → 16 Byte pro Block
  • 32 KiB = $2^5 \cdot 2^{10} = 2^{15}$ Byte = 32.768 Byte Daten
  • darum $2^{15}$ Byte ÷ $2^4$ Byte je Block = $2^{11}$ Blöcke → 11 Bit für den Index
  • gesamter Offset = 4 Bit, davon …
    • 3 Bit für den Word Offset (innerhalb eines 8-Byte-Wortes)
    • 1 Bit für den Block Offset, womit $2^1 = 2$ Worte nummeriert werden können
  • es verbleiben 64 - 11 - 3 - 1 = 49 Bit für den Tag
  • in Summe:
    • $2^{15} \cdot 8$ Bit für Daten
    • $2^{11} \cdot 49$ Bit für Tags
    • $2^{11} \cdot 1$ Gültigkeitsbit
    • also 364.544 Bit bzw. 45.568 Byte Gesamtgröße

b)

Level 3: Anwenden

Berechnen Sie die Gesamtzahl der Bits, die benötigt werden, um einen direkt abgebildeten 64-KiB-Cache mit 16 Worte breiten Blöcken zu implementieren. Wie viel größer ist dieser im Vergleich zum 32-KiB-Cache der vorherigen Aufgabe? (Beachten Sie, dass sich mit der Änderung der Blockgröße die Menge der Daten verdoppelt hat, ohne dass sich die Gesamtgröße des Caches verdoppelt hat.)

Lösung
  • Blockgröße von 16 Worten zu 8 Byte → 128 Byte pro Block
  • 64 KiB = $2^6 \cdot 2^{10} = 2^{16}$ Byte = 65.536 Byte Daten
  • darum $2^{16}$ Byte ÷ $2^7$ Byte je Block = $2^{9}$ Blöcke → 9 Bit für den Index
  • gesamter Offset = 7 Bit, davon …
    • 3 Bit für den Word Offset (innerhalb eines 8-Byte-Wortes)
    • 4 Bit für den Block Offset, womit $2^4 = 16$ Worte nummeriert werden können
  • es verbleiben 64 - 9 - 3 - 4 = 48 Bit für den Tag
  • in Summe:
    • $2^{16} \cdot 8$ Bit für Daten
    • $2^{9} \cdot 48$ Bit für Tags
    • $2^{9} \cdot 1$ Gültigkeitsbit
    • also 549.376 Bit bzw. 68.672 Byte Gesamtgröße
  • im Vergleich:
    • $(549.376 ÷ 364.544) -1 = 0{,}5070$
    • Steigerung von 50,70 %

c)

Level 6: Erschaffen

Erzeugen Sie eine Reihe von Lesezugriffen, die auf einem mengenassoziativen 32-KiB-Cache mit zwei Wegen eine niedrigere Miss Rate haben als auf dem Cache, der in der ersten Teilaufgabe beschrieben wird.

Lösung
  • aufeinanderfolgende Anfragen mit gleichem Index, aber unterschiedlichen Tags rufen bei direkter Abbildung viele Misses hervor
    • Beispiel: 0, 32768, 0, 32768, 0, 32768, …
  • assoziative Caches reduzieren potenziell diese Conflict Miss Rate
    • Cold Miss: erster Zugriff auf einen Block
    • Capacity Miss: nicht genug Platz vorhanden
    • Conflict Miss: zu viele Blöcke verweisen auf dieselbe Cachemenge
  • selbst bei viel kleinerer Gesamtkapazität wäre ein mengenassoziativer Cache mit LRU-Policy und zwei Wegen im genannten Beispiel somit hilfreicher

Lernziele

In dieser Aufgabe …

  • erschließen sich die Studierenden aus Angaben zu Aufbau und Größe des Caches die interne Struktur des Caches.
  • analysieren die Studierenden die Vorteile mengenasosziativer Caches gegenüber direkt abgebildeten Caches.