/ / Cache-Speicherorganisation - C, Caching, Computerarchitektur

Cache-Speicher-Organisation - C, Caching, Computer-Architektur

Ich möchte verstehen, wie das folgende Programm in Bezug auf die Aktualisierung des Hauptspeichers funktioniert.

int main() {
short a[256], b[256];
register i;

for (i=0 ; i < 256 ; i++)
a[i] = i;
for (i=0 ; i < 256 ; i++)
b[i] = 255 - i;
for (i=0 ; i < 256 ; i++)
b[i] = b[i] - a[i];
return 0;
}

Ich habe einen Adressbus von 16 Bit, Hauptspeicher in Bytes, Cache-Speichergröße von 512 2-Wege-Satzassoziativ, Blockgröße von 16 Byte und die CPU kann nur Informationen aus dem Cache-Speicher lesen.

Was passiert, wenn wir die Write-Write-Richtlinie verwenden? und was ist, wenn wir Write-Write-Write-Policy verwenden?

Antworten:

0 für die Antwort № 1

Ich nehme an

Cache-Speichergröße von 512

was meinen Sie 512 byte.

Und nehmen wir an, der Cache ist leer und enthält nichts, das zugeordnet ist a[] oder b[] Region.

Wenn Ihr Code mit Rückschreiben ausgeführt wird, wird die erste Schleife vollständig im Cache übersehen. Die dritte Schleife holt sich danach 16 Byte a[i] und b[i] Wenn ein Fehler auftritt, fahren Sie fort, bis der nächste Block erreicht ist (1 Fehler in 8 Iterationen).

Bei der Schreibzuweisung haben die ersten beiden alle 8 Iterationen einen Fehlschlag, und die dritte Schleife ist ein Treffer.

In diesem Fall, a[] und b[] sind im gleichen Satz, also ist es gut für den "2-Wege-Assoziativ" -Teil. Wenn Sie jedoch mehr als 4 Arrays der Größe angeben short[256]Du wirst Konflikte haben.

int main() {
short a[256], b[256], c[256], d[256], e[256];
register i;

for (i=0 ; i < 256 ; i++)
a[i] = i;// a in set0
for (i=0 ; i < 256 ; i++)
c[i] = 255 - i; //c in set 1
for (i=0 ; i < 256 ; i++)
e[i] = c[i] - a[i]; // e/c/a evacuates each other
return 0;
}