Вы находитесь на странице: 1из 70

Sistemas de Computação

Tecnologia
Tecnologia de
de memória/Memória
memória/Memória
cache
cache
Tecnologia para Memória
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
Random-Access Memory (RAM)
Sistemas de Computação
• 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
SRAM vs DRAM
Sistemas de Computação

Tran. Tempo
por 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órias


principais
Organização convencional da DRAM
Sistemas de Computação
• d x w DRAM:
– dw bits organizados como d supercélulas de tamanho w bits

16 x 8 DRAM chip colunas


0 1 2 3
2 bits 0
/
ender
1
Controlador linhas
de 2 supercélula
(para CPU) memória (2,1)
3
8 bits
/
dados

Buffer de linha interno


Lendo supercélula (2,1) da DRAM
Sistemas de Computação

16 x 8 DRAM chip
colunas
0 1 2 3
RAS = 2
2
/ 0
end
1
Controlador
linhas
de
memória 2

8 3
/
dados

Buffer de linha interno


Lendo supercélula (2,1) de DRAM
Sistemas de Computação

16 x 8 DRAM chip
colunas
0 1 2 3
CAS = 1
2
/ 0
end
Para CPU
1
Controlador linhas
de 2
memória
supercélula 3
8
(2,1) /
dados

supercélula
Buffer de linha interno
(2,1)
Módulos de memória
Sistemas de Computação
end (linha = i, col = j)
: supercélula (i,j)
DRAM 0
módulo de memória
de 64 MB
consistindo de
DRAM 7
oito 8Mx8 DRAMs

bits bits bits bits bits bits bits bits


56-63 48-55 40-47 32-39 24-31 16-23 8-15 0-7

63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 0 Controlador
de memória

64-bit doubleword
Enhanced DRAMs
Sistemas de Computação

• 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)
Memórias não voláteis
Sistemas de Computação

• 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
Estrutura típica de barramento
conectando CPU e memória
Sistemas de Computação

• Um barramento é uma coleção de fios paralelos


que carregam endereço, dados e sinais de controle
CPU

registradores

ALU barramento
do
sistema barramento de memória

Interface de Ponte de memória


barramento E/S principal
Geometria dos discos
Sistemas de Computação
• 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.
trilhas
superfície
trilha k espaços

eixo

setores
Discos com múltiplos pratos
Sistemas de Computação

• Trilhas alinhadas formam um cilindro

cilindro k

superfície 0
prato 0
superfície 1
superfície 2
prato 1
superfície 3
superfície 4
prato 2
superfície 5

eixo
Capacidade do disco
Sistemas de Computação
• Capacidade: número máximo de bits que podem ser
armazenados expresso em gigabytes (1 GB = 10 9)
• 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
Calculando capacidade de disco
Sistemas de Computação
• 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
Operação do disco
Sistemas de Computação

A superfície do
A cabeça de leitura/escrita
disco gira com
está ligada ao final do braço
uma velocidade
e flutua sobre a superfície
de rotação
do disco em cima de uma
constante
fina camada de ar

spindle
spindle
spindle
spindle
eixo

O braço pode posicionar a


cabeça sobre qualquer
trilha através de um
movimento radial
Operação de disco com múltiplos discos
Sistemas de Computação

cabeças de leitura/escrita
se movem em conjunto
de cilindro para cilindro

braço

eixo
Tempo de acesso ao disco
Sistemas de Computação
• 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.
Exemplo
Sistemas de Computação
• 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
Blocos lógicos
Sistemas de Computação

• 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
Barramento de E/S
Sistemas de Computação
CPU
registradores

ALU barramento barramento


do sistema de memória

interface de ponte memória


barramento de E/S principal

barramento de E/S
Slots de expansão
controlador adaptador controlador para outros
USB gráfico de disco dispositivos tais
como adaptadores
mouse teclado monitor de rede
disco
Tendências de armazenamento
Sistemas de Computação
métrica 1980 1985 1990 1995 2000 2000:1980
SRAM
$/MB 19,200 2,900 320 256 100 190
acesso (ns) 300 150 35 15 2 100

métrica 1980 1985 1990 1995 2000 2000:1980


DRAM $/MB 8,000 880 100 30 1 8,000
acesso (ns) 375 200 100 70 60 6
tam. típico(MB) 0.064 0.256 4 16 64 1,000

métrica 1980 1985 1990 1995 2000 2000:1980

Disco $/MB 500 100 8 0.30 0.05 10,000


acesso (ms) 87 75 28 10 8 11
tam. típico (MB) 1 10 160 1,000 9,000 9,000
Relógios de CPU
Sistemas de Computação

