capacidade de “bit de dados” versus tamanho de “bit de sobrecarga”?

9

Estou um pouco preso porque não consigo encontrar nada que cubra a parte "data" do cache, tudo o que pesquisei 99,9% com o endereçamento do cache. A pergunta que me foi feita é redigida como tal

Contrast the difference between "data bit" capacity and "overhead bit" size
for the two caches.

Eu não quero a resposta, então eu não vou postar os tamanhos reais e o que não, eu estou apenas procurando uma direção para talvez um website ou uma explicação de como "contrastar" os dois. Qualquer ajuda possível é bem apreciada!

    
por Serguei Fedorov 05.07.2012 в 21:31
fonte

3 respostas

2

Não sei se você nos deu um contexto suficiente para essa pergunta, mas aqui vai.

Os caches precisam armazenar não apenas os dados reais em cache, mas também - para cada dado - o "índice" a que se refere. Portanto, quando você pesquisa o registro N, o cache deve conter não apenas o valor do registro N, mas também N - para que você possa realmente procurar os dados. E essa é uma maneira simplista de ver isso. Os caches podem ter outros metadados para indicar a validade e o último tempo de acesso, etc.

Exemplo # 1: um cache de bytes em um espaço de endereço de 32 bits

Cada entrada de cache tem que armazenar o valor de dados (8 bits) mais o endereço (32bits) = 40 bits,

Exemplo # 2: um cache de palavras de 32 bits em um espaço de endereço de 32 bits

Cada entrada de cache tem que armazenar o valor de dados (32 bits) mais o endereço (32bits) = 64 bits,

Você pode ver que o exemplo 1 tem uma sobrecarga significativamente maior.

Como sempre, a Wikipedia pode ajudar. Ссылка )

    
por Roddy 05.07.2012 / 21:41
fonte
2

Os caches armazenam dados, geralmente em matrizes de dados como SRAM, mas também têm sobrecarga. Eu particularmente não gosto dos termos "tamanho de bit de dados" e "tamanho de bit de sobrecarga", porque (a) há sobrecarga que não são células de bit de armazenamento, e (b) nem todas as células de bit são igualmente caras. Mas vamos seguir esses termos por enquanto.

Minha opinião é que o "tamanho de bit de sobrecarga" provavelmente se refere ao número de bits de tags que precisam ser armazenados para acessar o cache. Geralmente, eles são armazenados em uma matriz diferente, uma matriz de tags separada da matriz de dados. Compare com o número de bits de dados.

Aqui estão três exemplos simples:

Considere um cache de 32 KiB (kilobyte), com 64 linhas de cache de B (bytes). Normalmente, gostaríamos que os bits 0-5 do endereço fossem o deslocamento da linha de cache.

32 KiB / (64 B / linha) = & gt; 2 ^ (5 + 10) / 2 ^ 6 = & gt; 2 ^ 9 = & gt; 512 linhas de cache.

--- ++ Exemplo 1: mapeamento direto

Vamos imaginar que é um cache mapeado direto. Então, podemos tomar os próximos 9 bits, bits 6-14 do endereço, como um "índice" na matriz de linhas de cache.

Até aí tudo bem. Agora, para descobrir a tag, precisamos saber a largura total do endereço. Digamos que sejam 64 bits (embora a maioria das máquinas "64 bits" implementem apenas 40 ou 48 bits a partir de 2012). Para distinguir uma linha de cache de qualquer outra linha de cache que mapeie a mesma entrada no cache, precisamos armazenar os bits restantes do endereço, bits 15-63, 49 bits, como tag.

Um acesso a esse cache mapeado direto prossegue extraindo o índice, lendo a tag e os dados com esse índice, comparando a tag lida com a tag do endereço que estamos procurando, declarando um hit se eles corresponderem e uma falta se não, e assim por diante.

Sobrecarga: 49 bits de tag para cada 64B (512 bits) de dados.

Total:   * tag ou "overhead": 512 * 49 bits   * bits de dados: 512 * 512 = 32KiB = 256 Kib (kibi-bits).

--- ++ Exemplo 2: Associativo de Conjunto de 8 vias

Agora vamos imaginar que o cache é de 8 vias associativas. Isso significa que as 512 linhas serão divididas em 512/8 = 64 conjuntos, cada um contendo 8 linhas.

