Como a CPU escreve informações para ram?

10

A minha pergunta é, como é que a CPU escreve dados para o RAM?

Pelo que entendi, os processadores modernos 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 perto do endereço desejado pela CPU) no cache de nível mais alto, a CPU pergunta progressivamente os diferentes caches para enviar pedaços cada vez menores de dados pelos níveis de caches até que ele esteja no cache de nível 1, que será lido diretamente em um registrador de CPU.

Como esse processo funciona quando a CPU grava na memória? O computador retrocede os níveis de cache (na ordem inversa em comparação à leitura)? Se sim, 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 leitura? O que acontece se eu estiver escrevendo continuamente para a RAM, como no caso de um tipo de bucket?

Agradecemos antecipadamente

-Faken

Edit: Eu ainda não consegui uma resposta que eu possa aceitar totalmente. Eu quero saber especialmente sobre a parte de sincronização da gravação de RAM. Eu sei que escrevemos para o cache L1 diretamente da CPU e que os dados são baixados nos níveis de cache conforme 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 sincronizam e scynocronizam com a RAM principal e quão rápidas são suas velocidades em relação aos comandos de leitura.

    
por Tom Wijsman 24.08.2009 / 09:39

2 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 qualquer armazenamento em 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 gravar no endereço A e no endereço B, a memória A será gravada antes da memória B, independentemente do armazenamento em cache. O cache só afeta quando a memória física é atualizada, e isso depende do tipo de cache usado (veja o link acima). Algumas CPUs também podem armazenar dados de forma não temporal, isto é, as gravações podem ser reordenadas para aproveitar ao máximo a largura de banda da memória. Então, escrevendo para A, então B, então (A + 1) poderia ser reorderdado para escrever para A então A + 1 em uma única rajada, então B.

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

Claro, o acima é voltado para processadores Pentium. Outros processadores podem fazer coisas de outras maneiras. Tomemos, 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 (na PS3 existem oito células, uma das quais está sempre desativada para melhorar os rendimentos). Cada célula tem sua própria memória local, uma espécie de cache L1 que nunca é gravada na RAM do sistema. Os dados podem ser transferidos entre essa RAM local e a RAM do sistema usando transferências DMA (acesso direto à memória). A célula pode acessar a RAM do sistema e a RAM de outras células usando o que parece ser uma leitura e uma gravação normais, mas isso apenas desencadeia uma transferência de DMA (por isso é lento e deve ser evitado). A idéia por trás desse sistema é que o jogo não é apenas um programa, mas muitos programas menores que combinam para fazer a mesma coisa (se você conhece * nix, é como programar programas de linha de comando para realizar tarefas mais complexas).

Para resumir, escrever para RAM costumava ser muito 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

    
por 24.08.2009 / 12:58
2

sim, vai para trás os níveis de cache e salvar na memória, mas a nota importante é no sistema Multi Processing o cache é compartilhado entre 2 ou mais processador (core) e os dados devem ser consistentes isso foi feito por fazer cache compartilhado para todos os multiprocessadores ou cache diferente, mas economizar consistência usando a seção Critical (se os dados em um cache forem alterados, forçá-lo a gravar na memória e atualizar outro cache)

    
por 24.08.2009 / 09:46