1980 1985 1990 1995 2000 2000:1980


processador 8080 286 386 Pent P-III
freqüência (MHz) 1 6 20 150 750 750
tempo de ciclo(ns) 1,000 166 50 6 1.6 750
O gap memória-CPU
Sistemas de Computação

100,000,000
10,000,000
1,000,000
Disk seek time
100,000
DRAM access time
10,000
ns

SRAM access time


1,000
CPU cycle time
100
10
1
1980 1985 1990 1995 2000
year
Princípio da localidade
Sistemas de Computação

• 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
Exemplo de localidade
Sistemas de Computação

Exemplo de localidade sum = 0;


• Dados for (i = 0; i < n; i++)
sum += a[i];
– Acessar elementos em
return sum;
série (padrão de
referência passo 1): Localidade espacial
– Referência à sum em
cada iteração: Localidade temporal
• Instruções
– Instruções executadas em
seqüência: Localidade espacial
– Passa pelo loop
repetidamente: Localidade temporal
Exemplo de localidade
Sistemas de Computação

• 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
}
Exemplo de localidade
Sistemas de Computação

• 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
}
Exemplo de localidade
Sistemas de Computação

• 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
}
Hierarquia de memórias
Sistemas de Computação

• 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.
Exemplo de hierarquia de memórias
Sistemas de Computação

Dispositivos L0:
menores, regs registradores da CPU guardam
palavras obtidas da cache L1
mais rápidos,
e L1: on-chip L1
cache (SRAM) Cache L1 guarda linhas de cache
mais caros obtidas da cache L2
(por byte) L2: off-chip L2
Cache L2 guarda linhas de
cache (SRAM) cache obtidas da memória
principal
L3: memória principal
(DRAM) Memória principal guarda
Dispositivos blocos de disco obtidos
maiores, de discos locais
mais lentos, L4: armazenamento secundário local Discos locais
e (discos locais) guardam
arquivos obtidos
mais baratos de discos em
(por byte) servidores
L5: armazenamento secundário remoto remotos
(sistemas de arquivos distribuídos, servidores Web)
Caches
Sistemas de Computação
• 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 em
uma taxa perto do dispositivo mais rápido
Caching na hierarquia de memórias
Sistemas de Computação
Dispositivo menor, mais rápido,
Nível k: 4
8 9 10
14 3 mais caro no nível k armazena
subconjunto de blocos do
nível k+1
Dados são copiados entre
10
4 níveis em blocos

0 1 2 3

Nível k+1: 4 5 6 7 Dispositivo maior, mais lento,


mais barato do nível k+1 é
8 9 10 11 particionado em blocos
12 13 14 15
Conceitos gerais de caching
Sistemas de Computação
• Programa precisa do objeto d, que
Pede
14
12
12 está armazenado em algum bloco b
Nível
k: 0 1 2 3 • Acerto de cache (hit)
4*
12 9 14 3 – Programa encontra b na cache nível k. E.x.,
bloco 14.

Pede
• Falta de cache (miss)
12
4*
12 – b não está no nível k, então a cache do nível
Nível k precisa pegar o bloco do nível k+1. Ex.,
k+1: bloco 12.
– Se a cache do nível k está cheia, então algum
0 1 2 3 bloco corrente terá que sair para dar lugar ao
novo. Quem será a vítima?
4
4* 5 6 7
• Política de colocação: onde o novo
8 9 10 11 bloco deve ir ? Ex., b mod 4
• Política de substituição: qual bloco
12 13 14 15
deve sair ? Ex., LRU
Terminologia para Hierarquia de
Memória
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

Nível Mais Baixo


Para o Processador Nível Mais Alto Memória
Memória
Bloco X
Do Processador Bloco Y
Terminologia para Hierarquia de
Memória
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)
Nível Mais Baixo
Para o Processador Nível Mais Alto Memória
Memória
Bloco X
Do Processador Bloco Y
Conceitos gerais de caching
Sistemas de Computação

• 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.
Memórias cache
Sistemas de Computação

• CPU procura por dados em L1, depois emL2 e finalmente


na memória principal

CPU
registradores
L1
ALU barramento barramento de
barramento de cache
cache de sistema memória

interface de ponte memória


