Per quale tipo di cache questo programma non funziona bene? Come può essere ottimizzato?

2

Considera il seguente frammento di codice:

int a[8192], b[8192], c[8192];
int i;
for(i = 0; i < 8192; i++)
    c[i] = a[i] + b[i];

Per quale tipo di cache questo programma non funzionerà correttamente (impostato associativo, diretto, associativo)? Ho pensato a come ottimizzarlo, ma non riesco davvero a vedere come può essere fatto. Come posso cambiare questo codice per avere meno errori di cache?

    
posta Meta 25.07.2012 - 00:03
fonte

1 risposta

3

Non mi aspetto praticamente nulla in termini di errori di cache dal codice di esempio. Ha solo tre flussi ed è direttamente lineare nella memoria.

Il meglio che puoi fare per migliorare la sua velocità è allineare gli array a un limite di pagina (4kb su x86) e tentare la vettorizzazione, lo srotolamento del loop ed eventualmente il parallelismo. Passato, non c'è molto altro che puoi fare.

    
risposta data 25.07.2012 - 00:16
fonte

Leggi altre domande sui tag