CPU Design: Una cache per tutti i gusti

Cache”, in inglese, significa letteralmente “nascondiglio segreto”, o “scorta segreta”. In generale, fa pensare ad un luogo piccolo in cui mettere al sicuro oggetti di valore. Sostanzialmente, questo significato vale anche per le cache che si trovano in un computer: si tratta di piccole memorie in cui salvare istruzioni e dati (per così dire) “importanti”, dove in questo contesto “importanti” significa che queste istruzioni e dati hanno un certo valore ai fini dell’elaborazione in corso. Vedremo in questo articolo per quale strano motivo mettersi da parte un po’ di istruzioni o dati possa essere un vantaggio, e soprattutto come scegliere cosa mettere nella cache e come scegliere la cache più adatta ai nostri scopi. Un nascondiglio per del vino d’annata non potrà essere lo stesso che per dei gioielli di famiglia o una collezione di francobolli.

L’ARTE DI PREPARARSI LA CENA - REPRISE

Ci sono due motivi fondamentali per cui l’algoritmo che più o meno tutti usiamo per prepararci la cena funziona. Il primo è che, quale che sia la ricetta che state tentando di eseguire, è probabile che dobbiate usare certi ingredienti più di una volta. Pensate al sale, ad esempio, o all’acqua o al vino che usate per evitare che la carne bruci, o per allungare un sugo. Se portate il sale nel piano accanto ai fornelli è perché prevedete di usarlo spesso e vi torna comodo averlo lì accanto.

Il secondo è che tutti siamo (o tentiamo di essere) più o meno (all’incirca) ordinati, e tendiamo a classificare le cose per tipo. Il sale probabilmente l’avrete lasciato accanto al pepe, e le spezie a ruota. Se amate dipingere, è probabile che abbiate lasciato i pennelli nei paraggi dei colori. Se portate il sale accanto al piano cottura, è probabile che vi porterete dietro anche il pepe: fate un unico viaggio dalla dispensa al piano cottura e portate due ingredienti affini in un colpo solo. Quando, di lì a poco, dovrete usare il pepe, ve lo troverete già a portata di mano.

Questi indubbi fatti della vita vanno sotto il nome altisonante di “principio di località”, e il principio di località è esattamente il motivo per cui le cache funzionano. Se la CPU sta eseguendo una certa istruzione, c’è la seria possibilità che di lì a poco riutilizzi la stessa istruzione (capita se sta eseguendo un ciclo, ad esempio), e la quasi certezza che la successiva istruzione da elaborare si trovi nei paraggi di quella corrente, ad esempio all’indirizzo successivo, o qualche locazione dopo. E i problemi che si hanno con le cache sono esattamente gli stessi che si hanno con il piano cottura. Nel momento in cui dovete trovare qualcosa, come lo andate a cercare? Poi, lo spazio lì sopra è limitato, e non potete metterci tutto quello che vi serve: quando lo spazio finisce, cosa riportate nella dispensa per fare posto al nuovo ingrediente? E se invece un po’ di posto ci fosse, dove mettereste il nuovo ingrediente? Per quanto vi possa piacere cucinare, è probabile che vi piaccia molto di più mangiare, quindi vorrete che la preparazione della cena sia la più indolore possibile, il che si traduce nel fare la minor fatica possibile. A sua volta, questo significa (anche) evitare di passare la serata a fare la spola tra il piano cottura e la dispensa, e quindi rispondere a queste domande in modo che la gestione della vostra cache sia la più efficiente possibile. Vediamo quindi quali sono le scelte a vostra disposizione.

OGNI COSA AL SUO POSTO

Dunque, lì accanto ai fornelli ci sono una serie di bottigliette di spezie, che ai vostri occhi sembrano tutte uguali. Foglioline tritate, più o meno verdi. Come distinguete l’origano dalla maggiorana? Solitamente, prendendo la bottiglietta e andando a leggere l’etichetta. Quindi, per sapere se l’istruzione che dovete eseguire si trova o meno nella cache, vi basta associare un’etichetta, un tag, all’istruzione stessa, un qualcosa (diciamo un numero) che vi permetta di identificare immediatamente e in maniera univoca ogni istruzione. La scelta ovvia per il tag è l’indirizzo di memoria in cui l’istruzione risiede. È la scelta più naturale, anche perché è tutto ciò che la CPU sa della nuova istruzione che deve eseguire.

 

Figura 1: Fully associative cache.

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3220 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici e potrai fare il download in formato PDF eBook e Mobi per un anno. ABBONATI ORA, è semplice e sicuro.

Scrivi un commento

Send this to a friend