L2 cache
barramento E/S principal
Inserindo Cache L1 entre CPU e
memória principal
Sistemas de Computação
Os registradores da CPU
A unidade de transferência possuem espaço
entre os registradores da CPU para 4 palavras de 4 bytes
e a cache é um bloco de 4
bytes.
linha 0 A cache L1 tem espaço para
linha 1 dois blocos de 4 palavras
A unidade de transferência
entre a cache e a memória
principal é um bloco de
4 palavras(16 bytes). bloco 10 abcd
... A memória principal
bloco 21 pqrs possui espaço para vários
... blocos de 4 palavras
bloco 30 wxyz
...
Organização geral da memória cache
Sistemas de Computação
1bit válido t bits para B = 2b bytes
por linha tag por linha por bloco de cache

valid tag 0 1 ••• B–1 E linhas


conj. 0: ••• por
valid tag 0 1 ••• B–1 conjunto

valid tag 0 1 ••• B–1


conj. 1: •••
S = 2s sets valid tag 0 1 ••• B–1

•••
valid tag 0 1 ••• B–1
conj. S-1: •••
valid tag 0 1 ••• B–1

Tamanho da cache: C = B x E x S bytes


Endereçamento de cache
Sistemas de Computação
Endereço A:
t bits s bits b bits

m-1 0
v tag 0 1 • • • B–1
conj.0: •••
v tag 0 1 • • • B–1 <tag> <índ. conj.> <offset>

v tag 0 1 • • • B–1
conj 1: •••
v tag 0 1 • • • B–1 A palavra no endereço A está na cache
se os bits de tag em uma das linhas válidas
••• no conjunto <ind. conj.> são idênticos
aos bits do campo <tag>.
v tag 0 1 • • • B–1
conj. •••
S-1: v tag 0 1 • • • B–1
O conteúdo da palavra começa no
deslocamento de
<offset> bytes a partir do início do bloco
Cache mapeada diretamente
Sistemas de Computação

• Forma mais simples


• Caracterizada por ter uma linha por conjunto

E=1 linha por


conj. 0: valid tag bloco da cache
conjunto

conj. 1: valid tag bloco da cache

•••

conj. S-1: valid tag bloco da cache


Accesso a caches mapeadas diretamente
Sistemas de Computação

• Seleção do conjunto feita pelos bits de índice de


conjunto

conj. 0: valid tag bloco da cache


conj. selecionado
conj. 1: valid tag bloco da cache
•••
t bits s bits b bits bloco da cache
00 001 conj. S-1: valid tag
m-1
tag ind. conj offset 0
Accesso a caches mapeadas diretamente
Sistemas de Computação
• Encontre uma linha válida no conjunto
selecionado com campo tag idêntico a bits de tag e
extrai a palavra desejada
=1? (1) O bit válido tem que ser 1

0 1 2 3 4 5 6 7
conj. (i)
selecionado: 1 0110 w0 w1 w2 w3

(2) Os bits de tags na linha


da cache tem que casar = ? (3) Se (1) e (2), então
com os bits de tag do acerto,
endereço e offset
seleciona
t bits s bits b bits
o byte inicial.
0110 i 100
m-1 0
tag ind. conj. offset
Exemplo de cache mapeada
diretamente
Sistemas de Computação
M=endereço de 16 bytes, B=2 bytes/bloco,
S=4 conj., E=1 linha/conj.
t=1 s=2 b=1 Acessos a endereços (leituras):
x xx x 0 [00002], 1 [00012], 13 [11012], 8 [10002], 0 [00002]

0 [00002] (miss) 13 [11012] (miss)


v tag data v tag data
11 0 M[0-1]
m[1] m[0] 11 0 M[0-1]
m[1] m[0]

(1) (3) 11 1 M[12-13]


m[13] m[12]

8 [10002] (miss) 0 [00002] (miss)


v tag data v tag data
1 1 M[8-9] 11 0 M[0-1]
m[1] m[0]
1 1 m[9] m[8]
(4) 1 1 M[12-13] (5) 11 1 M[12-13]
m[13] m[12]
Porque utilizar bits do meio como
índice?
Sistemas de Computação
Cache de 4 linhas Mais significativos Meio
00 0000 0000
01 0001 0001
10 0010 0010
11 0011 0011
0100 0100
Indexação por bits mais 0101 0101
significativos 0110 0110
– Linhas de memória adjacentes 0111 0111
podem ser mapeadas no mesmo 1000 1000
lugar (mau uso da localidade 1001 1001
espacial) 1010 1010
Indexação por bits do meio 1011 1011
– Linhas consecutivas da memória
1100 1100
são mapeadas em linhas 1101 1101
diferentes da cache 1110 1110
1111 1111
Caches associativas por conjunto
Sistemas de Computação

• Caracterizadas por mais de uma linha no conjunto

valid tag bloco de cache E=2 linhas


