A Hierarquia de Memórias
denisfranco@furg.br
Maio 2013
1 A Hierarquia de memórias
Introdução
Princı́pio de funcionamento
2 Memórias cache
O desempenho da cache
3 Memória virtual
4 Arquiteturas recentes
Outline
1 A Hierarquia de memórias
Introdução
Princı́pio de funcionamento
2 Memórias cache
O desempenho da cache
3 Memória virtual
4 Arquiteturas recentes
SRAM
Alta velocidade
Baixa densidade (6T)
Alto custo
Volátil
SRAM
Alta velocidade
Baixa densidade (6T)
Alto custo
Volátil
DRAM
Média velocidade
Densidade maior que SRAM (1T)
Médio custo
Volátil
Magnéticas (HD)
Baixa velocidade
Alta densidade
Baixo custo
Não volátil
Magnéticas (HD)
Baixa velocidade
Alta densidade
Baixo custo
Não volátil
Flash
Média velocidade de leitura
Média densidade
Médio/baixo custo (1/10 DRAM)
Não volátil
Magnéticas (HD)
Baixa velocidade
Alta densidade
Baixo custo
Não volátil
Flash
Média velocidade de leitura
Média densidade
Médio/baixo custo (1/10 DRAM)
Não volátil
Escrita em blocos...
Magnéticas (HD)
Baixa velocidade
Alta densidade
Baixo custo
Não volátil
Flash
Média velocidade de leitura
Média densidade
Médio/baixo custo (1/10 DRAM)
Não volátil
Escrita em blocos...
Ciclo de vida de ≈ 100.000 escritas
Magnetic RAM
Magnetic RAM
3D Resistive RAM
Magnetic RAM
3D Resistive RAM
Phase change RAM
Magnetic RAM
3D Resistive RAM
Phase change RAM
Spin-transfer torque RAM
Magnetic RAM
3D Resistive RAM
Phase change RAM
Spin-transfer torque RAM
Para quando?
Hierarquia de memória
É a organização da memória em múltiplos nı́veis, com desempenhos,
custos e capacidades (tecnologias) diferentes, de forma a criar a ilusão de
uma memória de grande capacidade e alta velocidade, com um custo
próximo ao da memória mais acessı́vel.
Hierarquia de memória
É a organização da memória em múltiplos nı́veis, com desempenhos,
custos e capacidades (tecnologias) diferentes, de forma a criar a ilusão de
uma memória de grande capacidade e alta velocidade, com um custo
próximo ao da memória mais acessı́vel.
Hierarquia de memória
É a organização da memória em múltiplos nı́veis, com desempenhos,
custos e capacidades (tecnologias) diferentes, de forma a criar a ilusão de
uma memória de grande capacidade e alta velocidade, com um custo
próximo ao da memória mais acessı́vel.
Localidade de referências
Localidade de referências
Localidade espacial
Localidade temporal
Localidade de referências
Localidade espacial
Refere-se à grande probabilidade de acesso sequencial a posições
contı́guas do espaço de endereços do programa
Localidade temporal
Localidade de referências
Localidade espacial
Refere-se à grande probabilidade de acesso sequencial a posições
contı́guas do espaço de endereços do programa
Localidade temporal
Refere-se à grande probabilidade de acessos subsequentes às mesmas
posições no espaço de endereços do programa
Localidade de referências
Concentração/localidade de referências
CPU
Espaço de endereços
da memória principal
Localidade de referências
Concentração/localidade de referências
Trechos com
localidade de
CPU referências
Espaço de endereços
da memória principal
Localidade de referências
Concentração/localidade de referências
Trechos com
localidade de
CPU referências
Espaço de endereços
da memória principal
Localidade de referências
Transferência de blocos
CPU Blocos
Espaço de endereços
da memória principal
Localidade de referências
Transferência de blocos
CPU
Espaço de endereços
da memória principal
Localidade de referências
Transferência de blocos
CPU
Espaço de endereços
da memória principal
Localidade de referências
Transferência de blocos
CPU
Espaço de endereços
da memória principal
Localidade de referências
Transferência de blocos
CPU
Espaço de endereços
da memória principal
Localidade de referências
Transferência de blocos
Questões básicas:
Localidade de referências
Transferência de blocos
Questões básicas:
1 Onde colocar um novo bloco na memória mais rápida?
Localidade de referências
Transferência de blocos
Questões básicas:
1 Onde colocar um novo bloco na memória mais rápida?
2 Como encontrar um bloco na memória mais rápida?
Localidade de referências
Transferência de blocos
Questões básicas:
1 Onde colocar um novo bloco na memória mais rápida?
2 Como encontrar um bloco na memória mais rápida?
3 Qual bloco substituir em caso de necessidade?
Localidade de referências
Transferência de blocos
Questões básicas:
1 Onde colocar um novo bloco na memória mais rápida?
2 Como encontrar um bloco na memória mais rápida?
3 Qual bloco substituir em caso de necessidade?
4 Qual a estratégia de escrita?
Outline
1 A Hierarquia de memórias
Introdução
Princı́pio de funcionamento
2 Memórias cache
O desempenho da cache
3 Memória virtual
4 Arquiteturas recentes
Transferência de blocos
Endereço original 6= endereço na cache...
1 Onde colocar um novo bloco na memória mais rápida?
wn 1000
wn+1 1004
bloco b
00 wn+2 1008
04 wn+3 100C
bloco b+1
08 wn+4 1010
0C wn+5 1014
bloco b+1
10 wn+6 1018
14 Endereços na wn+7 101C
18 wn+8 1020 Endereços
memória
1C rápida bloco b+2 1024 originais
20 1028
24 wn+11 102C
28 wn+12 1030
2C bloco b+3 1034
30 1038
34 wn+15 103C
38 wn+16 1040
3C bloco b+4 1044
1048
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
endereço da linha
011111
Cache 100000
100001
linha 0 00
100010
linha 1 01
100011
linha 2 10
100100
linha 3 11
100101
100110
100111
101000
101001
bloco b+18 101010
endereço do bloco
palavra do bloco
Principal
bloco b 011000XX
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
endereço da linha
011111
Cache 100000
100001
00
100010
01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
endereço do bloco
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
Cache 100000
100001
00
bloco b+10 100010
01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
Cache 100000
100001
bloco b+10 00
bloco b+10 100010
01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
Cache 100000
100001
00
bloco b+10 100010
01
100011
10
100100
bloco b+10 11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
Cache 100000
100001
00
bloco b+10 100010
bloco b+10 01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
bloco do endereço 100010? 011100
011101
011110
011111
Cache 100000
100001
00
bloco b+10 100010
bloco b+10 01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
TAG Cache 100000
100001
00
bloco b+10 100010
bloco b+10 01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
TAG Cache 100000
100001
00
bloco b+10 100010
100010 bloco b+10 01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
TAG Cache 100000
100001
00
bloco b+10 100010
100010 bloco b+10 01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
Cache 100000
100001
00
bloco b+10 100010
01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Linha na cache
Principal
bloco b −−−−00
bloco b+1 −−−−01
bloco b+2 −−−−10
−−−−11
−−−−00
−−−−01
−−−−10
−−−−11
Cache −−−−00
−−−−01
00
bloco b+10 −−−−10
01
−−−−11
10
−−−−00
11
−−−−01
−−−−10
−−−−11
−−−−00
−−−−01
bloco b+18 −−−−10
Linha na cache
Principal
bloco b −−−−00
bloco b+1 −−−−01
bloco b+2 −−−−10
−−−−11
−−−−00
−−−−01
−−−−10
−−−−11
Cache −−−−00
−−−−01
00
bloco b+10 −−−−10
01
−−−−11
bloco b+10 10
−−−−00
11
−−−−01
−−−−10
−−−−11
−−−−00
−−−−01
bloco b+18 −−−−10
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
bloco do endereço 100010? 011100
011101
011110
011111
Cache 100000
100001
00
bloco b+10 100010
01
100011
bloco b+10 10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
bloco do endereço 100010? 011100
ou 000010? 011101
ou 111110? 011110
ou 101010? 011111
Cache 100000
100001
00
bloco b+10 100010
01
100011
bloco b+10 10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
TAG Cache 100000
100001
00
bloco b+10 100010
01
100011
bloco b+10 10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
TAG Cache 100000
100001
00
bloco b+10 100010
01
100011
1000 bloco b+10 10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
TAG Cache 100000
100001
00
bloco b+10 100010
01
100011
1000 bloco b+10 10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
Cache 100000
100001
00
bloco b+10 100010
01
100011
10
100100
11
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
011101
011110
011111
Cache 100000
100001
grupo 0 bloco b+10 100010
100011
grupo 1 100100
100101
100110
100111
101000
101001
bloco b+18 101010
grupo na cache
Principal
bloco b −−−−−0
bloco b+1 −−−−−1
bloco b+2 −−−−−0
−−−−−1
−−−−−0
−−−−−1
−−−−−0
−−−−−1
Cache −−−−−0
−−−−−1
grupo 0 bloco b+10 −−−−−0
−−−−−1
grupo 1 −−−−−0
−−−−−1
−−−−−0
−−−−−1
−−−−−0
−−−−−1
bloco b+18 −−−−−0
grupo na cache
Principal
bloco b −−−−−0
bloco b+1 −−−−−1
bloco b+2 −−−−−0
−−−−−1
−−−−−0
−−−−−1
−−−−−0
−−−−−1
Cache −−−−−0
−−−−−1
bloco b+10
grupo 0 bloco b+10 −−−−−0
−−−−−1
grupo 1 −−−−−0
−−−−−1
−−−−−0
−−−−−1
−−−−−0
−−−−−1
bloco b+18 −−−−−0
grupo na cache
Principal
bloco b −−−−−0
bloco b+1 −−−−−1
bloco b+2 −−−−−0
−−−−−1
−−−−−0
−−−−−1
−−−−−0
−−−−−1
Cache −−−−−0
−−−−−1
grupo 0 bloco b+10 −−−−−0
bloco b+10
−−−−−1
grupo 1 −−−−−0
−−−−−1
−−−−−0
−−−−−1
−−−−−0
−−−−−1
bloco b+18 −−−−−0
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
bloco do endereço 100010? 011101
011110
011111
TAG Cache 100000
100001
bloco b+10 100010
10001 bloco b+10
100011
100100
100101
100110
100111
101000
101001
bloco b+18 101010
Principal
bloco b 011000
bloco b+1 011001
bloco b+2 011010
011011
011100
bloco do endereço 100010? 011101
011110
011111
TAG Cache 100000
100001
bloco b+10 100010
10001 bloco b+10
100011
100100
100101
100110
100111
101000
101001
bloco b+18 101010
Associativo
Melhor aproveitamento da cache
Muito complexo para associatividade maior que 16
Direto
Pior aproveitamento da cache
Implementação simples
Grupo-associativo
Aproveitamento da cache próximo ao do associativo
Complexidade de implementação intermediária
Write-back
Average memory access time(AMAT ) = Hit time + Miss rate · Miss penalty
Average memory access time(AMAT ) = Hit time + Miss rate · Miss penalty
Average memory access time(AMAT ) = Hit time + Miss rate · Miss penalty
Average memory access time(AMAT ) = Hit time + Miss rate · Miss penalty
Otimização da cache
Otimização da cache
Otimização da cache
Otimização da cache
Otimização da cache
Otimização da cache
Otimização da cache
Redução da miss rate
Blocos maiores
Otimização da cache
Redução da miss rate
Blocos maiores
Otimização da cache
Redução da miss rate
Maior associatividade
Otimização da cache
Redução da miss rate
Maior associatividade
Otimização da cache
hit time x associatividade
Otimização da cache
hit time x associatividade
Otimização da cache
Consumo x associatividade
Otimização da cache
Consumo x associatividade
Otimização da cache
Redução da miss rate
Split caches
Arquitetura Harvard de memória
Otimização da cache
Desempenho x algoritmos de substituição
Otimização da cache
Desempenho x algoritmos de substituição
Otimização da cache
Redução da miss penalty
Caches multinı́vel
Otimização da cache
Redução da miss penalty
Caches multinı́vel
Otimização da cache
Redução da miss penalty
Caches multinı́vel
AMAT = Hit timeL1 + Miss rateL1 · (Hit timeL2 + Miss rateL2 · Miss penaltyL2 )
Otimização da cache
Redução da miss penalty
Caches multinı́vel
AMAT = Hit timeL1 + Miss rateL1 · (Hit timeL2 + Miss rateL2 · Miss penaltyL2 )
Otimização da cache
Sumário das técnicas
Otimização da cache
Sumário das técnicas
Outline
1 A Hierarquia de memórias
Introdução
Princı́pio de funcionamento
2 Memórias cache
O desempenho da cache
3 Memória virtual
4 Arquiteturas recentes
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Princı́pios de funcionamento
Memória virtual x memória cache
Páginas x segmentos
Caracterı́sticas:
Divisão de um programa:
Mapa da memória
Tabela de páginas:
Mapa da memória
Tabela de páginas:
Mapa da memória
Tabela de páginas:
Mapa da memória
Tabela de páginas:
Outline
1 A Hierarquia de memórias
Introdução
Princı́pio de funcionamento
2 Memórias cache
O desempenho da cache
3 Memória virtual
4 Arquiteturas recentes
ARM Cortex-A8
Split cache
ARM Cortex-A8
Split cache
L1 cache
32 KB, blocos de 64 bytes
Grupo-associativa com 4 vias
L2 cache
1 MB, blocos de 64 bytes
Grupo-associativa com 8 vias
TLB
32 entradas
Associativa
ARM Cortex-A8
ARM Cortex-A8
Minniespec benchmark.
ARM Cortex-A8
Minniespec benchmark.
Intel Core-i7
Por núcleo:
Intel Core-i7
Por núcleo:
L1 cache
32 KB + 32 KB, blocos de 64 bytes
Grupo-associativa com 4(I)/8(D) vias
Latência: 4 ciclos
L2 cache
256 KB, blocos de 64 bytes
Grupo-associativa com 8 vias
Latência: 10 ciclos
Compartilhada:
L3 cache
8 MB, blocos de 64 bytes
Grupo-associativa com 16 vias
Latência: 35 ciclos
TLB
128(I)/64(D)/512(L2) entradas
Grupo-associativa com 4 vias
Prof. Denis Franco (denisfranco@furg.br) Arquitetura de Computadores Maio 2013 47 / 47