ARQUITECTURA DE
COMPUTADORES
CAPÍTULO V
AULA II
Ricardo Mendão Silva
[email protected]
Índice
• O básico de caches
• Aceder à cache
• Hits
• Misses
• Cálculos de dimensão e mapeamento directo.
• Lidar com misses
• Cache performance
• Organização
• Níveis adicionais
Ricardo Mendão Silva
[email protected]
O básico de caches
• No nosso exemplo da biblioteca, a nossa secretária acaba por ser
a cache do sistema.
• A cache é assim, resumidamente, um lugar seguro para guardarmos
dados de que ainda vamos precisar.
• O nome cache surgiu a primeira vez para classificar a memória
extra que era colocada entre a memória RAM e a memória do
processador (registos).
Ricardo Mendão Silva
[email protected]
O básico de caches
• Como sabemos se determinada word existe na cache? Se existir,
como encontra-la?
• Se cada word poder ir para um local de memória especifico, o
método mais fácil será calcular a localização na cache com base
no endereço que a word tem em memória e aplicar assim o método
de mapeamento directo.
• Com mapeamento directo o mapeamento cada localização de memória
é mapeada directamente para uma localização da cache, seguindo
normalmente o formato:
Ricardo Mendão Silva
[email protected]
O básico de caches
• Considerando por exemplo que a dimensão da cache é uma potencia
de 2, pode-se mapear com base nos bits menos significativos dos
elementos de memória.
• Considerando uma cache com espaço para 8 elementos = 23 ,
considera-se os 3 bits menos significativos.
Ricardo Mendão Silva
[email protected]
O básico de caches
• No entanto, uma vez que cada entrada na cache pode conter dados
de diferentes localizações de memória, como sabemos qual contem?
• Para responder a esta pergunta utiliza-se o que se chama de tag.
• A tag é composta pelos números mais significativos que compõe o
endereço de memória, excepto os bits menos significativos que
constituem o endereço do bloco da cache.
• Esta tag é ela própria guardada na cache.
• Torna-se ainda necessário identificar os blocos válidos na
cache. Quando se inicia o sistema, nenhum bloco da cache tem
informação válida e como tal devem ser ignoradas. Mesmo durante
a execução, vários blocos podem-se manter vazios e como tal a
tag dos mesmos deve ser ignorada.
• Para isso utiliza-se um bit de validade, que só está activo caso
existe informação válida.
Ricardo Mendão Silva
[email protected]
O básico de caches
Aceder à cache
• Considerando uma sequência de 9 acesso de memória e uma cache de
8 blocos:
Ricardo Mendão Silva
[email protected]
O básico de caches
Aceder à cache
• Uma vez que cada entrada na cache é identificada primariamente
pelo índice, sendo esse índice composto por n bits existem 2𝑛
possibilidades.
• Assim, o número de elementos de uma cache deve ser sempre uma
potencia de base 2.
• O número total de bits necessários para a cache é calculado em
função do tamanho dos blocos de dados e dos endereços, uma vez
que a cache contem não só o espaço para os dados como também o
espaço para as tags.
Ricardo Mendão Silva
[email protected]
O básico de caches
Aceder à cache
• Na arquitectura MIPS cada word é
constituída por 32 bits.
• Utilizam-se os bits menos
significativos do endereço, para
referenciar cada word dentro de
um bloco.
• Considerando 2 bits de offset
ficam a restar 30 bits.
• Como a cache tem 1024 entradas
precisamos de 10 bits para o
índice.
• Ficando 20 bits disponíveis para
a tag.
Ricardo Mendão Silva
[email protected]
O básico de caches
Aceder à cache
• No entanto um bloco pode
conter mais que uma word.
• Nesse caso é necessário
guardar a quantidade
suficiente de bits menos
significativos do endereço
para os referenciar.
• Na imagem 512 bits dá para
guardar 16 words de 32
bits, ou seja, são
necessários 4 bits para
referenciar cada word.
Ricardo Mendão Silva
[email protected]
O básico de caches
Aceder à cache
• Considere-se o seguinte caso:
• Endereços de 32-bits
• Uma cache directamente mapeada
• O tamanho dessa cache é 𝟐𝒏 blocos, logo utilizam-se n bits no
índice.
• O tamanho do bloco é 𝟐𝒎 words.
• Existem 2 words por bloco
Assim, o tamanho da tag será:
32-(n + m)
O número total de bits da cache será:
2𝑛 x (tamanho do bloco + tag + bit validação)
Considerando um bloco com o tamanho 2𝑚 words, ou seja, 2𝑚+5 bits,
qual o tamanho total da cache?
𝟐𝒏 x ( (𝟐𝒎 x 32) + (32 - (n + m)) + 1
Ricardo Mendão Silva
[email protected]
O básico de caches
Aceder à cache
Exercício:
Qual o número total de bits de uma cache directamente
mapeada considerando um volume de 16KB de dados, blocos
de 4 words e endereços de 32 bits?
1º 16KB = 212 words = 4096 words
2º Como guardo 4 words por bloco e 4 = 22 (m = 2), logo 212 - 22 = 210 =
1024 entradas na cache, o que dá 10 bits para o índice (n = 10).
3º A tag terá 32 – (n + m ) = 32 – (10 + 2 ) = 20 bits
4º 210 x (4 x 32 + 20 + 1) = 210 * 149 = 149 KiB
Total de
entradas
Ricardo Mendão Silva
Tamanho do
bloco
Tag
bit validação
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a cache anterior, com m=2 e n=10, calcule em
que bloco ficará a word do endereço 6146.
1º 6146 = 1 1000 0000 0010
2º m=2, logo 10 significa que ficará na terceira posição do bloco.
3º n = 10, significa que o bloco será o 1000 0000 00, ou seja, 512
Ricardo Mendão Silva
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
00
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
Hit
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
00
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
Hit
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
00
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
Hit
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
00
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
Hit
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
00
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
Miss
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
01
010000
010001
010010
010011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
Miss
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
00
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Exercício:
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
Hit
000000, 000001, 000010, 000011, 010001, 000000, 000001
V
Tag
00
1
00
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
O básico de caches
Aceder à cache
Considerando a seguinte cache, calcule o número de hits e
misses para a seguinte sequência. Apresente ainda o
estado final da cache.
000000, 000001, 000010, 000011, 010001, 000000, 000001
Hits: 5
Misses:2
V
Tag
00
1
01
000000
000001
000010
000011
01
1
00
000100
000101
000110
000111
10
1
00
001000
001001
001010
001011
11
0
Ricardo Mendão Silva
Dados
[email protected]
Índice
• O básico de caches
• Aceder à cache
• Hits
• Misses
• Cálculos de dimensão e mapeamento directo.
• Lidar com misses
• Cache performance
• Organização
• Níveis adicionais
Ricardo Mendão Silva
[email protected]
O básico de caches
Lidar com Misses
• Sempre que ocorre um miss na cache, é da
responsabilidade da unidade de controlo, detectar o
mesmo e despoletar o mecanismo de acesso à memória.
• A unidade de controlo do CPU actua juntamente com
uma outra unidade responsável por ir à memória obter
os dados em falta para a cache.
• Entretanto, de modo a não gerar interrupções por
falta de dados, é inserido um stall no pipeline, de
modo a atrasar a execução da próxima instrução, por
forma a ter todos os dados necessários carregados em
cache.
• Processadores superescalares com execução out-oforder conseguem lidar com misses mais eficientemente
visto não necessitarem de esperar.
Ricardo Mendão Silva
[email protected]
O básico de caches
Lidar com Escrita
• Ao contrário da leitura a escrita é mais pertinente.
Imagine que se escreve somente na cache, deixando o
valor para o mesmo endereço diferente entre cache e
memória.
• Nesse caso diz-se que os dados são inconsistentes.
• Para resolver inconsistências utiliza-se uma
técnica, write-through, que permite escrever em
simultâneo, tanto na cache como na respectiva
memória.
• Concretizando, um store de MIPS, escreve tanto na
cache como no nível imediatamente abaixo desta.
Ricardo Mendão Silva
[email protected]
O básico de caches
Lidar com Misses em Escrita
• Apesar de resolver o problema de inconsistência,
escrever em dois níveis torna-se numa tarefa pesada
que afecta significativamente a performance.
• Como tal, uma técnica de optimização é utilizar um
buffer de escrita, para o qual o processador vai
colocando os dados a serem escritos e que depois vão
sendo passados para memória, sem afectar o
processamento da sequência de instruções.
• Caso o buffer de escrita esteja cheio, o CPU pode
efectuar stalls e esperar por espaço no buffer.
• Ainda assim, a frequência de escrita deverá ser
inferior á frequência que as memórias suportam.
Ricardo Mendão Silva
[email protected]
O básico de caches
Lidar com Misses em Escrita
• Em alternativa existe uma técnica que em vez de
write-through, implementa write-back.
• Write-back é uma técnica em que as escritas são
apenas efectuadas para a cache, numa primeira
instância.
• Só quando estas estão para ser substituídas na cache
é que o valor é actualizado na memória no nível
inferior.
Ricardo Mendão Silva
[email protected]
Índice
• O básico de caches
• Aceder à cache
• Hits
• Misses
• Cálculos de dimensão e mapeamento directo.
• Lidar com misses
• Performance da cache
• Organização
• Níveis adicionais
Ricardo Mendão Silva
[email protected]
Performance da cache
• Existem principalmente dois métodos para melhorar a
performance das caches:
1. Reduzir a taxa de misses com base na probabilidade em
blocos de memória competirem pela mesma localização na
cache – organização da cache.
2. Reduzir o miss penalty adicionando níveis de cache extra.
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• Assumindo que os Hits fazem parte do
durante a execução de uma aplicação,
que o tempo de CPU é igual à soma do
necessário para executar determinado
o tempo gasto nos acessos à memória,
tempo de CPU
podemos assumir
tempo
programa, mais
ou seja:
TempoCPU = ( Nº Ciclos relógio de execução + Nº Ciclos
relógio nos acessos à memória (stalls) ) * tempo do
ciclo de relógio
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• O número de ciclos de relógio gastos em stalls
durante os acessos à memória, podem ser divididos
em:
Nº Ciclos relógio nos acessos à memória (stalls) ) =
Nº ciclos na escrita + Nº ciclos na leitura
• 0 número de ciclos de leitura podem ser divididos
em:
Nº Ciclos leitura = Nº leituras/programa * miss rate *
miss penalty
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• O número de ciclos de relógio na gastos em stalls na
escrita provêm de dois casos:
• Misses de escrita que requerem que se obtenha o bloco da
memória.
• Buffer de escrita cheio, que obriga a aguardar por “vaga”.
• Assim:
Nº Ciclos escrita = (Nº escritas/programa * miss rate
* miss penalty) + stalls do Buffer
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• Se assumirmos que os ciclos de stalls gastos em
função do buffer de escrita, não são significativos,
podemos concluir que:
Nº Ciclos acesso à memória =
Nº acessos/programa * miss rate * miss penalty
Ou
Nº Ciclos acesso à memória =
Nº acessos/programa * nº misses / instruções * miss
penalty
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• As funções anteriores não consideram o tempo de
acesso à cache com sucesso, ou seja, o Hit Time.
• No entanto, se o Hit Time aumenta, toda a
performance irá diminuir.
• A razão mais directa para o aumento do Hit Time é o
próprio aumento da cache. Memórias maiores demoram
mais tempo a pesquisar.
• Para calcular o tempo médio de acesso (AMAT –
Average Memory Access Time) à memória, utiliza-se a
seguinte fórmula:
AMAT = Time for a Hit + Miss time * Miss penalty
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• Calcule o tempo médio de acesso à memória
considerando um processador com um ciclo de 1 ns, um
miss penalty de 20 ciclos, um miss rate por
instrução de 0.05 e um hit time de 1 ciclo.
AMAT = hit time + miss rate * miss penalty
AMAT = 1 + 0.05 * 20
AMAT = 2 ciclos ou 2ns
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• Ao contrário do método de mapeamento directo, onde
cada endereço é mapeado directamente para o seu
respectivo, na cache, existem outras técnicas mais
flexíveis e optimizadas.
•
O exemplo mais popular, extremo ao mapeamento
directo, dá pelo nome de associativismo total.
• No método associativo, um endereço de memória pode
ser mapeado para qualquer bloco da cache.
• Como tal, para pesquisar por uma entrada especifica,
é necessário correr toda a cache. Para isso é
utilizado hardware extra, próprio para a comparação
eficiente de endereços.
• Assim, este método não é aconselhado a caches de
grandes dimensões.
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
•
Para colmatar os problemas de ambas as soluções,
mapeamento directo e associativismo total, surgiu um
método hibrido, chamado associativismo por grupos,
que junta o melhor dos dois mundos.
• No associativismo por grupos os endereços são
mapeados directamente para grupos fixos de tamanho
n.
• Dentro de cada grupo a organização segue o método do
associativismo por grupos, o que significa que será
necessário pesquisar um endereço por comparação
dentro do seu grupo.
• No associativismo por grupos substitui-se sempre o
bloco referenciado há mais tempo.
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
•
Associativismo por grupos vs mapeamento directo vs
associativismo total.
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
•
Diferentes configurações de associativismo por
grupos.
Regra geral, aumentando o
nível de associativismo,
diminui a miss rate.
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
• Considere que existem três caches distintas de
blocos constituídos por 4 words. Uma cache é
totalmente associada, outra associada em grupos de
dois e a terceira mapeada directamente. Calcule o
número de misses para cada uma, considerando a
seguinte sequência de endereços: 0,8,0,6,8.
1º Determinar o sub-bloco onde cada endereço corresponde, considerando as 4 words
0 = 0000
6 = 0110
8 = 1000, logo o 0 e o 8 ficam no primeiro bloco e o 6 no terceiro bloco
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
2º Efectuar o mapeamento directo que é o mais simples
Endereço
Hit ou miss
Conteúdo dos blocos no final da sequência
1
2
3
0
miss
Mem[0]
8
miss
Mem[8]
0
miss
Mem[0]
6
miss
Mem[0]
Mem[6]
8
miss
Mem[8]
Mem[6]
4
Resultado mapeamento directo = 5 misses
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
3º Efectuar o método de associativismo por grupos. Dado que temos 2 grupos,
precisamos só do bit menos significativo para determinar em que grupo ficará cada
endereço. Como tanto o 0, 6 e 8 terminam em 0, todos ficarão no primeiro grupo.
4º Num associativismo em grupos de dois, existem duas divisões por grupo, assim:
Endereço
Hit ou miss
Conteúdo dos blocos no final da sequência
Set 0
Set 0
0
miss
Mem[0]
8
miss
Mem[0]
Mem[8]
0
hit
Mem[0]
Mem[8]
6
miss
Mem[0]
Mem[6]
8
miss
Mem[8]
Mem[6]
Set 1
Set 1
Resultado mapeamento directo = 4 misses e 1 hit
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
5º Por fim falta somente executar o mapeamento recorrendo ao associativismo total,
ou seja:
Endereço
Hit ou miss
Conteúdo dos blocos no final da sequência
1
2
3
0
miss
Mem[0]
8
miss
Mem[0]
Mem[8]
0
hit
Mem[0]
Mem[8]
6
miss
Mem[0]
Mem[8]
Mem[6]
8
hit
Mem[0]
Mem[8]
Mem[6]
4
Resultado mapeamento directo = 3 misses e 2 hit
Ricardo Mendão Silva
[email protected]
Performance da cache
Organização da cache
Concluindo o exercício anterior:
Misses
Hits
Mapeamento directo
5
0
Associativismo dois-grupos
4
1
Associativismo total
3
2
Denote-se no entanto que se tivéssemos 8 blocos na cache também
existiriam 2 hits no associativismo dois-grupos ou se tivéssemos 16 blocos
o mesmo acontecia no caso do mapeamento directo.
Ricardo Mendão Silva
[email protected]
Performance da cache
Níveis extra
• O segundo método para optimizar a performance de
utilização das caches é utilizar mais que um nível
de cache entre o CPU e a memória.
• Aumentar os níveis de cache vem colmatar a cada vez
maior diferença entre os processadores super-rápidos
e as memórias DRAM.
• Caso ocorra um miss na primeira cache, é consultada
a segunda cache, com um tempo de resposta igual ao
acesso a esta segunda cache, que normalmente está
inserida no mesmo chip da primeira.
• Caso o endereço não esteja em nenhuma das caches o
miss penalty é superior ao normal.
Ricardo Mendão Silva
[email protected]
Performance da cache
Níveis extra
• O design de um sistema com múltiplas caches é
diferente dum sistema de cache única.
• Comparativamente, num sistema multi-cache, a
primeira cache é mais pequena que uma cache única,
com o objectivo de minimizar o hit time.
•
• Em contrapartida, a cache de nível 2 é
significativamente maior que uma cache única, de
modo a minimizar a miss rate.
Ricardo Mendão Silva
[email protected]
Próxima aula
• Hierarquia de memória dependente.
• Máquinas Virtuais.
• Memória Virtual
• Paralelismo e Hierarquia de memória
Ricardo Mendão Silva
[email protected]
Dúvidas e Questões
Ricardo Mendão Silva
Junho 2014
[email protected]
Ricardo Mendão Silva
[email protected]