conj. 0:
valid tag bloco de cache por conj.

valid tag bloco de cache


conj. 1:
valid tag bloco de cache

•••
valid tag bloco de cache
conj. S-1:
valid tag bloco de cache
Acesso a caches associativas por
conjuntos
Sistemas de Computação

• Seleção do conjunto é igual à memória mapeada


diretamente
valid tag bloco de cache
conj. 0:
valid tag bloco de cache

Conj. selecionado valid tag bloco de cache


conj. 1:
valid tag bloco de cache

•••
valid tag bloco de cache
t bits s bits b bits conj. S-1:
valid tag bloco de cache
00 001
m-1 0
tag ìnd. conj. offset
Acesso a caches associativas por
conjunto
Sistemas de Computação

• Compara o tag de cada linha válida do conjunto


selecionado
=1? (1) Bit válido deve ser 1.
0 1 2 3 4 5 6 7

1 1001
conj.(i)
selecionado): 1 0110 w0 w1 w2 w3

(2) Os bits de tag em (3) Se (1) e (2), então


uma das linhas de =? acerto, e
cache tem que casar com offset seleciona
bits de tag do byte inicial.
endereço t bits s bits b bits
0110 i 100
m-1 0
tag ind. conj. offset
Caches totalmente associativas
Sistemas de Computação

• Caracterizadas por um único conjunto conter


todas as linhas
valid tag bloco de cache
valid tag bloco de cache

valid tag bloco de cache


conj. 0: E=C/B linhas
valid tag bloco de cache
em um
••• único
valid tag bloco de cache conjunto

valid tag bloco de cache


Acesso a caches totalmente associativas
Sistemas de Computação

• Conjunto 0 é sempre selecionado

valid tag bloco de cache


valid tag bloco de cache

valid tag bloco de cache


conj. 0:
valid tag bloco de cache
•••
t bits b bits valid tag bloco de cache
m-1
tag offset 0 valid tag bloco de cache
Acesso a caches totalmente associativas
Sistemas de Computação
• Compara tag do endereço com campo tag da cache

=1? (1) Bit válido deve ser 1.


0 1 2 3 4 5 6 7

1 1001
cache
inteira: 0 0110

1 1001 w0 w1 w2 w3
=?
0 0110

(2) Os bits de tag em =? (3) Se (1) e (2), então


uma das linhas de acerto, e
cache tem que casar t bits b bits
offset seleciona
com bits de tag do 0110 100
m-1 tag offset 0 byte inicial.
endereço
Algoritmo de substituição de dados
Sistemas de Computação

• Consiste em determinar qual o bloco da memória


cache 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 (*)
Política de escrita I
Sistemas de Computação

• 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
Política de escrita II
Sistemas de Computação
• 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
Caches multiníveis
Sistemas de Computação
• Caches para dados e instruções separadas ou
juntas

Processador Regs L1
d-cache
Cache
Cache Memória disco
Memória disco
L2
L2
L1
unificada
unificada
i-cache

tamanho: 200 B 8-64 KB 1-4MB SRAM 128 MB DRAM 30 GB


velocidade: 3 ns 3 ns 6 ns 60 ns 8 ms
$/Mbyte: $100/MB $1.50/MB $0.05/MB
tam. linha: 8 B 32 B 32 B 8 KB
maior, mais lenta, mais barata
Hierarquia do Pentium
Sistemas de Computação

L1 Data
1 cycle latency
16 KB
4-way assoc L2
Regs. L2Unified
Unified
Write-through 128KB--2
128KB--2MB MB Main
32B lines 4-way assoc Main
4-way assoc Memory
Write-back Memory
Write-back Up
Write Upto
to4GB
4GB
L1 Instruction Writeallocate
allocate
32B lines
32B lines
16 KB, 4-way
32B lines

Processor
ProcessorChip
Chip
Características de código eficiente para
caching
Sistemas de Computação

• Referências repetidas a variáveis (localidade


temporal)
• Padrões de referência com passo 1 (localidade
espacial)
Exemplo de desempenho de código em
relação a caching
Sistemas de Computação

• Cache inicialmente vazia, palavras de 4-bytes,


blocos na cache de 4 palavras

int sumarrayrows(int a[M][N]) int sumarraycols(int a[M][N])


{ {
int i, j, sum = 0; int i, j, sum = 0;

for (i = 0; i < M; i++) for (j = 0; j < N; j++)


for (j = 0; j < N; j++) for (i = 0; i < M; i++)
sum += a[i][j]; sum += a[i][j];
return sum; return sum;
} }
Taxa de falta = 1/4 = 25% Taxa de falta = 100%
Exemplo de multiplicação de matrizes
Sistemas de Computação

