Cache - Thoth

Propaganda
Cache
Ezequiel Conde
[email protected]
Como funciona?
Read Hit
Write Hit
Read Miss
Write Miss
Porque é que a cache resulta?
for (i = 0; i < M; ++i)
for (j = 0; j < N; ++j)
x[i][j] = x[i][j] + K;
Código - a instrução assinalada é executada repetidamente M x N vezes
x[0][0], x[0][1], x[0][2] , x[0][3]
Dados - carregamento preditivo
● carregar mais que o necessário no imediato
● o carregamento em bloco é mais eficiente
M=1
● o acesso à memória cache é mais rápido
N=3
N=2
M=0
N=1
N=0
Princípio da localidade
● localidade temporal
● uso repetitivo no tempo - código dos ciclos; variáveis muito usadas
● localidade espacial
● execução sequencial - o código executa em endereços crescentes até ao jump
● carregamento preditivo - variáveis localizadas proximamente
30 de maio de 2016
Cache
3
Arquitetura da Cache
A cache é uma coleção de linhas.
Uma linha contém:
●
um bloco de dados (32 ou 64 bytes);
●
o endereço de memória desse bloco (tag);
●
indicação de ocupada (valid bit).
Dado um endereço de memória, como obter a localização na cache?
Função de mapeamento(endereço de memória) -> localização na cache
● direct
● associative
● set-associative
30 de maio de 2016
Cache
4
Arquitetura da Cache
Encontrada a localização, como saber se está na cache?
● A linha de cache contém o bloco e o endereço de memória - tag
● Os dados procurados estão na cache se a tag for igual ao endereço pretendido.
Está na cache! - cache hit, hit rate
●
●
Não está na cache! - cache miss, miss rate
●
●
●
compulsory miss or could miss
conflict miss
capacity miss
É preciso ler da memória - ler um bloco (32 ou 64 bytes).
O bloco é depositado numa linha de cache.
Onde colocar o bloco?
● Depende da função de mapeamento.
● Se não existir lugar disponível há que substituir - política de substituição.
30 de maio de 2016
Cache
5
Mapeamento direto
A linha de cache é selecionada com uma função direta do endereço.
A parte do endereço usada para escolher a linha são os bits de menor peso
a seguir ao endereço do byte dentro do bloco.
Considerando o caso de uma cache de 1 MByte com blocos de 64 Byte.
1MB / 64B = 16384 linhas (log216384 = 14)
tag
31
linha
2019
Endereço pretendido
byte
6 5
0
Um dado endereço só pode usar uma dada linha de cache.
Isso pode significar uma grande desvantagem se for necessário aceder a dois
endereços que correspondem à mesma linha - conflict ou collision misses.
30 de maio de 2016
Cache
6
Mapeamento associativo
Qualquer linha de cache pode conter qualquer bloco.
É necessário pesquisar em todas as linhas por uma tag igual à do endereço
pretendido.
Considerando o caso de uma cache de 1 MByte com blocos de 64 Byte:
todos os bits a partir do endereço do byte no bloco pertencem à tag.
tag
31
byte
6 5
Endereço pretendido
0
Não há conflict misses mas a pesquisa é dispendiosa, em material e em tempo.
30 de maio de 2016
Cache
7
Mapeamento associativo por conjunto
tag
31
30 de maio de 2016
set
2019
Endereço pretendido
byte
6 5
Cache
0
8
Políticas de substituição
Direct map não requer processamento
Idealmente deve-se substituir a última a ser necessária no futuro próximo.
Como prever as futuras necessidades? aplicar o principio da localidade.
●
Escolher a não usada há mais tempo (LRU, pseudo LRU)
●
Escolher aleatoriamente (bons resultados para sets grandes)
●
Escolher a mais antiga (FIFO, ring buffer)
●
Escolher a usada com menos frequência (contador em cada linha)
30 de maio de 2016
Cache
9
Políticas de escrita
●
●
Write-through
A memória principal é atualizada em simultâneo com a escrita na cache.
write-back
A escrita é realizada apenas na cache a atualização da memória principal
é realizada posteriormente.
Quando atualizar a memória em write-back? Na altura da substituição.
A substituição da linha será mais demorada.
Para evitar escrever o bloco na memória principal, no caso do processador
não ter realizado qualquer escrita no bloco, é acrescentado à linha o dirty bit
30 de maio de 2016
Cache
10
Operações de leitura
30 de maio de 2016
Cache
11
Operações de escrita
30 de maio de 2016
Cache
12
Download