Programação em Sistemas
Computacionais
Hierarquia de memória
Pedro Pereira
[email protected]
Centro de Cálculo
Localidade
• Localidade temporal
Um programa que acede a uma zona de memória,
provavelmente irá aceder
novamente a essa zona num
curto espaço de tempo, uma ou mais vezes.
• Localidade espacial
Um programa que acede a uma zona de memória,
provavelmente irá aceder
a vizinhanças dessa zona.
int sum(byte a[LINS][COLS]) {
}
int sum(byte a[LINS][COLS]) {
int l,c, res=0;
for(c=0 ; c<COLS ; ++c)
for(l=0 ; l<LINS ; ++l)
res += a[l][c];
return res;
}
Boa localidade relativamente à
memória de código (instruções)?
Boa localidade relativamente à
memória de dados (variáveis)?
Random Access Memory
• Static RAM (SRAM)
– 6 transístores por célula (bit)
– Estável
– Acesso rápido (10x)
– Usada para cache (KBytes..MBytes)
• Dynamic RAM (DRAM)
– 1 transístor e 1 condensador por célula
– Custo baixo (100x)
– Pequena dimensão
Estrutura típica
CPU
PC
Registers
ALU
Main
Memory
(DRAM)
L2
cache
(SRAM)
L1 cache
(SRAM)
Bus
USB
Controller
Graphics
Adapter
Disk
Controller
Expansion
slots
Mouse Keyboard
Display
Disk
Code
Data
Bus
100 GB
8 ms
2 GB
160 cycles
60 ns
1 MB
14 cycles
3 ns
64 KB
3 cycles
? Bytes
1 cycle
Hierarquia de memória
Registers
On-chip cache
(SRAM)
Off/On-chip cache
(SRAM)
Main memory
(DRAM)
Local secondary storage
(local disk)
Remote secondary storage
(distributed file systems)
A
ce
ss
o
rá
pi
do
M
en
or
c
ap
ac
id
ad
e
M
ai
or
c
us
to
/b
yt
e
A
ce
ss
o
le
nt
o
M
ai
or
c
ap
ac
id
ad
e
M
en
or
c
us
to
/b
yt
e
L0
L1
L2
L3
L4
Os registos do CPU guardam
palavras obtidas da cache
A cache L1 guarda
linhas de cache obtidas
da cache L2
A cache L2 guarda
linhas de cache
obtidas da memória
A memória guarda
blocos obtidos do
disco
O disco guarda
ficheiros
obtidos
remotamente
Conceito geral de cache
• Cache Hits (acesso rápido)
Se os dados procurados estão num dos
blocos da cache.
1. Os dados são lidos/escritos apenas
da/na cache.
• Cache Misses (acesso lento)
Se os dados procurados não estão
num dos blocos da cache.
1. É escolhido um bloco da cache
para ser substituído.
2. Caso este bloco tenha sido alterado
é escrito na memória principal.
3. Todo o bloco do byte pretendido é lido da
memória principal para a cache.
4. Os dados são lidos/escritos apenas
da/na cache.
Main memory
(DRAM)
Cache block 0
Cache block 1
Cache block 2
Cache block 4
Cache block 9
Cache block 14
Cache block 3
Cache block 3
Cache block 4
Cache block 5
Cache block 6
Cache block 7
Cache block 8
Cache block 9
Cache block 10
Cache block 11
Cache block 12
Cache block 13
Cache block 14
Cache block 15
Cache memory
(SRAM)
CPU
Cache block
2
b
bytes
2
M
b
lo
ck
s
16, 32 ou 64 bytes2
N
b
lo
ck
s
BusN < M
Organização da cache
• Organização
em linhas:
Bloco: Cópia de um bloco
de dados (ex: 32 bytes)
Tag: Identifica o bloco
Uma parte do endereço em memória
Valid bit: Cópia válida
Inicialmente, todas as linha estão inválidas
Dirty bit: Bloco alterado
Falta actualizar este bloco na memória
(não é usado em write-through)
Tag
block
d
v
Tag
block
d
v
Tag
block
d
v
Tag
block
d
v
Tag
block
d
v
Tag
block
d
v
...
...
Tag
block
d
v
16, 32 ou 64 bytes
t bits
D
irt
y
V
al
id
Fully Associative cache
• Um bloco pode estar em qualquer linha da cache
Main memory 0 1 2 3 4 5 Cache memory 0 1 2 3
• Um comparador para
cada linha.
• Enconder e Or com
lógica em cascata.
• Para médias e grandes
dimensões tem acessos
lentos e é dispendioso.
• Caches de pequena
dimensão (TLBs)
main memory 4 GB
m = 32
block size 32 bytes
b = 5
m bits
Address bits:
offset
Tag
t=m-b bits
b bits
t = 27
Address: Tag offs
Tag block d v == Encoder Mux Tag block d v == Tag block d v == Tag block d v == block
Hit / Miss
t=27 bits 32 bytes t=27 bits b=5 bitsDirect-Mapped cache
• Cada bloco só pode estar numa linha da cache
• Um só comparador.
• Económico e com
acessos rápidos.
• Cache miss se
2 blocos usados
têm o mesmo index
(situação frequente)
Main
memory
0
1
2
3
4
5
6
7
Cache
memory
0
1
2
3
main memory 4 GB
m = 32
32 bytes
b = 5
m bits
Address bits:
offset
Tag
t=m-b-s bits
b bits
t = 13
Index
16k lines (512 KB)
s = 14
s bits
Address:Tag
offs
Tag
block
d
v
t=13 bits 32 bytes t=13 bits b=5 bitsIndex
s=14 bits MuxTag
block
d
v
Tag
block
d
v
...
...
...
Mux ==Index 0
Index 1
Index 2
s-1
Set Associative cache
• Cada bloco pode estar numa das N linhas da cache
• Tipicamente com
4 ou 8 ways.
• Reúne as vantagens
da direct-mapped e
fully associative.
Main
memory
0
1
2
3
4
5
Cache
memory
0
1
2
3
main memory 4 GB m = 32 32 bytes b = 5 m bitsAddress bits:
offset
Tag
t=m-b-s bits b bits t = 13Index
16k x 2Way lines (1 MB) s = 14s bits Address:
Tag
offs
t =13 bits b=5 bits