Localidade de referência

Analisemos o seguinte pseudo-código para ver por que a localidade de referência funciona (veja Como funciona a programação em C para aprofundar-se no assunto):
Tela de exibição « Digitar um número entre 1 e 100 »
Ler dados do usuário
Inserir valor do usuário na variável X
Inserir valor 100 na variável Y
Inserir valor 1 na variável Z
Loop Y número de vezes
     Dividir Z por X
     Se o resto da divisão for = 0
     então exibir « Z é múltiplo de X »
     Acrescentar 1 a Z
Retornar ao loop
Fim  
Esse pequeno programa pede ao usuário para digitar um número entre 1 e 100. Ele lê o valor fornecido pelo usuário. Depois, o programa divide cada número entre 1 e 100 pelo número dado pelo usuário. Ele verifica se o resto é 0 (módulo da divisão). Em caso afirmativo, o programa exibe "Z é múltiplo de X" (por exemplo, 12 é múltiplo de 6), para cada número entre 1 e 100. Então o módulo termina.

Mesmo que você não saiba muito de programação de computadores, é fácil entender que nas 11 linhas desse programa, a parte do loop (linhas 7 a 9) são executadas 100 vezes. Todas as outras são executadas apenas uma vez. As linhas 7 a 9 serão executadas significativamente mais rápidas por causa do armazenamento em cache.

Esse programa é muito pequeno e cabe inteiramente no menor dos caches L1, mas suponhamos que o programa seja enorme. O resultado continua o mesmo. Quando você programa, muitas ações acontecem dentro de loops. Um processador de texto gasta 95% do tempo à espera da entrada de dados para mostrá-los na tela. Essa parte do programa do processador de textos está no cache.

Essa razão de 95% para 5% (aproximadamente) é o que denominamos localidade de referência, e é por isso que um cache funciona com tanta eficiência. É por isso também que um cache tão pequeno pode armazenar em cache com tanta eficiência um sistema de memória tão grande. É fácil ver por que não vale a pena sempre fabricar um computador com a memória mais rápida. Podemos conseguir 95% dessa eficiência por uma fração do suposto custo.

Para mais informações sobre armazenamento em cache e assuntos relacionados, veja os links na próxima página.