Ich lerne die Logik von Cache-Speichern. Ich frage mich, ob Sie überprüfen können, ob ich sie richtig verstanden habe. Wenn ein Cache-Speicher im Tag-Feld vorhanden ist hat 16 Bits, das gesetzte Feld hat 10 Bits und das Byte im Blockfeld ist 6 Bits, dann kann ich nur aus diesen Informationen ableiten dass die Kapazität 128 kByte beträgt und 2-Wege-Satz mit der Blockgröße 64 Byte assoziiert ist, weil 2⁶ = 64 Byte vom Byte im Blockfeld. 2¹⁰ = 1024, aber könnte eine andere Kapazität mit einer anderen Assoziativitätsnummer die Anforderungen erfüllen?
Ich erfahre, dass die Formeln
Anzahl der Blöcke = Kapazität / Blockgröße
Anzahl der Sätze = Anzahl der Blöcke / # Assoziativität
sind Ich konnte beide Assoziativitäten auf 4-Wege verdoppeln, aber ich konnte die Anforderungen mit einem 4-Wege-Cache nicht erfüllen, weil es weh tat uld würde eine andere Anzahl von Bits im gesetzten Feld erfordern.
Habe ich richtig verstanden?
Antwort
Hilft Ihnen dieses Bild zu verstehen, wie assoziative Caches funktionieren strukturell?
entlehnt von hier
Kurz gesagt, die Blockversatzbits bestimmen Ihre Blockgröße (wie viele Bytes befinden sich in einer Cache-Zeile, wie viele Spalten, wenn Sie so wollen). Die Indexbits bestimmen, wie viele Zeilen in jedem Satz enthalten sind. Die Kapazität des Caches beträgt daher 2 ^ (Blockoffsetbits + Indexbits) * #sets. In diesem Fall ist dies 2 ^ (4 + 4) * 4 = 256 * 4 = 1 Kilobyte.
Für den Cache gleicher Größe (Kapazität), wenn Sie von 4-Wege zu 2-Wege wechseln würden. Wegsatzassoziativ, es ist Zweiwegassoziativ. Sie können dies tun, indem Sie entweder die Zeilen in jedem Satz oder die Spalten in jedem Satz verdoppeln, dh die Anzahl der Cache-Zeilen verdoppeln oder die Blockgröße verdoppeln.
Wenn Sie die Anzahl der Zeilen verdoppeln würden, würde Ihre 12-Bit-Adresse in einen 5-Bit-Index und einen 4-Bit-Blockversatz aufgeteilt, sodass ein 3-Bit-Tag übrig bleibt.
Wenn Sie die Blockgröße verdoppeln würden, würde Ihre 12-Bit-Adresse in einen 4-Bit-Index, einen 5-Bit-Blockversatz, aufgeteilt, sodass ein 3-Bit-Tag übrig bleibt.
Um es noch einmal zu wiederholen, denke ich, dass die maßgeblichen Formeln für assoziative Caches lauten:
Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets) Index Bits = LOG2(Blocks per Set) Block Offset Bits = LOG2(Block Size in Bytes) Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits)
In Ihrem ursprünglich angegebenen Beispiel habe ich nicht “ Ich glaube nicht, dass Sie die Größe des Caches basierend auf der Größe Ihrer jeweiligen Adressbitfelder ableiten können, ohne eine Annahme darüber zu treffen ut die Assoziativität. Wenn 2-Wege-Assoziativ ist, können Sie sagen:
Cache-Kapazität = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 Kilobyte = 256 Kilobyte. Ich bin mir nicht sicher, wie Sie auf 128 Kilobyte gekommen sind. Das wäre der Fall, wenn es einseitig assoziativ (direkt zugeordnet) wäre.
Für eine Cache-Kapazität von 128 KB (2 ^ 17 Byte) könnte einen assoziativen 4-Wege-Cache mit einer Blockgröße von 64 Byte erstellen, indem gesagt wird:
2^17 = 2^6 * (Blocks per Set) * 4 Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512
… und daher 9 Indexbits, 4 Blockversatzbits zugewiesen werden und die restlichen (19) Tag-Bits.