Escolar Documentos
Profissional Documentos
Cultura Documentos
v20160921
1. Cache
Uma cache é um local de armazenamento temporário de itens que se espera venham a ser
necessários proximamente. Normalmente, as caches são preenchidas com cópias dos itens
usados recentemente, na esperança que estes possam coincidir com os que venham a ser
necessários num futuro próximo.
O principio de cache aplica-se em muitos domínios com tecnologias muito distintas, sempre
com o objectivo de agilizar a obtenção de itens armazenados num depósito de acesso não
imediato.
Para ser útil, uma cache deve ser implementada com tecnologia e metodologia que
permitam a disponibilidade dos itens requeridos de forma mais rápida do que a sua
transferência do local de armazenamento principal. Uma vez que a cache se destina a dar
guarida temporária apenas a um conjunto selecionado de itens do armazém principal,
admite-se que a dimensão da cache seja muito inferior à dimensão do armazém principal.
1
Figura 1. Diversas aplicações de cache. A implementação de cache de
páginas Web pode ser realizada através de disco. A cache de disco
pode ser implementada recorrendo a memória. Cache de memória
requer um novo tipo de memória designado por memória cache.
Princípio da proximidade
Os programas tendem a reutilizar dos dados e as instruções
usados recentemente e os colocados em locais próximos.
Existem dois tipos de proximidade:
2
As vantagens oferecidas pela memória cache são potenciadas pela coerência temporal e
posicional dos acessos (Princípio da Proximidade), que se verifica na generalidade dos
programas computacionais.
2. Hierarquia de Memória
Os dispositivos de armazenamento são um dos componentes fundamentais do sistemas
computacionais.
Processor
Control Tertiary
Secondary Storage
Second Main Storage (Tape)
Level Memory (Disk)
Registers
On-Chip
Cache
Cache (DRAM)
Datapath
(SRAM)
Os níveis mais próximos do processador são sempre mais rápidos, mais caros (em preço por
unidade de armazenamento) e de menor dimensão do que os níveis mais afastados. A figura
seguinte ilustra as relações típicas entre a dimensão e o preço com o tempo de acesso
normalmente encontrados nas diversas tecnologias de armazenamento de dados, referentes
ao ano 2000.
3
Figura 3. Variação da dimensão e do preço em função do tempo de
resposta. A dimensão de sistemas de armazenamento cresce com
o tempo de acesso. O custo de um sistema de armazenamento
decresce com o tempo de resposta.
As variações ilustradas nos gráficos podem ser modeladas de forma aproximada pelas
equações:
0.01
price=
√t a
N=1012 ×t 3a /4
Terminologia
4
O conjunto de dados solicitado não foi encontrado na
Miss Falha
memória cache
Block Bloco A unidade básica de armazenamento de uma cache.
Zona da memória cache que armazena um bloco e respetiva
Line Linha
informação associada.
Conjunto Grupo de linhas indexadas em simultâneo. Um grupo possui
Set
Grupo sempre arquitetura completamente associativa.
3. Arquitecturas
Numa cache, os dados são armazenados em blocos de dimensão fixa. A capacidade total de
uma cache (MC) corresponde ao produto do número de blocos (NB) pela dimensão destes
(BS).
M C =NB×BS
Os blocos de dados de uma cache podem ter dimensão igual ou superior aos blocos de dados
que podem ser transferidos da memória principal.
Nesta expressão, BO representa o número de bit necessários para endereçar uma unidade
de endereçamento dentro dum bloco e AddrUnit a dimensão da palavra endereçavel.
BS
BO =log 2 ( AddrUnit )
Um endereço de memória pode portanto ser dividido em duas componentes: o endereço do
bloco e o desvio da palavra endereçada dentro do bloco.
5
Address: BA BO
BA BO
O endereço do bloco, identifica de forma inequívoca qualquer bloco. A forma como este
endereço é utilizado para encontrar um bloco presente numa memória cache, depende da
arquitectura da cache.
6
15 ….……................…….……. 2 1 ….. 0
Address
14 2
Tag Byte offset
Tag Data
V
14 32
Hit
=
14 32
4 lines
Hit
=
14 32
Hit
=
14 32
Hit
= Data
A mesma estrutura pode ser aumentada para um qualquer número de blocos. Este
alargamento não influencia a dimensão das etiquetas. O número de etiquetas que é
necessário manter será sempre igual ao número de blocos.
A figura seguinte apresenta uma cache completamente associativa com 1024 blocos de 32
bits.
7
15 ….……................…….……. 2 1 ….. 0
Address
14 2
Tag Byte offset
Tag Data
V
14 32
Hit
=
14 32
Hit
=
1024 lines
14 32
Hit
=
...
...
...
14 32
Hit
=
Data
A figura seguinte apresenta uma cache de mapeamento directo com 8096 blocos de 128 bits.
Cada bloco de dados é associado a uma etiqueta de 15 bits. Numa tentativa de acesso à
cache, os bits 16-4 do endereço são utilizados para seleccionar um bloco entre os 8096
8
disponíveis. Os restantes 15 bits (31-17) são depois comparados com a etiqueta ( Tag)
associada ao bloco de dados. No caso de sucesso desta comparação ( Hit), são utilizados os
dados do bloco seleccionado. No caso de insucesso da comparação, temos uma situação de
Miss no acesso à cache.
Tag Data
V
8 ki blocks
15
=
Hit
128
Data
Como acontece em qualquer arquitectura de cache, a dimensão do bloco pode ser superior à
dimensão dos dados a transferir. A figura seguinte apresenta uma cache de mapeamento
directo com 4096 blocos de 128 bits. Neste caso, são utilizados os bits 3-2 para a
identificação da palavra de 32 bits dentro do bloco de 128 bits.
9
Address
Tag Data
V
= Mux
Data
Hit
10
31 ….……...… 16 15 ..……......... 3 2 .. 0
Address
15 14 3
Tag Offset
Index
4096 sets
15 15 15 15
= = = =
64 Data
Independentemente da arquitetura, uma memória cache pode sempre ser especificada pela
sua associatividade (K), pelo número de conjuntos (NSets) e pela dimensão do bloco de
dados (BS).
Quando K=1, a memória cache em questão possui uma arquitectura de mapeamento direto.
Sempre NSets>1 e K>1, a memória cache pode ser identificada como uma memória cache
com associação por conjuntos de K vias (K-way Set Associative Cache).
M C =K×NSets×BS
11
4. Operação
Políticas de Leitura
Durante um ciclo de leitura de dados da memória, a memória cache é consultada para
verificar se o bloco pretendido se encontra ou não presente.
Main
CPU Cache
memory
12
Main
CPU Cache
memory
Concorrência
Normalmente, a consulta à memória principal só é iniciada se e quando for verificado o Miss
na memória cache, o que corresponde a um procedimento sequencial de consulta das
memórias cache e principal. No entanto, para acelerar o processo de leitura em caso de Miss,
é possível iniciar a consulta da memória principal de forma concorrente com a consulta da
memória cache.
13
No Read-Through Sequencial
HT HT
Cache
MP=ML+ HT
ML
Memória
No Read-Through Concorrente
HT HT
Cache
MP=ML
ML
Memória
Read-Through Sequencial
HT
Cache
MP=ML
ML
Memória
Read-Through Concorrente
HT
Cache
MP=ML−HT
ML
Memória
Figura 12. Miss Penalty. A penalização temporal imposta pela ocorrência de um miss
depende da politica de escrita e da sua aplicação.
Caches Non-Blocking
Normalmente uma cache só trata um pedido de cada vez. Se os dados não são encontrados
na cache (miss), é realizada uma consulta à memória principal. Durante esta consulta, a cache
fica normalmente bloqueada (blocked), indisponível para atender outros pedidos.
Numa cache Non-blocking não se verifica este bloqueio. Após detetado um miss, e durante a
consulta à memória principal, a cache pode atender outros pedidos e satisfazê-los em caso
de hit.
Esta técnica foi introduzida pela Intel para a cache L2 do Pentium Pro e do Pentium II. Exigiu
o desenho do processador com dois barramentos distintos ( DIB - Dual Independent Bus), de
forma a permitir a comunicação direta entre o processador e a cache L2, sem utilizar o
barramento da memória principal.
14
Políticas de Escrita
Durante a execução de um programa típico, as operações de leitura representam cerca de
90% dos ciclos de memória. As memórias cache são essencialmente vocacionadas para a
otimização dos acessos de leitura. No entanto, mesmo que a cache não permita obter
vantagens significativas associadas a operações de escrita, o procedimento utilizado nestas
operações tem de ter a conta a existência da cache.
O processo e escrita é sempre iniciado pela consulta à memória cache de forma a verificar a
presença do bloco sobre o qual se pretende efectuar a operação de escrita. O procedimento a
aplicar no processo de escrita depende da confirmação da presença do bloco de destino na
memória cache (Hit) ou da sua ausência (Miss).
Write-Through
A escrita é realizada simultaneamente para a cache e para a memória principal.
Main
CPU Cache
memory
A aplicação desta política de escrita não permite tirar partido da existência da memória cache
nem do facto do bloco de destino da escrita se encontrar copiado na cache. O tempo
15
necessário para realizar uma operação de escrita será idêntico ao que se obteria sem
existência da memória cache. Escritas sucessivas do mesmo bloco provocam igual número
de ciclos de escrita para a memória principal, mesmo que desnecessários.
Write-Back
A escrita é realizada apenas para o bloco localizado na memória cache. Simultaneamente é
marcado um bit sinalizador que classifica o bloco como modificado ( dirty). O bloco escrito só
é copiado para a memória principal se e quando for retirado da memória cache.
Main
CPU Cache
memory
Uma vez que durante o intervalo entre uma escrita para a cache e a respectiva cópia para a
memória principal, não existe coerência entre as duas versões do mesmo bloco, é imperativa
a utilização de protocolos e controladores adicionais para garantir a consistência global em
sistemas em que vários processadores possam partilhar a memória principal sem
partilharem a memória cache.
16
Write-Allocate
É alocado espaço na memória cache para o bloco pretendido. Normalmente, o bloco original
é copiado da memória principal para a memória cache, o que introduz um ciclo de leitura.
Nos casos em que a escrita corresponde à totalidade do bloco, pode ser evitada a cópia da
memória. Depois da alocação, aplica-se o processo de escrita definido para uma situação de
Hit.
A colocação do bloco na memória cache obriga normalmente a retirar um dos blocos
armazenados (substituição). Numa cache que use também Write-Back, esta operação pode
implicar a escrita para memória principal do bloco substituído se este se encontrar
modificado (Dirty).
No-Write-Allocate
A escrita é realizada sobre a memória principal. O bloco a escrever não é copiado para
memória cache, não sendo necessário efectuar substituições nem a eventual escrita do bloco
substituído para a memória principal.
Write Allocate
● ●
No Write Allocate ●
●
Figura 15. Combinações de políticas de escrita. As caches Write Back utilizam
normalmente Write Allocate. A maioria das caches Write Through aplica No
Write Allocate.
17
Write-Through sem Allocation
Um sistema que combina a política Write-Through em caso de hit com a política No-Write-
Allocation em caso de miss, implementa o procedimento descrito no diagrama da figura
seguinte. No caso de ser detetada a presença do bloco de destino na cache (hit), a escrita é
realizada para o bloco presente na cache e para a memória principal. No caso do bloco não
ser encontrado na cache, a escrita é efetuada apenas para a memória principal.
Write
Yes
Hit ?
No
End
18
Write
Yes
Hit ?
Allocation
No
Yes
Dirty ?
End
Figura 17. Processo de escrita com Write-Back e Allocation. Num caso de Hit, as
caches Write-Back com Allocation escrevem apenas para a cache. Em caso
de Miss, o bloco é transferido da memória principal para a cache
(Allocation). No caso de o bloco substituído neste processo se encontrar
dirty, este é copiado para a memória principal (Write-Back).
Políticas de substituição
Numa situação normal de funcionamento, uma memória cache encontra-se completamente
utilizada.
Quando se decide trazer um novo conjunto de dados para memória cache, é necessário
proceder à remoção de um dos blocos armazenados. A política de substituição define o
processo de seleção do bloco a retirar, de entre aqueles que se encontram em posições
elegíveis para colocação do novo bloco.
Random
É substituído um bolo escolhido aleatoriamente. É de fácil implementação mas pode resultar
na substituição de blocos muito procurados, reduzindo a eficiência da cache.
19
LRU (Least Recently Used)
É selecionado para substituição o bloco cuja última utilização tenha ocorrido há mais tempo.
Permite normalmente resultados interessantes de eficiência. Requer a utilização de espaço
de armazenamento adicional para manter o estado de utilização de cada bloco. A
implementação natural deste algoritmo utiliza log 2(K) bits de memória adicional para cada
bloco o que corresponde a K*log2(K) bit para cada conjunto (set). Implementações otimizadas
podem utilizar apenas log2(K!) bits de memória adicional para cada conjunto (set).
A figura seguinte apresenta a árvore de decisão utilizada para uma cache de 4 vias. São
utilizados 3 bits para manutenção da informação de estado (h0, h1 e h2).
0 1
h0
0 1 0 1
h1 h2
Sempre que um dos blocos é referido (acedido), é atualizado o conjunto de bits de acordo
com a tabela de atualização apresentada. Apenas são atualizados os bits de estado
relevantes para o bloco referido. Os restantes bits são mantidos com o estado anterior.
Utilização Atualização
20
Estado Bloco a substituir Bloco referido Próximo estado
00x Line 0 Line 0 11_
01x Line 1 Line 1 10_
1x0 Line 2 Line 2 0_1
1x1 Line 3 Line 3 0_0
Métricas
A principal métrica para avaliação do desempenho de sistemas de memória é o tempo médio
de acesso à memória (AMAT) que depende dos tempos envolvidos na leitura de dados da
cache e da memória e da taxa de falhas na cache.
O conjunto total de falhas (NM) numa cache pode ser decomposto em 3 componentes (3Cs):
Compulsory (CompM), Capacity (CapM) e Conflit (ConfM).
21
A taxa de falhas obrigatórias é a taxa de falhas que ocorre mesmo com cache de dimensão
exagerada ou até infinita.
Taxa de sucessos
HR Número de hits / número de acessos
Hit Rate
Taxa de falhas número de misses / número de acessos.
MR
Miss Rate MR = 1-HR
Tempo de sucesso
HT tempo de resposta da cache num hit.
Hit time
Tempo de falha
MT tempo de resposta da cache num miss.
Miss time
Latência da memória Tempo de resposta do nível de cache/memória
ML
Memory latency seguinte.
22
Figura 20. Métricas básicas de memórias caches.
Figura 21. Componentes da taxa de falhas. A taxa de falhas de uma memória cache
pode ser decomposta em 3 componentes.
5. Caches Multi-nível
Num sistema com apenas um nível de cache, a penalidade por falha (MP) pode ser
determinada a partir da latência da memória principal, num sistema de cache multi-nível, a
penalização em caso de falha de um nível de cache pode ser determinado a partir da latência
do nível seguinte. Assumindo leituras sequenciais por Read-Through, a penalização por falha
na cache nível i pode ser aproximada pelo tempo médio de acesso ao nível seguinte (i+1) da
hierarquia de memória.
Nestes casos, MRi+1 representa a taxa local de falhas ocorridas na cache no nível i+1 que
pode ser avaliada como o número de falhas ocorridas sobre o número de tentativas de aceder
a este nível. Uma vez que um nível de cache que não seja o inicial só é consultado quando
ocorre uma falha no nível anterior, o número de tentativas no nível corresponde também ao
número de falhas do nível anterior.
23
NM i+1 NM i+1
MRi+1= =
N i+1 NM i
NM i i
MRgi = =MR 1 ×MR2×...×MRi =∏ MRi
N1 i=1
n
MRG=MRg n=∏ MRi
i=1
O tempo médio de acesso a uma hierarquia de memória com n níveis de cache pode ser
determinado a partir das taxas de falhas e das latências de cada um dos níveis.
i=1
[ k=1
]
=∑ HT i×∏ MR k =∑ [ HT i×MRgi−1 ]
i =1
6. Caches Auxiliares
24
Cache
Processor DRAM
Write Buffer
Figura 22. Buffer de Escrita. A escrita é efectuada do processador para a cache e
para o buffer escrita. A cópia do buffer de escrita para a memória principal
é efetuada pela ordem de chegada.
Nesta situação, a escrita é realizada, por Write-Through, do processador para a cache e para
o buffer de escrita em simultâneo. O controlador de memória efetua depois a escrita dos
conteúdos guardados no buffer de escrita para a memória principal.
O buffer de escrita é gerido por uma política do tipo FIFO. As escritas para a memória
principal são efetuadas pela ordem de chegada.
Uma vez que o buffer de escrita necessita de guardar os dados associados ao endereço
respetivo completo, o buffer de escrita pode ser implementado com uma memória
completamente associativa.
Cache de Falhas
A Cache de Falhas ou Miss-Cache é uma pequena memória associativa que colabora coma a
cache principal tentando reduzir as falhas devidas a conflitos da cache principal. Justifica-se
sobretudo para acompanhar caches de mapeamento direto e poder ser muito menor do que
a cache principal.
Se ocorrerem falhas em ambas as caches, considera-se que se verificou uma falha ( Miss) no
conjunto das duas caches. Nesta situação, bloco é lido da memória para a cache principal e
para a Miss-cache.
25
Address Data
from processor to processor
Direct-mapped
cache (D-M cache)
tag data
Data
from Memory
MRU entry
tag and comparator Data block
tag and comparator Data block Fully-associative
tag and comparator Data block miss-cache
tag and comparator Data block
LRU entry
Cache de Vítimas
Tal como a Cache de Falhas, a Cache de Vítimas ou Victim-Cache é uma pequena memória
associativa que colabora coma a cache principal tentando reduzir as falhas devidas a conflitos
da cache principal. Justifica-se sobretudo para acompanhar caches de mapeamento direto e
poder ser muito menor do que a cache principal.
Se ocorrerem falhas em ambas as caches, considera-se que se verificou uma falha ( Miss) no
conjunto das duas caches. Nesta situação, bloco é lido da memória para a cache principal. A
alocação de um novo bloco na cache pode exigir a substituição de blocos. Os blocos
substituídos da cache principal (vítimas da cache) são transferidos para a Victim-cache. Os
blocos substituídos na Victim-cache são eliminados.
26
Address Data
from processor to processor
Direct-mapped
cache (D-M cache)
tag data
Data
from Memory
MRU entry
tag and comparator Data block
tag and comparator Data block Fully-associative
tag and comparator Data block victim-cache
tag and comparator Data block
LRU entry
27
7. Exercícios
Exercício 1.
Um fabricante de módulos de processamento pretende adicionar à sua linha de
processadores uma memória cache associativa por conjuntos com 4 vias, que permita o
armazenamento de 256 blocos de 128 bits de dados e que possa ser utilizada com escritas
Write-Back com Allocation e substituições pseudo LRU.
b) O número de comparadores.
Exercício 2.
Durante a execução de um programa numa máquina com 2 níveis de cache, verificaram-se
10000 referências à memória, 800 falhas ( misses) na cache de nível 1 e 200 falhas (misses)
na cache de nível 2.
b) Determine as taxas de falhas (miss rate) locais e globais para ambas as caches.
28
Exercício 3.
Um sistema computacional com um período de clock de 1.25 ns, utiliza uma memória cache
com resposta em 1 ciclo de clock e uma memória principal com tempo de resposta de 75 ns.
Assumindo uma política de leitura do tipo Read-Through Sequencial e uma taxa de sucesso
(Hit Rate) de 98% na memória cache, qual deverá ser o tempo médio expetável de acesso à
memória?
Exercício 4.
Um sistema computacional com um período de clock de 1.25 ns, utiliza uma memória cache
nível 1 com tempo de resposta de 1.1 ns, uma memória cache nível 2 com tempo de resposta
de 10 ns e uma memória principal com tempo de resposta de 75 ns.
Soluções
Ex1.
a) MC = NB * BS = 256*128/8 = 4096 Bytes
b) Ncomparadores = K = 4
c)
NB 256
NSets= = =64
K 4
d)
BS
BO=log 2 ( AddrUnit )=log ( 1288 )=4 bits
2
29
e)
Ex2.
a)
N mem=NM 2=200
b)
NH 1 =N 1−NM 1=10000−800=9200
NM 1 800
MR1 =MRg1= = =8 %
N 1 10000
NM 2 NM 2 200
MR2 = = = =25 %
N2 NM 1 800
NM 2 ou
MRg2= =200 /10000=2 %
N1
30
Ex3.
MP=ML=75 ns
MR=1−HR=1−0.98=0.02
Ex4.
MP2=ML=75 ns
HT 2=10 ns
31