Como calcular o número de tags, índices e bits de deslocamento de caches diferentes?

18

Especificamente:

1) Um cache mapeado diretamente com 4096 blocos / linhas em que cada bloco possui 8 palavras de 32 bits. Quantos bits são necessários para os campos de tag e índice, assumindo um endereço de 32 bits?

2) Mesma pergunta que 1) mas para cache totalmente associativo ?

Corrija-me se eu estiver errado, é isso:

tag bits = endereço bit length - expoente do índice - expoente do deslocamento?

[O deslocamento = 3 é devido a 2 ^ 3 = 8 ou é 5 de 2 ^ 5 = 32?]

compski
fonte
algumas explicações sobre tag, índice e deslocamento em cs.stackexchange.com/questions/33818/...
Ran G.

Respostas:

20

A pergunta como afirmada não é totalmente responsável. Uma palavra foi definida como sendo de 32-bits. Precisamos saber se o sistema é "endereçável por byte" (você pode acessar um pedaço de dados de 8 bits) ou "endereçável por palavra" (o menor pedaço acessível é de 32 bits) ou mesmo "endereçável por meia palavra" (o o menor pedaço de dados que você pode acessar é de 16 bits.) Você precisa saber isso para saber o que o bit de menor ordem de um endereço está dizendo.

Então você trabalha de baixo para cima. Vamos supor que o sistema seja endereçável em bytes .

Então, cada bloco de cache contém 8 palavras * (4 bytes / palavra) = 32 = 2 5 bytes, portanto, o deslocamento é de 5 bits.

O índice para um cache mapeado direto é o número de blocos no cache (12 bits, neste caso, porque 2 12 = 4096).

Então a tag é todos os bits restantes, como você indicou.

À medida que o cache se torna mais associativo, mas permanece o mesmo tamanho, há menos bits de índice e mais bits de tag.

Lógica Errante
fonte
yup-lo de endereçável byte mas a questão Olhei para não mencionar especificamente
compski
3

Sua fórmula para bits de tag está correta.

Se o deslocamento é de três ou cinco bits, depende se o processador usa o byte (octeto) ou o endereçamento de palavras. Fora dos DSPs, quase todos os processadores recentes usam endereçamento de bytes, portanto, seria seguro assumir o endereçamento de bytes (e cinco bits de deslocamento).

Paul A. Clayton
fonte
Eu não sabia que havia tais distinções, sim, é byte de endereçamento
compski
1
Antes de meados da década de 1970, poderíamos razoavelmente supor que uma "palavra" era do tamanho da menor unidade de dados endereçável. Esta tabela na página da Wikipedia sobre palavra é divertido (se você gosta desse tipo de coisa, (que eu).)
Wandering Logic
1

Estou aprendendo para o exame final da disciplina Sistema de Computação, pesquisei por um tempo e encontrei essa pergunta. E essa parte da pergunta é confusa: "na qual cada bloco possui 8 palavras de 32 bits". Como uma palavra tem 4 bytes (ou 32 bits), a pergunta precisa ser "... na qual cada bloco possui 8 palavras"

A resposta é: - Cada bloco tem 32 bytes (8 palavras); portanto, precisamos de 5 bits de deslocamento para determinar qual byte em cada bloco - Mapeado direto => número de conjuntos = número de blocos = número de blocos = 4096 => precisamos de 12 bits de índice para determinar qual conjunto

=> bit tag = 32 - 12 - 5 = 15

Para totalmente associativo, o número do conjunto é 1 => sem bit de índice => bit de tag = 32 - 0 - 5 = 27

Hoang Trinh
fonte
1

Não há bits de índice em um cache totalmente associativo. Os bits de índice são usados ​​para identificar exclusivamente a qual conjunto o bloco pertence. Em um cache totalmente associativo, todos os blocos fazem parte do mesmo conjunto.

Steph
fonte
-1

no índice de mapeamento de associado completo é 0 b / s, como você diz set = 1, então index = log de 1 na base 2 = 0 set offset = log do tamanho do bloco da base de bytes 2, então use 8 = 2 ^ 3 ou 32 = 2 ^ 5 tag = 32-0-5 = 27 para índice direto = 2 ^ 12 = 12 offset = 0 bit tag = 32-12-0 = 20

user96559
fonte
Acho isso muito impossível de ler. Por favor, use alguma pontuação.
David Richerby