Como a CPU grava informações no RAM?

10

Minha pergunta é: como a CPU grava dados no RAM?

Pelo que entendi, as CPUs modernas usam diferentes níveis de cache para acelerar o acesso à memória RAM. A RAM obtém um comando para obter informações e, em seguida, envia uma explosão de dados para a CPU, que armazena os dados necessários (e um monte de dados extras que estavam próximos do endereço que a CPU queria) no cache de nível mais alto, a CPU solicita progressivamente os caches diferentes para enviar pedaços cada vez menores de dados para baixo dos níveis de caches até chegar ao cache de nível 1, que é lido diretamente em um registro da CPU.

Como esse processo funciona quando a CPU grava na memória? O computador diminui os níveis de cache (na ordem inversa à da leitura)? Em caso afirmativo, que tal sincronizar as informações nos diferentes caches com a memória principal? Além disso, como a velocidade de uma operação de gravação é comparada a uma operação de leitura? O que acontece se eu estiver gravando continuamente na RAM, como no caso de uma classificação de bucket?

Desde já, obrigado,

-Faken

Edit: Eu ainda não recebi uma resposta que eu possa aceitar completamente. Quero saber especialmente sobre a parte de sincronização da gravação em RAM. Eu sei que gravamos no cache L1 diretamente da CPU e que os dados são empurrados para baixo dos níveis de cache, à medida que sincronizamos os diferentes níveis de caches e, eventualmente, a RAM principal é sincronizada com o cache de nível mais alto. No entanto, o que eu gostaria de saber é QUANDO os caches são sincronizados e sincronizados com a RAM principal e com que rapidez são suas velocidades em relação aos comandos de leitura.

Tamara Wijsman
fonte

Respostas:

11

Ah, essa é uma daquelas perguntas simples que têm respostas realmente complexas. A resposta simples é: bem, depende de como a gravação foi feita e que tipo de cache existe. Aqui está uma cartilha útil sobre como os caches funcionam .

As CPUs podem gravar dados de várias maneiras. Sem nenhum cache, os dados são armazenados na memória imediatamente e a CPU aguarda a conclusão da gravação. Com o armazenamento em cache, a CPU geralmente armazena dados na ordem do programa, ou seja, se o programa grava no endereço A e depois no endereço B, a memória A será gravada antes da memória B, independentemente do cache. O armazenamento em cache afeta apenas quando a memória física é atualizada, e isso depende do tipo de armazenamento em cache usado (consulte o link acima). Algumas CPUs também podem armazenar dados de forma não temporal, ou seja, as gravações podem ser reordenadas para aproveitar ao máximo a largura de banda da memória. Então, escrever para A, depois B e, em seguida, (A + 1) pode ser reordenado para escrever para A, então A + 1 em uma única sequência, depois B.

Outra complicação é quando mais de uma CPU está presente. Dependendo da maneira como o sistema foi projetado, as gravações de uma CPU não serão vistas por outras CPUs porque os dados ainda estão no cache da primeira CPU (o cache está sujo). Em vários sistemas de CPU, fazer o cache de cada CPU corresponder ao que está na memória física é denominado consistência de cache. Existem várias maneiras pelas quais isso pode ser alcançado.

Obviamente, o exposto acima é voltado para processadores Pentium. Outros processadores podem fazer as coisas de outras maneiras. Veja, por exemplo, o processador Cell do PS3. A arquitetura básica de uma CPU Cell é um núcleo PowerPC com vários núcleos Cell (no PS3 existem oito células, uma das quais sempre desativada para melhorar os rendimentos). Cada célula possui sua própria memória local, como um cache L1 que nunca é gravado na RAM do sistema. Os dados podem ser transferidos entre essa RAM local e a RAM do sistema usando transferências DMA (Direct Memory Access). A célula pode acessar a RAM do sistema e a RAM de outras células usando o que parece normal lê e grava, mas isso apenas aciona uma transferência de DMA (portanto é lenta e realmente deve ser evitada). A idéia por trás desse sistema é que o jogo não é apenas um programa,

Em resumo, escrever na RAM costumava ser realmente simples nos dias em que a velocidade da CPU correspondia à velocidade da RAM, mas à medida que a velocidade da CPU aumentava e os caches eram introduzidos, o processo se tornava mais complexo com muitos métodos diferentes.

Skizz

Skizz
fonte
2

sim, é retroceder os níveis de cache e salvar na memória, mas a observação importante é que no sistema de multiprocessamento o cache é compartilhado entre 2 ou mais processadores (núcleo) e os dados devem ser consistentes, isso foi feito através da criação de cache compartilhado para todos os multiprocessadores ou cache diferente, mas economize consistência usando a seção Crítica (se os dados em um cache forem alterados, forçará a gravação na memória e a atualização de outro cache)

Am1rr3zA
fonte