Di recente mi sono interessato al problema generale dell'ottimizzazione dell'utilizzo della memoria in una situazione in cui è disponibile più di un tipo di memoria e c'è un compromesso tra la capacità di un determinato segmento di memoria e la velocità di accesso ad essa.
L'esempio familiare è un programma che decide quando leggere / scrivere nella cache del processore, nella RAM e nel disco rigido (tramite memoria virtuale).
Sono particolarmente interessato al caso speciale in cui la quantità di dati (incluso il programma stesso) che deve essere caricato supera in modo significativo la capacità dello storage più veloce disponibile (ovvero la banale soluzione di "caricare tutto" è inapplicabile).
Ho scoperto che una pagina di Wikipedia che descrive alcuni algoritmi di cache comuni, che è quasi quello che voglio. Sfortunatamente, questi sono un po 'di basso livello:
- Molti, come LRU o MRU, hanno senso solo se si hanno subroutine a cui si accede molte volte. Se ho un programma con un gran numero di subroutine, alcune delle quali non sono mai accessibili in una determinata esecuzione e alcune sono accessibili una o due volte, questa strategia non funzionerà mai perché non è in grado di accumulare dati sufficienti su ciò che è comunemente usato e cosa no.
- Altri, come CLOCK, sembrano avere a che fare con le peculiarità dell'implementazione, piuttosto che attaccare realmente la radice del problema.
- So che esiste una strategia in cui prima si profila un programma durante una prova, quindi si fornisce il profilo per il sistema operativo da ottimizzare di conseguenza. Tuttavia, dobbiamo ancora risolvere il problema di fornire un "esempio di utilizzo" veramente rappresentativo durante la creazione del profilo.
Quello che voglio davvero imparare è questo: quando riusciamo a sottrarre tutti gli aspetti tecnici dell'hardware e del software e parlare in un contesto puramente teorico, è possibile in qualche modo analizzare la struttura di un algoritmo, elaborare una strategia cache efficace per basato sulla comprensione di alto livello di ciò che sta facendo l'algoritmo?