Isto é o que eu acho que iria acontecer:
Se dois núcleos tentassem acessar o mesmo endereço na RAM, um teria que esperar o outro acessar a RAM. Na segunda vez em que cada núcleo tenta acessar o mesmo endereço, eles ainda podem ter essa RAM em cache, para que possam acessar seus respectivos caches simultaneamente .
Se dois núcleos tentassem acessar endereços diferentes na mesma RAM, um teria que esperar o outro acessar a RAM.
Em outras palavras, eu imagino que, para tarefas de programação intensivas em RAM, o multiprocessamento não ajudará muito, a menos que envolva a leitura do mesmo endereço na RAM várias vezes por núcleo.
Portanto, vários processadores / núcleos podem acessar a mesma RAM simultaneamente ou o que estou dizendo está correto?
multithreading
memory
cpu
multiprocessing
Hobbit Perdido
fonte
fonte
nop
s em seu código de montagemRespostas:
Resumo: geralmente é possível que um único núcleo sature o barramento de memória se o acesso à memória for suficiente.
Se você estabelecer a largura de banda da memória da sua máquina, poderá ver se um processo de thread único pode realmente conseguir isso e, se não, como a largura de banda efetiva usa a escala com o número de processadores.
Os detalhes dependerão da arquitetura que você está usando. Supondo algo como SMP e SDRAM modernos:
poderia seguir várias maneiras:
os dois querem ler simultaneamente:
se ambos querem escrever:
dois núcleos no mesmo chip estarão gravando no mesmo cache e isso só precisará ser liberado na RAM uma vez. De fato, como a memória será lida e gravada na RAM por linha de cache, as gravações em endereços distintos, mas suficientemente próximos, podem ser combinadas em uma única gravação na RAM
dois núcleos em chips diferentes têm um conflito, e a linha de cache precisará ser gravada de volta na RAM pelo chip1, buscada no cache do chip2, modificada e depois gravada novamente (não há idéia se a gravação / busca pode ser unida por bisbilhotar)
Para um único acesso, a latência do CAS significa que duas operações podem ser potencialmente intercaladas para não demorar mais (ou talvez apenas um pouco mais) do que se o barramento estivesse ocioso.
fonte
Existem muitas arquiteturas de máquinas diferentes por aí, cada uma com seu próprio conjunto de recursos. Uma categoria de máquinas de multiprocessamento é chamada MISD , para Dados Únicos de Múltiplas Instruções, e essas máquinas são projetadas para fornecer os mesmos dados a vários processadores, todos ao mesmo tempo. Uma classe relacionada de máquinas conhecida como arquiteturas SIMD (dados múltiplos de instrução única) é muito mais comum e também fornece acesso à mesma memória ao mesmo tempo, mas a memória contém instruções em vez de dados. No MIMD e no SIMD, "acesso" significa acesso de leitura - você pode imaginar o problema que teria se duas unidades tentassem gravar no mesmo local ao mesmo tempo!
fonte
Embora a maioria das respostas se aproxime do lado do modelo de software e / ou hardware, a maneira mais limpa é considerar como os chips físicos de RAM funcionam. (O cache está localizado entre o processador e a memória e simplesmente usa o mesmo barramento de endereços, e sua operação é completamente transparente para o processador.) Os chips de RAM têm um único decodificador de endereço, que recebe o endereço da célula de memória, chegando ao o barramento de endereços (e da mesma forma um barramento de dados, dentro ou fora). As memórias atuais são construídas na "abordagem de processador único", ou seja, um processador é conectado através de um barramento a um chip de memória. Em outras palavras, esse é o "gargalo de von Neumann", pois todas as instruções devem fazer referência à memória pelo menos uma vez. Por esse motivo, em um fio (ou fios, também conhecido como barramento), apenas um sinal pode existir por vez, portanto, o chip de RAM pode receber um endereço de célula por vez. Até que você possa garantir que os dois núcleos coloquem o mesmo endereço no barramento de endereços, o acesso simultâneo ao barramento por dois drivers de barramento diferentes (como núcleos) não é fisicamente possível. (E, se for o mesmo, é redundante).
O resto é a chamada aceleração de hardware. O barramento de coerência, o cache, o acesso SIMD etc. são apenas algumas fachadas agradáveis em frente à RAM física, sua pergunta era sobre. Os aceleradores mencionados podem cobrir a luta pelo uso exclusivo do barramento de endereços, e os modelos de programação não têm muito a ver com sua pergunta. Observe também que o acesso simultâneo também seria contra a abstração "espaço de endereço privado".
Então, para as suas perguntas: o acesso direto simultâneo à RAM não é possível, nem com o mesmo nem com endereços diferentes. O uso do cache pode cobrir esse fato e, em alguns casos, permitir acesso aparentemente simultâneo. Depende do nível e da construção do cache, bem como da localidade espacial e temporal dos seus dados. E sim, você está certo: o processamento multi-core sem acesso aprimorado à RAM não ajudará muito em aplicativos que usam muita RAM.
Para uma melhor compreensão: lembre-se de como o Direct Memory Access funciona. Tanto a CPU quanto o dispositivo DMA podem colocar o endereço no barramento, de modo que eles precisam se excluir do uso simultâneo do barramento.
fonte
Você não se preocupa com a RAM física, mas se preocupa mais com a memória virtual e o espaço de endereçamento de processos ou threads (todos os threads do mesmo processo compartilham um espaço de endereço comum) na prática.
Obviamente, se você estiver codificando um kernel de sistema operacional com vários núcleos, preocupa-se muito com a RAM e a coerência do cache.
A maioria dos processadores multinúcleo possui algum tipo de mecanismo de coerência de cache . Os detalhes são específicos do processador. Como o processador está usando caches de CPU , eles às vezes se comportam como se vários núcleos do processador estivessem acessando o mesmo local de memória simultaneamente.
Padrões recentes de linguagens industriais como C11 ou C ++ 11 têm algum modelo de memória ( compatível com vários segmentos) .
fonte
As CPUs modernas estão fisicamente ligadas aos seus dispositivos de memória externa para obter a largura de banda máxima de transferência de dados. Isso ocorre devido aos requisitos de integridade do sinal (comprimento do traço, terminação, inclinação do relógio, etc.) necessários para sustentar as altas taxas de transferência. Por exemplo, em uma placa-mãe com várias CPUs, cada CPU possui um conjunto dedicado de slots DIMM. Independentemente do que os programadores de software possam pensar, uma CPU não pode simplesmente acessar dados de memória externa de outra CPU. O software de gerenciamento de memória de um sistema, seja no nível do kernel do sistema operacional, no Hypervisor, nos núcleos do plano de dados ou de outra forma, lida com a transferência de dados de memória entre CPU.
fonte