typedef int array[2][2];
void transpose(array dst, array src) {
int i, j;
for (j = 0; j < 2; j++) {
for (i = 0; i < 2; i++) {
dst[i][j] = src[j][i];
}
}
}
Das src-Array beginnt an der Adresse 0 und das dst-Array beginnt an der Adresse 0x10.Cache-Speicheroptimierung Array-Transponierung: C
L1 Datencache, direkte Zuordnung, Schreibzuweisung, 8 Byte Blockgröße.
Cache-Gesamtgröße ist 16 Datenbytes.
Was ist der Treffer oder Fehlschlag bei jedem Eintrag von src und dst array?
Die Antwort lautet:
src:
[0][0] -> miss,
[0][1] -> miss,
[1][0] -> miss,
[1][1] -> hit
dst:
[0][0] -> miss,
[0][1] -> miss,
[1][0] -> miss,
[1][1] -> miss
Wenn die Cache Gesamtgröße 32 Daten-Bytes ist, lautet die Antwort:
src:
[0][0] -> miss,
[0][1] -> hit,
[1][0] -> miss,
[1][1] -> hit
dst:
[0][0] -> miss,
[0][1] -> hit,
[1][0] -> miss,
[1][1] -> hit
Ich bin nicht sicher, beiden Ergebnisse. Ich verstehe das Konzept mit Arrays und Caching nicht wirklich.