Pergunta

Pré-Informação:

Tenho certeza que alguém perguntou a algo nessas linhas, mas não importa como eu não consigo encontrar uma resposta definitiva

Pergunta:

A RAM obtém algum tipo de indicação quanto a quantos dados a CPU exige ou existe uma quantidade definida de dados e se a CPU precisar de mais, ela precisará ligar novamente (e qual é essa quantidade de dados definidos). < / p >.

Durante uma falta de cache, a CPU exigirá pelo menos uma única linha de cache (32, 64 ou 128 bytes). A CPU precisa consultar a RAM várias vezes para obter uma única linha de cache (assumindo que o valor definido é de 8 bytes) ou o RAM retorna mais dados por chamada ou a RAM tem alguma maneira de ser notificado quanto a quantos dados são necessários?

Estou ciente de que a CPU provavelmente vai ligar mais do que apenas uma única linha de cache para evitar a longa solicitação da RAM se mais dados forem necessários no futuro do mesmo bloco de memória.

Pontos Extra:

Se você conhece e ter mais informações, os seguintes extras também me interessam:

  • Se isso é diferente, dependendo da CPU fazer (diferenças geracionais também podem ser interessantes, mas se você adicionar informações sobre isso, por favor, pule as gerações semelhantes)
  • Se isso for diferente, dependendo do tipo RAM
  • Como a CPU pode solicitar uma linha de cache ou tamanho de bloco diferente (aplica-se apenas se a RAM retornar um tamanho fixo que é o tamanho de uma linha de bloco ou cache)
  • Qualquer outra informação ou recursos relevantes úteis para leitura adicional

Resposta Potencial:

Parece que pareço ter encontrado uma pista para a resposta ao olhar para a taxa de transferência de RAM, especificamente onde indica como calcular a taxa de transferência das especificações e de "DDR SDRAM PrefoCh Architecture", que indica quantos 64 bits " blocos "podem ser solicitados por chamada à RAM (por exemplo, 8 para DDR3 e DDR4, 4 para DDR2 e 2 para DDR1)

Foi útil?

Solução

Na maioria dos hardware moderno, a memória principal é mais como um periférico.

O que eu vou descrever no que se segue é o hardware da Intel-Esque PC-ish, mas é muito semelhante em outros sistemas.

Durante a inicialização inicial, quando a energia é aplicada pela primeira vez, a CPU tem apenas cache, firmware e alguma E / S mapeada por memória. Um dos primeiros trabalhos é iniciar uma peça externa de hardware tradicionalmente conhecida como o "controlador de memória" ou "hub do controlador de memória" (no hardware do PC, faz parte do Northbridge), que se comunica diretamente com módulos RAM.

Eu digo "módulos de RAM", porque eles são realmente como periféricos, como eu disse. O hardware pede ao módulo quanto a memória está presente e também negocia os detalhes do protocolo que eles usarão para transferir dados para e da memória principal.

Como outros periféricos modernos, os modelos de RAM moderno podem explodir lê e escreve, isto é, eles podem ler e escrever um "bloco" maior de memória usando uma operação de transferência. Portanto, mesmo que o nível "último" de cache opere com o mesmo tamanho da linha de cache que cache de nível inferior, ele pode transferir blocos maiores de dados de e para a RAM do que isso.

Esta é uma otimização útil ao executar operações como varreduras lineares através de um bloco de memória. Alguma combinação dos controladores de CPU e Cache pode detectar isso e usar essas informações para emitir uma pré-busca da RAM.

Outras dicas

RAM só recebe solicitações de dados para mover / para a CPU (realmente o MMU).Os dados são movidos em unidades de linhas de cache.

Atualmente, os tamanhos de cache geralmente são tão grandes que mais de uma transferência da RAM para o cache é necessário para carregar completamente uma linha de cache.Mas a leitura da RAM leva tempo para a RAM para receber o endereço dos dados a serem lidos e, em seguida, tempo para a transferência real, e pedir RAM para executar dizer quatro transferências em uma linha é muito mais rápido do que acessar quatro locais de memória aleatória.

Alguns processadores têm um recurso que permite dizer a RAM em que a fim de transferir diferentes partes de uma linha de cache.Digamos que existem quatro transferências necessárias para preencher uma linha de cache, então você gostaria de carregar a linha de cache de trimestre primeiro que é realmente necessária (e, em seguida, preencher o resto).

Seria possível apenas preencher parcialmente uma linha de cache (e prosseguir preenchendo uma linha de cache diferente, em vez de preencher completamente o primeiro).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange
scroll top