/ / Organizzazione della memoria cache - c, cache, architettura del computer

Organizzazione della memoria cache - c, memorizzazione nella cache, architettura del computer

vorrei capire come funziona il seguente programma in termini di aggiornamento della memoria principale.

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;
}

Ho un bus di indirizzo di 16 bit, memoria principale organizzata in byte, dimensione della memoria cache di 512 set associativo a 2 vie, dimensione del blocco di 16 byte e la CPU può solo leggere informazioni dalla memoria cache.

cosa succede quando utilizziamo la politica di scrittura senza scrittura e cosa succede quando usiamo la funzione Write back write allocate policy?

risposte:

0 per risposta № 1

Presumo da

dimensione della memoria cache di 512

intendi 512 byte.

E supponiamo che la cache sia vuota e non contenga nulla a cui è mappata a[] o b[] regione.

Se il tuo codice viene eseguito con write back, il primo ciclo verrà completamente perso nella cache. Il terzo loop recupererà dopo 16 byte a[i] e b[i] quando si verifica un errore e continua a colpire fino al raggiungimento del blocco successivo (1 errore in 8 iterazioni).

Con write-allocate, i primi due avranno un errore ogni 8 iterazioni, e il terzo loop è completamente colpito.

In questo caso, a[] e b[] sono nello stesso set, quindi va bene per la parte "associativa a 2 vie". Ma se dichiari più di 4 matrici di dimensioni short[256], avrai un conflitto.

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;
}