A RAM acessa a CPU lenta?

2

Ontem eu estava pensando, quando a CPU x86 atual quer acessar a memória, existe alguma diferença de velocidade entre eles. Normalmente, a RAM opera a 1333MHz no caso de alguns novos processadores da Intel. Mas o próprio processador trabalha a cerca de 3,2 GHz.

Então, quando a CPU deseja acessar a memória, ela define o endereço para endereçar o barramento, dados para o barramento de dados ( digamos que queremos gravar e), e agora a CPU tem que esperar o tempo extra para memória, ou há algum como controlador rápido da CPU que lida com esse tempo de espera e a CPU pode fazer mais algumas operações?

    
por user32569 14.07.2010 / 09:17

6 respostas

2

when CPU want to access memory, it sets the adress to adress bus, data to data bus (lets say we want to write), and now, does the CPU have to wait the extra time for memory

Do artigo de memória infame de Ulrich Drepper ...

For write operations the CPU does not necessarily have to wait until the value is safely stored in memory. As long as the execution of the following instructions appears to have the same effect as if the value were stored in memory there is nothing which prevents the CPU from taking shortcuts. It can start executing the next instruction early. With the help of shadow registers which can hold values no longer available in a regular register it is even possible to change the value which is to be stored in the incomplete write operation.

Editar: Obviamente, para as leituras, todas as apostas estão desativadas - tenho quase certeza de que você precisa aguardar que os dados sejam lidos antes de operá-los;) Como outros já disseram, esses atrasos podem ser menores se forem provenientes de um cache ou maiores se forem acessados. memória principal.

    
por 14.07.2010 / 11:23
5

Na maioria das CPUs, uma pequena quantidade de memória cache fica entre a CPU e a memória principal, mantendo o código e os dados que a CPU está atualmente trabalhando, bem como tentando ler proativamente a memória principal mais lenta (ou a partir da próxima nível de cache).

    
por 14.07.2010 / 09:19
2

does the CPU have to wait the extra time for memory

Sim, é verdade. De fato, o problema que você descreve é um dos maiores desafios que os projetistas de CPU e sistema enfrentam ao projetar o hardware atual: o acesso RAM é tipicamente pelo menos uma ordem de magnitude mais lenta que as operações dentro da CPU, então o acesso à RAM precisa ser minimizado .

Essa é a razão pela qual todas as CPUs modernas têm caches de CPU , mas até eles podem apenas atenuar o problema.

or is there some as CPU fast controller that handles that waiting time and CPU can do some more oparations

Em geral, isso não é possível, pois quando a CPU está esperando por dados da RAM, ela geralmente não pode continuar sem os dados. Com técnicas como hyperthreading a CPU pode mudar para executar um thread de software diferente enquanto está aguardando, mas isso requer suporte do software em execução (ele deve usar threads).

Em alguns casos, a CPU pode fazer algo útil enquanto espera pela memória, usando "truques" como de execução de pedidos e execução especulativa , mas isso nem sempre é possível. As respostas de Andy e harrymc também explicam isso.

Para uma discussão extensiva desses problemas, há um excelente artigo:

O que todo programador deve saber sobre a memória , de Ulrich Drepper

    
por 14.07.2010 / 11:16
1

Se a CPU tiver que esperar pela RAM (e nas velocidades atuais da CPU isso inclui cache L2 / L3 no dado da CPU) a CPU terá que esperar. Isso faz o processamento lento (um thread rodando a 100% da CPU pode estar gastando a maior parte de seus ciclos ociosos esperando na RAM).

É por isso que a consideração do layout de dados na memória (quando as linhas de cache são cruzadas) pode ter um grande efeito no desempenho do código de processamento de dados restrito).

(Correção para questionar: a última RAM DDR3 vai significativamente além de 1333, 1600 é comum e mais rápida está disponível sem considerar o overclocking.)

    
por 14.07.2010 / 11:04
1

is there some as CPU fast controller that handles that waiting time and CPU can do some more operations

Sim, mas você precisaria de um computador com vários núcleos para que isso acontecesse e com mais de um thread usando ativamente a CPU.

Esta é a razão pela qual o planejador do sistema operacional tenta distribuir os encadeamentos o mais uniformemente possível entre os núcleos, e por que cada núcleo normalmente vem com sua própria memória cache, para evitar esperas entre núcleos.

Na verdade, ao comprar um computador com vários núcleos, deve-se prestar atenção ao tamanho do cache de memória e, especificamente, se a quantidade reivindicada para o modelo de computador é o cache total de todos os núcleos, de modo que cada núcleo usa apenas uma fração do total.

    
por 14.07.2010 / 11:58
1

"... digamos que queremos escrever ... a CPU tem que esperar o tempo extra para a memória, ou há algum como controlador rápido da CPU que lide com esse tempo de espera e a CPU pode fazer mais algumas operações?" / p>

Sim, CPUs de alto desempenho possuem caches e uma unidade de interface de barramento e um buffer de gravação para que, após a CPU fazer uma STORE, o restante da CPU possa continuar a processar instruções na maioria dos casos imediatamente. cache e unidade de interface de barramento e identificador de buffer de gravação enviando esses dados para a memória principal.

Algumas CPUs priorizam as instruções LOAD, portanto, quando a instrução STORE é imediatamente seguida por uma instrução LOAD, a CPU carrega os dados solicitados da RAM antes de armazenar os dados na RAM.

    
por 01.09.2010 / 05:12

Tags