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?]
computer-architecture
cpu-cache
compski
fonte
fonte
Respostas:
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.
fonte
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).
fonte
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
fonte
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.
fonte
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
fonte