O deslocamento dentro de uma linha de cache ainda é bits 0-5.

No entanto, agora precisamos apenas de 6 bits como um índice para determinar o número do conjunto. Bits 6-11.

A tag precisa ser todos os bits restantes, bits 12-63, 52 bits no total.

Portanto, a sobrecarga de tag para um cache associativo de 8 vias é de 52 bits de tag para 512 bits de dados.

Total:    * tag: 512 * 52 bits    * dados: 512 Kib

Compare aos 49 bits da tag para mapeamento direto. O associativo de conjunto de 8 vias basicamente move log2 (8) mais bits para a tag; em geral, N-way define movimentos associativos ceil (log2 (N)) bits na tag.

--- ++ Exemplo 3: Totalmente Associativo

Este é o extremo do espectro de mapeamento direto. Ainda temos 512 bits de dados por linha de cache, mas agora todo o endereço de 64 bits, com exceção do offset de 6 bits, é tag. 58 bits de tag para totalmente associativo, versus 52 bits para 8-way, contra 49 bits para mapeamento direto.

Mas lembre-se que eu disse que não gosto do termo "overhead bits"? Os bits de tags em um cache totalmente associativo normalmente precisam ser não apenas bits de armazenamento comuns, mas também devem ter comparadores - basicamente portas XOR. Esses bits "CAM (Content Addressable Memory)" são geralmente mais caros que os bits comuns.

--- + Conclusão

Então, acho que isso é o que seu professor quer: uma comparação direta de bits de dados versus bits de tags. Este é um limite inferior na sobrecarga.

O espectro de mapeamento direto através do conjunto N-way associativo para totalmente associativo fornece um exemplo. Mas há outros aspectos do design do cache que afetam a sobrecarga. Por exemplo:

  • se você usar tamanhos de endereço diferentes, a sobrecarga de porcentagem será alterada. Por exemplo. Endereços de 32 bits teriam apenas 17 bits de tag no exemplo mapeado diredt, versus 49 bits para um endereço de 64 bits.

  • Se você alterar a função de indexação de cache, poderá ser necessário alterar o tamanho da tag. Por exemplo, existe algum benefício em ter um número primo de linhas de cache ou conjuntos em uma cache, e. 511 linhas em vez de 512 para um cache mapeado sdirect. Números primos como este reduziram os problemas de ressonância. Mas, de maneira simples, eles exigem o aumento da largura da tag para 58 bits de largura total.

  • esquemas como caches setoriais permitem que algumas partes dos bits da tag sejam compartilhadas.

E assim por diante.

Como para um site tutorial:

  • desculpe, eu não sei de um para esse tipo de novato. Mas eu procuraria no Google por notas de aula de muitas universidades.

  • meu site, Ссылка , aborda tópicos avançados em arquitetura de computadores. Mas esse tipo de coisa é muito básico, muito elementar, para eu colocar no comp.arch. Embora eu suponha que eu deveria escrever algumas explicações simples sobre o básico antes de passar para os tópicos avançados.Ocasionalmente eu escrevo tais tutoriais, como aqui, mas eu não os colecionei.

  • o newsgroup do USEnet, comp.arch, pode ser útil.

--- + Por que isso importa para os programadores no stackoverflow?

Este é principalmente um tópico de hardware.

Mas o código de ajuste dos programadores precisa entender coisas assim, para obter o melhor desempenho.

    
por Krazy Glew 20.09.2012 / 06:02
fonte
1

Desde que você marcou arquitetura de computador e eu estou supondo que esta é uma tarefa onde você é solicitado a fazer um "simulador" de cache em C ou algo do tipo. E que os "dois caches" na questão referem-se a dois tipos diferentes de caching (full associative, n-way, direct mapped ..). Nesse escopo, a questão está pedindo para você discutir a diferença entre os dois tipos de caches e principalmente a razão entre o tamanho do 'bit de sobrecarga' que aqui é a informação que o cache precisa para entradas de cache (bit válido, offset, tag) e " bit de dados ", que são os dados reais armazenados na linha de cache. Espero que isso ajude.

    
por acez 05.07.2012 / 21:42
fonte