Buscar

Mapeamento Cache pratica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Arquitetura de Computadores
Aula Pra´tica
Prof. Pedro Carlos da Silva Lara
Centro Federal de Educac¸a˜o Tecnolo´gica Celso Suckow da Fonseca
Mapeamento da Memo´ria Cache
1 Mapeamento Direto
Esta pra´tica tem o objetivo de simular o mapeamento entre a memo´ria principal e a memo´ria cache. Cada bloco da
memo´ria principal e´ mapeado em uma linha da cache seguindo a seguinte equac¸a˜o:
i = j mod m,
onde,
• i e´ a i-e´sima linha de cache
• j e´ j-e´simo bloco da memo´ria principal
• m e´ o nu´mero de blocos da cache.
Seja s tal que a memo´ria principal possua 2s blocos de 2w bytes. Enta˜o o mapeamento e´ feito usando a seguinte
lo´gica
Linha da Cache Poss´ıveis Blocos da Mem. Principal
0 0, 2m, 3m, . . . , 2s −m
1 1, 2m+ 1, 3m+ 1, . . . , 2s −m+ 1
2 2, 2m+ 2, 3m+ 2, . . . , 2s −m+ 2
...
...
m− 1 m− 1, 2m+m− 1, 3m+m− 1, . . . , 2s − 1
Considerando m = 2r enta˜o temos um valor de s − r bits que identifica unicamente um bloco (entre os poss´ıveis)
alocado na memo´ria cache. Chamaremos de ro´tulo. Assim a cache armazena em cada linha s− r bits para representar
o ro´tulo mais 2w bytes para representar os dados efetivamente. O mapeamento e´ feito usando a seguinte configurac¸a˜o
do enderec¸o.
s− r bits (ro´tulo) r bits (linha da cache) w bits (palavra no bloco)
Exemplo Considere uma memo´ria principal com 16MB (ou seja, 224 bytes) e blocos de 22 bytes. Assim, s = 22 e
w = 2. Considere tambe´m uma memo´ria cache com 214 linhas (assim, r = 14). Desta forma o bloco 0x8FB314 da
memo´ria principal possui as seguintes caracter´ısticas:
Formato Ro´tulo Linha de Cache Palavra no bloco
Bina´rio 1000 1111 1011 0011 0001 01 00
Hexadecimal 8F 2CC5 0
Vamos supor que este bloco tenha os seguites 4 bytes armazenados 0xF134CC1A enta˜o a cache ficaria
Enderec¸o da Cache (linha) Ro´tulo Bloco
0x2CC5 0x8F 0xF134CC1A
14 bits 1 byte 4 bytes
Exerc´ıcio Considerando este exemplo crie um programa para simular o comportamento de uma cache com mape-
amento direto. O programa deve ser escrito em linguagem C e deve possuir as seguintes funcionalidades:
• Um vetor de 224 bytes para representar a memo´ria principal.
• Um vetor de 214 · 5 bytes para representar a memo´ria cache.
• Uma func¸a˜o que verifica se um dado esta´ na cache com a seguinte assinatura
int acessaCache( byte * cache, int endereco );
Retorna o byte requerido caso ele esteja na cache (cache hit) ou -1 se na˜o esta´ (cache miss). Este enderec¸o possui
24 bits.
• Uma func¸a˜o para copiar um bloco da memo´ria principal para a cache.
int copiarParaCache( byte * cache, byte * RAM, int endereco );
Neste caso os u´ltimos 2 bits do enderec¸o sera˜o desprezados. O acesso completo a memo´ria devera´ ser implementado
da seguinte forma:
int valor = acessaCache(cache, endereco);
if( valor == -1 ) {
cacheMiss++;
copiarParaCache(cache, RAM, endereco);
} else
cacheHit++;
• Com estas func¸o˜es implementadas fazer um procedimento para contar a proporc¸a˜o de cache hit
PCacheHit =
CacheHit
CacheHit+ CacheMiss
quando:
1. o acesso e´ completamente aleato´rio (use um valor grande de acessos).
2. o acesso e´ em apenas um array de 1024 bytes alocado na posic¸a˜o 0x0F12B8.
3. o acesso e´ em feito alternadamente em dois arrays com 128 bytes. O primeiro esta´ alocado na posic¸a˜o
0x310018 e o segundo esta´ na posic¸a˜o 0x4312BC.
4. o acesso e´ em feito alternadamente em dois arrays com 128 bytes. O primeiro esta´ alocado na posic¸a˜o
0x4A0004 e o segundo esta´ na posic¸a˜o 0xFF0004.
• Torne o programa geral. Ou seja, crie as memo´rias principal e cache usando paraˆmetros s, r e w. Sugira um
tamanho adequado para uma cache quando a memo´ria principal possui 4MB?
Explique os valores obtidos nos itens 1, 2, 3 e 4.
2 Mapeamento Associativo
O mapeamento direto executa uma lo´gica simples para mapear a memo´ria principal na memo´ria cache. Pore´m a
desvantagem e´ que cada bloco da memo´ria principal e´ mapeado em uma posic¸a˜o fixa na memo´ria cache. O enderec¸o
de 24 bits e´ mapeado da seguinte forma:
r = 22 bits (ro´tulo) w = 2 bits (palavra no bloco)
E a cache fica
Linha da Cache Ro´tulo Bloco
14 bits 22 bits 32 bits
O problema desta implementac¸a˜o e´ que temos que comparar todas as linhas da cache para, por exemplo, encontrar
um cache miss.
Exerc´ıcio Implemente a func¸a˜o int acessaCacheAss( byte * cache, int endereco ); usando o mapeamento
associativo usando a te´cnica de substituic¸a˜o aleato´ria.
2
2.1 Mapeamento Associativo por Conjuntos
Esta organizac¸a˜o diminue a quantidade de comparac¸o˜es executadas no mapeamento associativo. Neste caso, temos v
conjuntos com k linhas cada. Temos as seguintes equac¸o˜es
m = v · k
i = j mod v
• v e´ a quantidade de conjuntos.
• k e´ a quantidade de linhas por conjunto.
• i e´ o nu´mero do conjunto na cache.
• j e´ o nu´mero do bloco na memo´ria principal.
Assim, um bloco j na memo´ria principal pode ser mapeado em qualquer bloco do conjunto i na cache. Quando
temos v = m e k = 1 esta te´cnica se reduz ao mapeamento direto. Para v = 1 e k = m esta te´cnica se reduz ao
mapeamento associativo.
Exerc´ıcio Implemente a func¸a˜o int acessaCacheAssConj( byte * cache, int endereco ); usando o mapea-
mento associativo por conjuntos usando v = m/4 e k = 4. Com m = 214 O enderec¸o da memo´ria principal e´ dividido
da seguinte forma:
(ro´tulo) 10 bits (conjunto da cache) 12 bits (palavra no bloco) 2 bits
Ja´ o armazenamento da cache fica
Linha da Cache Ro´tulo Bloco
14 bits 10 bits 32 bits
3

Outros materiais