Sistemas de Computação
Tecnologia de memória/Memória cache
Tecnologia de memória/Memória cache
Sistemas de Computação
• Acesso Randômico:– “Randômico” é bom: tempo de acesso igual para todas localidades– DRAM: Dynamic Random Access Memory
• Alta densidade, baixa potência, barata (1x), lenta(10x)• Dynamic: precisa ser “refrescada” regularmente
– SRAM: Static Random Access Memory• Baixa densidade, alta potência, cara (100x), rápida (1x)• Static: conteúdo dura “para sempre”(até ter energia)
• Tecnologia de Acesso “Não-tão-randômica”:– Tempo de acesso varia de localidade para localidade– Exemplos: Disco, CDROM
Tecnologia para Memória
Sistemas de Computação
• Tecnologia de Acesso Seqüencial: tempo de acesso proporcional à localidade (ex.,Fita)
• Tecnologia de acesso randômico:– Memória Principal: DRAMs + Caches: SRAMs
Tecnologia para Memória
Sistemas de Computação
Random-Access Memory (RAM)
• Características principais– Unidade básica de armazenamento é a célula (um bit por célula)– Vários chips RAM formam uma memória
• Static RAM (SRAM)– Cada célula armazena um bit com circuito de seis transistores– Retém valor enquanto estiver ligada– Relativamente menos sensível a ruídos– Mais rápida e cara que DRAM
• Dynamic RAM (DRAM)– Cada célula armazena um bit com capacitor e transistor– Valor tem que ser atualizado cada 10-100 ms– Sensível a ruídos– Mais lenta e barata que SRAM
Sistemas de Computação
SRAM vs DRAM
Tran. Tempopor bit de acesso Persistente? Sensível? Custo Aplicações
SRAM 6 1X Sim Não 100x memórias cache
DRAM 1 10X Não Sim 1X memóriasprincipais
Sistemas de Computação
Organização convencional da DRAM
• d x w DRAM:– dw bits organizados como d supercélulas de tamanho w bits
colunas
linhas
0 1 2 3
0
1
2
3
Buffer de linha interno
16 x 8 DRAM chip
ender
dados
supercélula(2,1)
2 bits/
8 bits/
Controladorde
memória(para CPU)
Sistemas de Computação
Lendo supercélula (2,1) da DRAM
16 x 8 DRAM chip
colunas
linhas
RAS = 20 1 2 3
0
1
2
Buffer de linha interno
3
end
dados
2/
8/
Controladorde
memória
Sistemas de Computação
Lendo supercélula (2,1) de DRAM
colunas
linhas
0 1 2 3
0
1
2
3
Buffer de linha interno
16 x 8 DRAM chip
CAS = 1
end
dados
2/
8/
Controladorde
memória
supercélula (2,1)
supercélula (2,1)
Para CPU
Sistemas de Computação
Módulos de memória
: supercélula (i,j)
módulo de memóriade 64 MBconsistindo deoito 8Mx8 DRAMs
end (linha = i, col = j)
Controladorde memória
DRAM 7
DRAM 0
031 78151623243263 394047485556 0
bits0-7
bits8-15
bits16-23
bits24-31
bits32-39
bits40-47
bits48-55
bits56-63
64-bit doubleword
Sistemas de Computação
Enhanced DRAMs
• Dram aprimoradas derivam da DRAM básica– Fast page mode DRAM (FPM DRAM)
• Acesso a linha com [RAS, CAS, CAS, CAS, CAS] ao invés de [(RAS,CAS), (RAS,CAS), (RAS,CAS), (RAS,CAS)].
– Extended data out DRAM (EDO DRAM)• FPM DRAM melhorada
– Synchronous DRAM (SDRAM)• Trabalha com clock ao invés de ser assíncrona
– Double data-rate synchronous DRAM (DDR SDRAM)• Melhoria da SDRAM
– Video RAM (VRAM)• Semelhante à FPM DRAM• Dual ported (permite leituras e escritas concorrentes)
Sistemas de Computação
Memórias não voláteis
• DRAM e SRAM são voláteis, perdem informação quando desligadas
• Memórias não voláteis retêm valor mesmo desligadas– Nome genérico read-only memory (ROM), mas também podem ser
modificadas
• Tipos de ROMs– Programmable ROM (PROM)– Eraseable programmable ROM (EPROM)– Electrically eraseable PROM (EEPROM)– Flash memory
• Firmware– Programa armazenado em uma ROM
• Código de boot, BIOS (basic input/ouput system)• placas gráficas, controladores de disco
Sistemas de Computação
Estrutura típica de barramento conectando CPU e memória
• Um barramento é uma coleção de fios paralelos que carregam endereço, dados e sinais de controle
memóriaprincipal
Ponte de E/S
Interface debarramento
ALU
registradores
CPU
barramentodo
sistema barramento de memória
Sistemas de Computação
Geometria dos discos
• Um disco consiste de pratos, cada qual com duas superfícies
• Cada superfície consiste de anéis concêntricos denominados trilhas.
• Cada trilha consiste de setores separados por espaços.
eixo
superfícietrilhas
trilha k
setores
espaços
Sistemas de Computação
Discos com múltiplos pratos
• Trilhas alinhadas formam um cilindro
superfície 0superfície 1superfície 2superfície 3superfície 4superfície 5
cilindro k
eixo
prato 0
prato 1
prato 2
Sistemas de Computação
Capacidade do disco
• Capacidade: número máximo de bits que podem ser armazenados expresso em gigabytes (1 GB = 109)
• Fatores que determinam a capacidade– Densidade de gravação (bits/in): número de bits que podem ser gravados
em 1 polegada de uma trilha– Densidade de trilha(trilhas/in): número de trilhas que podem existir em um
segmento radial– Densidade de armazenamento (bits/in2): produto da densidade de gravação
com densidade de trilha
• Disco modernos particionam as trilhas em conjuntos disjuntos denominados zonas de armazenamento
– Cada trilha em uma zona possui o mesmo número de setores, determinado pela circunferência da trilha mais interna
– Cada zona possui um número diferente de setores/trilha
Sistemas de Computação
Calculando capacidade de disco
• Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x(# pratos/disco)
• Exemplo:– 512 bytes/setor– 300 setores/trilha (em média)– 20.000 trilhas/superfície– 2 superfícies/prato– 5 pratos/disco
• Capacidade = 512 x 300 x 20000 x 2 x 5= 30.720.000.000= 30,72 GB
Sistemas de Computação
Operação do disco
A superfície dodisco gira com uma velocidade de rotação constante
spindle
O braço pode posicionar acabeça sobre qualquer trilha através de um movimento radial
A cabeça de leitura/escritaestá ligada ao final do braçoe flutua sobre a superfíciedo disco em cima de umafina camada de ar
spindle
spindle
spin
dle
eixo
Sistemas de Computação
Operação de disco com múltiplos discos
braço
cabeças de leitura/escritase movem em conjuntode cilindro para cilindro
eixo
Sistemas de Computação
Tempo de acesso ao disco
• Tempo médio de acesso a um setor desejado:– Tacesso = Tmed procura + Tmed rotação + Tmed transferência
• Tempo de procura (Tmed procura)– Tempo para posicionar as cabeças no clindro que contém o setor desejado– Típico Tmed procura = 9 ms
• Latência rotacional (Tmed rotação)– Tempo de espera para que o primeiro bit do setor passe pela cabeça– Tmed rotação = 1/2 x 1/RPMs x 60 seg/1 min
• Tempo de transferência (Tmed transferência)– Tempo para ler os bits do setor – Tmed transferência = 1/RPM x 1/(med # setores/trilha) x 60 segs/1 min.
Sistemas de Computação
Exemplo
• Dados:– Velocidade de rotação= 7.200 RPM– Tempo médio de procura = 9 ms.– Med # setores/trilha = 400.
• Teremos:– Tmed rotação = 1/2 x (60 segs/7200 RPM) x 1000 ms/seg = 4 ms.– Tmed transferência = 60/7200 RPM x 1/400 segs/trilha x 1000 ms/seg =
0.02 ms– Tacesso = 9 ms + 4 ms + 0.02 ms
• Pontos importantes:– Tempo de acesso dominado pelo tempo de procura e latência rotacional– Tempo de acesso da SRAM é 4 ns/doubleword, DRAM por volta de 60 ns
• Disco é aprox. 40.000 vezes mais devagar que SRAM, e 2.500 vezes mais devagar que DRAM
Sistemas de Computação
Blocos lógicos
• Discos modernos apresentam uma visão abstrata mais simples da geometria complexa de setores:
– O conjunto de setores disponíveis é modelado como uma seqüência de blocos lógicos de tamanho b
• O mapeamento entre os blocos lógicos e físicos érealizado pelo hardware/firmware dos controladores de disco
• Permite que o controlador separe cilindros sobressalentes para cada zona
Sistemas de Computação
Barramento de E/S
memóriaprincipal
ponte de E/S
interface de barramento
ALU
registradoresCPU
barramentodo sistema
barramentode memória
controladorde disco
adaptadorgráfico
controlador USB
mouse teclado monitordisco
barramento de E/SSlots de expansãopara outros dispositivos tais como adaptadores de rede
Sistemas de Computação
Tendências de armazenamento
métrica 1980 1985 1990 1995 2000 2000:1980
$/MB 8,000 880 100 30 1 8,000acesso (ns) 375 200 100 70 60 6tam. típico(MB) 0.064 0.256 4 16 64 1,000
DRAM
métrica 1980 1985 1990 1995 2000 2000:1980
$/MB 19,200 2,900 320 256 100 190acesso (ns) 300 150 35 15 2 100
SRAM
métrica 1980 1985 1990 1995 2000 2000:1980
$/MB 500 100 8 0.30 0.05 10,000acesso (ms) 87 75 28 10 8 11tam. típico (MB) 1 10 160 1,000 9,000 9,000
Disco
Sistemas de Computação
Relógios de CPU
1980 1985 1990 1995 2000 2000:1980processador 8080 286 386 Pent P-IIIfreqüência (MHz) 1 6 20 150 750 750tempo de ciclo(ns) 1,000 166 50 6 1.6 750
Sistemas de Computação
O gap memória-CPU
110
1001,000
10,000100,000
1,000,00010,000,000
100,000,000
1980 1985 1990 1995 2000
year
ns
Disk seek timeDRAM access timeSRAM access timeCPU cycle time
Sistemas de Computação
Princípio da localidade
• Programas tendem a reutilizar dados e instruções perto daqueles que foram utilizados recentemente
• Localidade temporal: Itens recentemente referenciados irão ser provavelmente referenciados em futuro próximo
• Localidade espacial: Itens com endereços próximos tendem a ser referenciados em instantes de tempo próximos
Sistemas de Computação
Exemplo de localidade
Exemplo de localidade• Dados
– Acessar elementos em série (padrão de referência passo 1):
– Referência à sum em cada iteração:
• Instruções– Instruções executadas em
seqüência: – Passa pelo loop
repetidamente:
sum = 0;for (i = 0; i < n; i++)
sum += a[i];return sum;
Localidade espacial
Localidade espacial
Localidade temporal
Localidade temporal
Sistemas de Computação
Exemplo de localidade
• Pergunta: A função abaixo tem boa localidade ?
int sumarrayrows(int a[M][N]){
int i, j, sum = 0;
for (i = 0; i < M; i++)for (j = 0; j < N; j++)
sum += a[i][j];return sum
}
Sistemas de Computação
Exemplo de localidade
• E esta ?
int sumarraycols(int a[M][N]){
int i, j, sum = 0;
for (j = 0; j < N; j++)for (i = 0; i < M; i++)
sum += a[i][j];return sum
}
Sistemas de Computação
Exemplo de localidade
• Pergunta: É possível trocar os loops abaixo de modo que a função acesse o array de 3 dimensões com um padrão de referência de passo 1 ?
int sumarray3d(int a[M][N][N]){
int i, j, k, sum = 0;
for (i = 0; i < M; i++)for (j = 0; j < N; j++)
for (k = 0; k < N; k++)sum += a[k][i][j];
return sum}
Sistemas de Computação
Hierarquia de memórias
• Algumas propriedades fundamentais e permanentes de hardware e software:
– Tecnologias rápidas para armazenamento custam mais por byte – O gap entre as velocidades de CPU e memória principal está
aumentando– Programas bem escritos tendem a ter boa localidade
• A partir destes fatores surge a idéia de organizar a memória e sistemas de armazenamento como uma hierarquia de memórias.
Sistemas de Computação
Exemplo de hierarquia de memórias
Discos locais guardam arquivos obtidos de discos em servidoresremotos
Memória principal guarda blocos de disco obtidos de discos locais
regson-chip L1
cache (SRAM)
memória principal(DRAM)
armazenamento secundário local(discos locais)
Dispositivosmaiores,
mais lentos, e
mais baratos (por byte)
armazenamento secundário remoto(sistemas de arquivos distribuídos, servidores Web)
off-chip L2cache (SRAM)
Cache L1 guarda linhas de cache obtidas da cache L2
registradores da CPU guardam palavras obtidas da cache L1
Cache L2 guarda linhas de cache obtidas da memória principal
L0:
L1:
L2:
L3:
L4:
L5:
Dispositivosmenores,
mais rápidos,e
mais caros(por byte)
Sistemas de Computação
Caches
• Cache: Um dispositivo menor e mais rápido que age como uma plataforma de acesso para um subconjunto de dados de um dispositivo maior e mais lento
• Idéia fundamental:– Para cada k, o dispositivo mais rápido e menor no nível k serve
com uma cache para um dispositivo maior e mais lento no nível k+1
• Porque funciona ?– Programas tendem a acessar dados no nível k mais freqüentemente
que no nível k+1 – Então, o armazenamento em k+1 pode ser mais lento e portanto
maior e mais barato por bit– Resultado: Uma memória que custa tão barato quanto o
dispositivo mais barato, mas que fornece dados para programas emuma taxa perto do dispositivo mais rápido
Sistemas de Computação
Caching na hierarquia de memórias
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Dispositivo maior, mais lento,mais barato do nível k+1 éparticionado em blocos
Dados são copiados entreníveis em blocos
8 9 14 3Dispositivo menor, mais rápido,mais caro no nível k armazenasubconjunto de blocos do nível k+1
Nível k:
Nível k+1: 4
4
4 10
10
10
Sistemas de Computação
Pede12
Conceitos gerais de caching
• Programa precisa do objeto d, que está armazenado em algum bloco b
• Acerto de cache (hit)– Programa encontra b na cache nível k. E.x.,
bloco 14.
• Falta de cache (miss)– b não está no nível k, então a cache do nível
k precisa pegar o bloco do nível k+1. Ex., bloco 12.
– Se a cache do nível k está cheia, então algum bloco corrente terá que sair para dar lugar ao novo. Quem será a vítima?
• Política de colocação: onde o novo bloco deve ir ? Ex., b mod 4
• Política de substituição: qual bloco deve sair ? Ex., LRU
9 3
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Nívelk:
Nível k+1:
1414
12
14
4*
4*12
12
0 1 2 3
Pede12
4*4*12
Sistemas de Computação
• Acerto (hit): dado presente em algum bloco do nível mais alto (exemplo: Bloco X)
– Taxa de acertos: a fração de acessos à memória encontrados no nível mais alto– Tempo de acerto: Tempo para acessar nível mais alto que consiste de:
Tempo de acesso à memória + Tempo para determinar acerto
Terminologia para Hierarquia de Memória
Nível Mais BaixoMemóriaNível Mais Alto
MemóriaPara o Processador
Do ProcessadorBloco X
Bloco Y
Sistemas de Computação
• Falta (miss): dado precisa ser recuperado de um bloco localizado em um nível mais baixo (Bloco Y)
– Taxa de faltas = 1 - (Taxa de acertos)– Penalidade por falta: Tempo para substituir um bloco de nível mais alto +
Tempo para enviar informação ao processador
• Tempo de acerto << Penalidade por falta (nível mais alto menor e com memória mais rápida)
Terminologia para Hierarquia de Memória
Nível Mais BaixoMemóriaNível Mais Alto
MemóriaPara o Processador
Do ProcessadorBloco X
Bloco Y
Sistemas de Computação
Conceitos gerais de caching
• Tipo de faltas:– Falta compulsória
• Ocorrem porque a cache está vazia.– Falta por conflito
• Ocorrem quando múltiplos objetos de dados são mapeados em um mesmo bloco no nível k
• E.g. Suponha que bloco i seja referenciado por i mod 4 no nível k, então as referências aos blocos 0, 8, 0, 8, 0, 8, ... sempre acarretarão faltas
– Falta por capacidade• Ocorrem quando o número de blocos ativos da cache é maior
que a capacidade da cache.
Sistemas de Computação
Memórias cache
• CPU procura por dados em L1, depois emL2 e finalmente na memória principal
memóriaprincipal
ponte E/S
interface debarramentoL2 cache
ALU
registradoresCPU
barramento decache
barramento de sistema
barramento dememória
L1 cache
Sistemas de Computação
Inserindo Cache L1 entre CPU e memória principal
a b c dbloco 10
p q r sbloco 21
...
...
w x y zbloco 30
...
A memória principal possui espaço para vários blocos de 4 palavras
A cache L1 tem espaço para dois blocos de 4 palavras
Os registradores da CPU possuem espaço para 4 palavras de 4 bytes
A unidade de transferência entre a cache e a memória principal é um bloco de 4 palavras(16 bytes).
A unidade de transferência entre os registradores da CPU e a cache é um bloco de 4 bytes.
linha 0linha 1
Sistemas de Computação
Organização geral da memória cache
• • • B–110
• • • B–110
valid
valid
tag
tagconj. 0:
B = 2b bytespor bloco de cache
E linhas por conjunto
S = 2s sets
t bits para tag por linha
1bit válidopor linha
Tamanho da cache: C = B x E x S bytes
• • •
• • • B–110
• • • B–110
valid
valid
tag
tagconj. 1: • • •
• • • B–110
• • • B–110
valid
valid
tag
tagconj. S-1: • • •
• • •
Sistemas de Computação
Endereçamento de cache
t bits s bits b bits
0m-1
<tag> <índ. conj.> <offset>
Endereço A:
• • • B–110
• • • B–110
v
v
tag
tagconj.0: • • •
• • • B–110
• • • B–110
v
v
tag
tagconj 1: • • •
• • • B–110
• • • B–110
v
v
tag
tagconj. S-1:
• • •
• • •
A palavra no endereço A está na cache se os bits de tag em uma das linhas válidasno conjunto <ind. conj.> são idênticosaos bits do campo <tag>.
O conteúdo da palavra começa no deslocamento de <offset> bytes a partir do início do bloco
Sistemas de Computação
Cache mapeada diretamente
• Forma mais simples
• Caracterizada por ter uma linha por conjunto
valid
valid
valid
tag
tag
tag
• • •
conj. 0:
conj. 1:
conj. S-1:
E=1 linha por conjuntobloco da cache
bloco da cache
bloco da cache
Sistemas de Computação
Accesso a caches mapeadas diretamente
• Seleção do conjunto feita pelos bits de índice de conjunto
conj. 0:
conj. 1:
conj. S-1:0
t bits s bits0 0 0 0 1
m-1
b bits
tag ind. conj offset
conj. selecionadovalid
valid
valid
tag
tag
tag
• • •
bloco da cache
bloco da cache
bloco da cache
Sistemas de Computação
Accesso a caches mapeadas diretamente
• Encontre uma linha válida no conjunto selecionado com campo tag idêntico a bits de tag e extrai a palavra desejada
1
t bits s bits100i0110
0m-1
b bits
tag ind. conj. offset
conj. (i) selecionado:
(3) Se (1) e (2), então acerto,e offset
selecionao byte inicial.
=1? (1) O bit válido tem que ser 1
= ?(2) Os bits de tags na linha
da cache tem que casarcom os bits de tag do
endereço
0110 w3w0 w1 w2
30 1 2 74 5 6
Sistemas de Computação
Exemplo de cache mapeada diretamente
M=endereço de 16 bytes, B=2 bytes/bloco, S=4 conj., E=1 linha/conj.Acessos a endereços (leituras):0 [00002], 1 [00012], 13 [11012], 8 [10002], 0 [00002]
xt=1 s=2 b=1
xx x
1 0 m[1] m[0]v tag data
0 [00002] (miss)
(1)1 0 m[1] m[0]v tag data
1 1 m[13] m[12]
13 [11012] (miss)
(3)
1 1 m[9] m[8]
v tag data8 [10002] (miss)
(4)
1 0 m[1] m[0]v tag data
1 1 m[13] m[12]
0 [00002] (miss)
(5)
0 M[0-1]1
1 M[12-13]1
1 M[8-9]1
1 M[12-13]1
0 M[0-1]1
1 M[12-13]1
0 M[0-1]1
Sistemas de Computação
Porque utilizar bits do meio comoíndice?
Indexação por bits mais significativos
– Linhas de memória adjacentes podem ser mapeadas no mesmo lugar (mau uso da localidade espacial)
Indexação por bits do meio– Linhas consecutivas da memória
são mapeadas em linhas diferentes da cache
Cache de 4 linhas00011011
Mais significativos Meio0000000100100011010001010110011110001001101010111100110111101111
0000000100100011010001010110011110001001101010111100110111101111
Sistemas de Computação
Caches associativas por conjunto
• Caracterizadas por mais de uma linha no conjunto
valid tagconj. 0: E=2 linhas
por conj.
conj. 1:
conj. S-1:
• • •
bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
Sistemas de Computação
Acesso a caches associativas por conjuntos
• Seleção do conjunto é igual à memória mapeada diretamente
conj. 0:
conj. 1:
conj. S-1:
m-1
t bits s bits0 0 0 0 1
0
b bits
tag ìnd. conj. offset
Conj. selecionado
valid
valid
tag
tag
valid
valid
tag
tag
valid
valid
tag
tag
• • •
bloco de cache
bloco de cache
bloco de cache
bloco de cache
bloco de cache
bloco de cache
Sistemas de Computação
Acesso a caches associativas por conjunto
• Compara o tag de cada linha válida do conjunto selecionado
(3) Se (1) e (2), entãoacerto, e
offset seleciona byte inicial.
1 0110 w3w0 w1 w2
1 1001
t bits s bits100i0110
0m-1
b bits
tag ind. conj. offset
conj.(i) selecionado):
=1? (1) Bit válido deve ser 1.
= ?(2) Os bits de tag em
uma das linhas decache tem que casar com
bits de tag doendereço
30 1 2 74 5 6
Sistemas de Computação
Caches totalmente associativas
• Caracterizadas por um único conjunto conter todas as linhas
valid tag
conj. 0: E=C/B linhasem umúnico
conjunto• • •
bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
Sistemas de Computação
Acesso a caches totalmente associativas
• Conjunto 0 é sempre selecionado
m-1
t bits
0
b bits
tag offset
valid tag
conj. 0:
• • •
bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
valid tag bloco de cache
Sistemas de Computação
Acesso a caches totalmente associativas
• Compara tag do endereço com campo tag da cache
0
1
b bits
cacheinteira:
=1? (1) Bit válido deve ser 1.
= ?
(2) Os bits de tag emuma das linhas de
cache tem que casar com bits de tag do
endereço
30 1 2 74 5 6
0
1 w3w0 w1 w2
(3) Se (1) e (2), entãoacerto, e
offset seleciona byte inicial.
0110
1001
t bits
1001
0110
=?
m-1 0tag offset0110 100
Sistemas de Computação
Algoritmo de substituição de dados
• Consiste em determinar qual o bloco da memóriacache deve ser retirado para ceder lugar a outro por ocasião de uma falta
• No mapeamento direto não há opção!
• Nos demais mapeamentos …– LRU - Least Recently Used– FIFO - First In First Out– LFU - Least Frequently Used– Escolha aleatória (*)
Sistemas de Computação
Política de escrita I
• A escrita é sempre realizada na cache pela CPU.Quando deve ser realizada na memória principal?
• Problema: vários processos em várias CPU ou dispositivos de E/S podem acessar um mesmo bloco na MP
– valores diferentes para um mesmo dado!
• Políticas de escrita...– write through– write back– write once
Sistemas de Computação
Política de escrita II
• Escrita em ambas (write through)– Sempre que se escreve na cache, escreve-se na memória principal– Pode haver queda no desempenho
• Escrita somente no retorno (write back)– Escreve apenas quando o bloco é substituído: há bit de alteração– A memória principal pode ficar desatualizada (ex: E/S via DMA)
• Escrita uma vez (write once) – É utilizada quando há múltiplas CPUs– A CPU que primeiro alterar o bloco autaliza-o na memória local,
avisando às demais– As demais CPUs não utilizam mais o dado da cache– A atualização final ocorre na substituição
Sistemas de Computação
Caches multiníveis
• Caches para dados e instruções separadas oujuntas
tamanho:velocidade:$/Mbyte:tam. linha:
200 B3 ns
8 B
8-64 KB3 ns
32 B
128 MB DRAM60 ns$1.50/MB8 KB
30 GB8 ms$0.05/MB
maior, mais lenta, mais barata
MemóriaMemória
L1 d-cache
Regs
CacheL2
unificada
CacheL2
unificada
Processador
1-4MB SRAM6 ns$100/MB32 B
L1 i-cache
discodisco
Sistemas de Computação
Processor ChipProcessor Chip
Hierarquia do Pentium
L1 Data1 cycle latency
16 KB4-way assoc
Write-through32B lines
L1 Instruction16 KB, 4-way
32B lines
Regs. L2 Unified128KB--2 MB4-way assocWrite-back
Write allocate32B lines
L2 Unified128KB--2 MB4-way assocWrite-back
Write allocate32B lines
MainMemory
Up to 4GB
MainMemory
Up to 4GB
Sistemas de Computação
Características de código eficiente paracaching
• Referências repetidas a variáveis (localidadetemporal)
• Padrões de referência com passo 1 (localidade espacial)
Sistemas de Computação
Exemplo de desempenho de código em relação a caching
• Cache inicialmente vazia, palavras de 4-bytes, blocos na cache de 4 palavras
int sumarrayrows(int a[M][N]){
int i, j, sum = 0;
for (i = 0; i < M; i++)for (j = 0; j < N; j++)
sum += a[i][j];return sum;
}
int sumarraycols(int a[M][N]){
int i, j, sum = 0;
for (j = 0; j < N; j++)for (i = 0; i < M; i++)
sum += a[i][j];return sum;
}
Taxa de falta = Taxa de falta = 1/4 = 25% 100%
Sistemas de Computação
Exemplo de multiplicação de matrizes
• Explore localidade temporal e mantenha o conj. de trabalho pequeno utilizando blocos
• Explore localidade espacial pelo tamanho do bloco
• Descrição:– Multiplique matrizes N x N – O(N3) operações no total– Acessos
• N leituras por elemento fonte• N valores somados para destino
/* ijk */for (i=0; i<n; i++) {
for (j=0; j<n; j++) {sum = 0.0;for (k=0; k<n; k++)
sum += a[i][k] * b[k][j];c[i][j] = sum;
}}
/* ijk */for (i=0; i<n; i++) {
for (j=0; j<n; j++) {sum = 0.0;for (k=0; k<n; k++)
sum += a[i][k] * b[k][j];c[i][j] = sum;
}}
Variável sumem registrador
Sistemas de Computação
Análise de falta em cache para multiplicação de matrizes
• Assuma:– Tamanho de linha = 32B (pode armazenar 4 64-bit palavras)– Dimensão N da matriz muito grande (1/N tende a 0.0)– Cache não tem capacidade para armazenar várias linhas
• Método de análise:– Veja o padrão de acesso do loop interno
CA
k
i
B
k
j
i
j
Sistemas de Computação
Arrays em C
• Arrays em C são alocados por linha em lugares adjacentes na memória
• Acesso a colunas em uma linha:– for (i = 0; i < N; i++)
sum += a[0][i];– acessa elementos sucessivos– se tamanho de bloco (B) > 4 bytes, explora localidade espacial
• taxa de falta compulsória = 4 bytes / B
• Acesso a linhas em uma coluna:– for (i = 0; i < n; i++)
sum += a[i][0];– acessa elementos distantes, não apresenta localidade espacial
• taxa compulsória de falta = 1 (i.e. 100%)
Sistemas de Computação
Multiplicação de matrizes (ijk)
/* ijk */for (i=0; i<n; i++) {
for (j=0; j<n; j++) {sum = 0.0;for (k=0; k<n; k++)
sum += a[i][k] * b[k][j];c[i][j] = sum;
}}
/* ijk */for (i=0; i<n; i++) {
for (j=0; j<n; j++) {sum = 0.0;for (k=0; k<n; k++)
sum += a[i][k] * b[k][j];c[i][j] = sum;
}}
A B C
(i,*)
(*,j)(i,j)
Loop interno:
ColunaLinha Fixo
• Faltas em cada iteração do loop interno:A B C
0.25 1.0 0.0
Sistemas de Computação
Multiplicação de matrizes (jik)
/* jik */for (j=0; j<n; j++) {
for (i=0; i<n; i++) {sum = 0.0;for (k=0; k<n; k++)
sum += a[i][k] * b[k][j];c[i][j] = sum;
}}
/* jik */for (j=0; j<n; j++) {
for (i=0; i<n; i++) {sum = 0.0;for (k=0; k<n; k++)
sum += a[i][k] * b[k][j];c[i][j] = sum;
}}
A B C
(i,*)
(*,j)(i,j)
Loop interno:
ColunaLinha Fixo
• Faltas em cada iteração do loop interno:A B C
0.25 1.0 0.0
Sistemas de Computação
Multiplicação de matrizes (kij)
/* kij */for (k=0; k<n; k++) {
for (i=0; i<n; i++) {r = a[i][k];for (j=0; j<n; j++)
c[i][j] += r * b[k][j];}
}
/* kij */for (k=0; k<n; k++) {
for (i=0; i<n; i++) {r = a[i][k];for (j=0; j<n; j++)
c[i][j] += r * b[k][j];}
}
Loop interno:
• Faltas em cada iteração do loop interno:A B C
0.0 0.25 0.25
A B C
(i,*)(i,k) (k,*)
Linha LinhaFixo
Sistemas de Computação
Multiplicação de matrizes (ikj)
/* ikj */for (i=0; i<n; i++) {
for (k=0; k<n; k++) {r = a[i][k];for (j=0; j<n; j++)
c[i][j] += r * b[k][j];}
}
/* ikj */for (i=0; i<n; i++) {
for (k=0; k<n; k++) {r = a[i][k];for (j=0; j<n; j++)
c[i][j] += r * b[k][j];}
}
A B C(i,*)
(i,k) (k,*)
Loop interno:
Linha LinhaFixo
• Faltas em cada iteração do loop interno:A B C
0.0 0.25 0.25
Sistemas de Computação
Multiplicação de matrizes (jki)
/* jki */for (j=0; j<n; j++) {
for (k=0; k<n; k++) {r = b[k][j];for (i=0; i<n; i++)
c[i][j] += a[i][k] * r;}
}
/* jki */for (j=0; j<n; j++) {
for (k=0; k<n; k++) {r = b[k][j];for (i=0; i<n; i++)
c[i][j] += a[i][k] * r;}
}
A B C
(*,j)(k,j)
Loop interno:
(*,k)
Coluna ColunaFixo• Faltas em cada iteração do loop interno:
A B C1.0 0.0 1.0
Sistemas de Computação
Multiplicação de matrizes (kji)
/* kji */for (k=0; k<n; k++) {
for (j=0; j<n; j++) {r = b[k][j];for (i=0; i<n; i++)
c[i][j] += a[i][k] * r;}
}
/* kji */for (k=0; k<n; k++) {
for (j=0; j<n; j++) {r = b[k][j];for (i=0; i<n; i++)
c[i][j] += a[i][k] * r;}
}
A B C
(*,j)(k,j)
Loop interno:
(*,k)
FixoColuna Coluna
• Falta em cada iteração do loop internoA B C
1.0 0.0 1.0
Sistemas de Computação
Multiplicação de matrizes
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
sum = 0.0;
for (k=0; k<n; k++)
sum += a[i][k] * b[k][j];
c[i][j] = sum;
}
}
ijk (& jik):• 2 loads, 0 stores• faltas/iter = 1.25
for (k=0; k<n; k++) {
for (i=0; i<n; i++) {
r = a[i][k];
for (j=0; j<n; j++)
c[i][j] += r * b[k][j];
}
}
for (j=0; j<n; j++) {
for (k=0; k<n; k++) {
r = b[k][j];
for (i=0; i<n; i++)
c[i][j] += a[i][k] * r;
}
}
kij (& ikj):• 2 loads, 1 store• faltas/iter = 0.5
jki (& kji):• 2 loads, 1 store• faltas/iter = 2.0