• Explore localidade temporal e mantenha o conj. de trabalho


pequeno utilizando blocos
• Explore localidade espacial pelo tamanho do bloco
Variável sum
em registrador
/*
/* ijk
ijk */
• Descrição: for
*/
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
– Multiplique matrizes N x N for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
– O(N3) operações no total sum
sum == 0.0;
0.0;
for
for (k=0; k<n;
(k=0; k<n; k++)
– Acessos k++)
sum
sum +=+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
• N leituras por elemento fonte c[i][j]
c[i][j] == sum;
sum;
• N valores somados para destino }}
}}
Análise de falta em cache para
multiplicação de matrizes
Sistemas de Computação

• 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
k j j

i k i

A B C
Arrays em C
Sistemas de Computação
• 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%)
Multiplicação de matrizes (ijk)
Sistemas de Computação

/*
/* ijk
ijk */
*/ Loop interno:
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
for (*,j)
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
sum (i,j)
sum == 0.0;
0.0; (i,*)
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++)
sum A B C
sum +=+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
c[i][j]
c[i][j] == sum;
sum;
}}
}} Linha Coluna Fixo

• Faltas em cada iteração do loop interno:


A B C
0.25 1.0 0.0
Multiplicação de matrizes (jik)
Sistemas de Computação

/*
/* jik
jik */
*/ Loop interno:
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
for (*,j)
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
sum (i,j)
sum == 0.0;
0.0; (i,*)
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++)
sum A B C
sum +=+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
c[i][j]
c[i][j] == sum;
sum;
}}
}} Linha Coluna Fixo

• Faltas em cada iteração do loop interno:


A B C
0.25 1.0 0.0
Multiplicação de matrizes (kij)
Sistemas de Computação

/*
/* kij
kij */
*/ Loop interno:
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{ (i,k) (k,*)
(i,*)
rr == a[i][k];
a[i][k];
for A B C
for (j=0;
(j=0; j<n;
j<n; j++)
j++)
c[i][j]
c[i][j] +=+= rr ** b[k][j];
b[k][j];
}}
}}
Fixo Linha Linha

• Faltas em cada iteração do loop interno:


A B C
0.0 0.25 0.25
Multiplicação de matrizes (ikj)
Sistemas de Computação

/*
/* ikj
ikj */*/ Loop interno:
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{ (i,k) (k,*)
rr == a[i][k];
a[i][k]; (i,*)
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) A B C
c[i][j]
c[i][j] +=+= rr ** b[k][j];
b[k][j];
}}
}}
Fixo Linha Linha

• Faltas em cada iteração do loop interno:


A B C
0.0 0.25 0.25
Multiplicação de matrizes (jki)
Sistemas de Computação
/*
/* jki
jki */*/ Loop interno:
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
for (*,k) (*,j)
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{
rr == b[k][j]; (k,j)
b[k][j];
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++)
c[i][j] A B C
c[i][j] +=+= a[i][k]
a[i][k] ** r;
r;
}}
}}
Coluna Fixo Coluna
• Faltas em cada iteração do loop interno:
A B C
1.0 0.0 1.0
Multiplicação de matrizes (kji)
Sistemas de Computação
Loop interno:
/*
/* kji
kji */*/
(*,k) (*,j)
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++) {{
(k,j)
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
rr == b[k][j];
b[k][j]; A B C
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++)
c[i][j]
c[i][j] +=+= a[i][k]
a[i][k] ** r;
r;
}}
}} Coluna Fixo Coluna

• Falta em cada iteração do loop interno


A B C
1.0 0.0 1.0
Multiplicação de matrizes
Sistemas de Computação

ijk (& jik): kij (& ikj): jki (& kji):


• 2 loads, 0 stores • 2 loads, 1 store • 2 loads, 1 store
• faltas/iter = 1.25 • faltas/iter = 0.5 • faltas/iter = 2.0

for (i=0; i<n; i++) { for (k=0; k<n; k++) { for (j=0; j<n; j++) {
for (j=0; j<n; j++) { for (i=0; i<n; i++) { for (k=0; k<n; k++) {
sum = 0.0; r = a[i][k]; r = b[k][j];
for (k=0; k<n; k++) for (j=0; j<n; j++) for (i=0; i<n; i++)
sum += a[i][k] * b[k][j]; c[i][j] += r * b[k][j]; c[i][j] += a[i][k] * r;
c[i][j] = sum; } }
} } }
}

Вам также может понравиться