Il caching è una tecnica che sfrutta i dati della distanza lontano dal richiedente. In una moderna architettura del sistema informatico ci sono diversi livelli di livelli di dati. Tutti questi livelli appaiono a distanze diverse dal richiedente (la CPU).
Solitamente accade che i livelli di dati più vicini abbiano un costo maggiore per gigabyte. Un costo per gigabyte più alto significa che c'è quasi sempre meno spazio disponibile in un livello dati più vicino rispetto a un ulteriore livello dati. Questa differenza nello spazio è il motivo per cui impieghiamo tecniche di memorizzazione nella cache nei nostri sistemi informatici e nel nostro software. Tecniche che tentano di avvicinare gli elementi richiesti più probabilmente al richiedente e di rimuovere gli elementi obsoleti in modo che la memoria cache non sia esaurita.
Per sfruttare le cache, devi essere a conoscenza di due termini: località spaziale e località temporale .
Località spaziale è un termine usato con sistemi di indirizzamento come la memoria del computer. Le moderne cache dei processori trascinano i dati in blocchi di memoria adiacente (memoria "vicina" a un'altra). Gli algoritmi possono trarre vantaggio da ciò accedendo alla memoria in modo sequenziale in indirizzi che differiscono per unità piccole (1 è ottimale). Un esempio di buona localizzazione spaziale è il seguente:
int sum = 0;
int[] array = { /* Some massive array with data */ };
for (int i = 0; i < ARRAY_SIZE; i++) {
sum += array[i]; // Access elements with an address difference of 1.
}
Località temporale è un termine usato per descrivere l'utilizzo di qualcosa nella cache di frequente. L'uso di un elemento della cache (ad esempio una variabile) genera sempre meno recuperi da un livello dati più lontano. Gli algoritmi possono sfruttare la località temporale riutilizzando frequentemente le variabili. Un esempio di buona localizzazione temporale è il seguente:
int sum = 0;
for (int i = 0; i < 32; i++) {
sum += i; // Frequent access of variables sum and i.
}
Vale la pena di controllare questo link per vedere le differenze in tempo di luoghi comuni in cui i dati vengono memorizzati nel calcolo.