O que é "memória coalescente"?


16

Eu vim a saber que a unidade de processamento gráfico tem algo chamado coalescência de memória. Ao ler sobre isso, não fui claro sobre o assunto. Isso está relacionado ao paralelismo no nível de memória.

Pesquisei no Google, mas não consegui obter uma resposta satisfatória.

Seria útil se alguém desse uma explicação mais abrangente e fácil de entender.


Paralelismo no nível da memória (MLP) é a capacidade de executar várias transações de memória ao mesmo tempo. Em muitas arquiteturas, isso se manifesta como a capacidade de executar uma operação de leitura e gravação ao mesmo tempo, embora também exista normalmente como sendo capaz de executar várias leituras ao mesmo tempo. É raro executar várias operações de gravação de uma só vez, devido ao risco de possíveis conflitos (tentando gravar dois valores diferentes no mesmo local). Observe que isso não é o mesmo que operações de memória vetorizada, como a leitura de 4 valores de 8 bits separados, mas contíguos, em uma única leitura de 32 bits.
Sai Kiran grandhi

Respostas:


11

"Coalescente" também pode se referir a padrões de acesso à memória coalescente . Nesse uso, coalescência é usada para garantir que os encadeamentos sejam executados simultaneamente, tente acessar a memória que está próxima. Isso geralmente ocorre porque:

  • A memória geralmente é recuperada em grandes blocos da RAM.
  • Algumas unidades de processamento tentarão prever futuros acessos à memória e armazenar em cache com antecedência, enquanto processam partes mais antigas da memória.
  • A memória é armazenada em cache em uma hierarquia de caches sucessivamente maiores, porém mais lentos.

Portanto, é importante criar programas que possam usar padrões de memória previsíveis. É ainda mais importante com um programa encadeado, para que as solicitações de memória não saltem por toda parte; caso contrário, a unidade de processamento estará aguardando o cumprimento das solicitações de memória.

Diagramas inspirados em Introdução à programação paralela: Lição 2 Padrões de hardware e comunicação paralela da GPU :

Abaixo: Quatro threads, com acesso uniforme à memória. O retângulo tracejado preto representa uma única solicitação de memória de 4 palavras.

insira a descrição da imagem aqui

Os acessos à memória estão próximos e podem ser recuperados em um único bloco / go (ou o menor número de solicitações).

No entanto, se aumentarmos o " avanço " do acesso entre os threads, será necessário muito mais acesso à memória. Abaixo: mais quatro threads, com um passo de dois.

4 threads coalescentes de memória e 4 threads com um passo de 2

Aqui você pode ver que esses 4 threads requerem 2 solicitações de bloco de memória. Quanto menor o passo, melhor. Quanto maior o passo, mais solicitações são potencialmente necessárias.

Obviamente, pior que um grande avanço da memória é um padrão de acesso aleatório à memória. Isso será quase impossível de pipeline, cache ou previsão.

Fontes do TikZ:


2
Vários encadeamentos também podem acessar o mesmo item de dados (não apenas um elemento no mesmo pedaço maior), um pouco semelhante às operações SPLAT (mas mais genéricas que) nas arquiteturas SIMD. Como processadores de taxa de transferência tolerantes à latência, as GPUs podem se dar ao luxo de aumentar a latência de acesso quando isso permitir maior largura de banda efetiva.
Paul A. Clayton

O link fornecido está quebrado.
Daniel Soutar

3

Eu acho que vejo dois usos da palavra "coalescendo" pela rede, ambos relacionados à memória. Uma é a coalescência de alocações de memória liberada , que é o que é referido na página da wikipedia vinculada na pergunta.


Coalescendo alocações de memória liberada

Ao alocar memória, às vezes o gerenciador de memória pode ter uma situação em que há dois blocos de memória adjacentes que são liberados. Combiná-los os tornaria um único bloco de memória liberada - isso é chamado de "coalescência". Exemplo:

Começando com 4 blocos alocados:

4 blocos alocados

Mais tarde, um deles é liberado:

Agora 1 bloco grátis

E depois outro é liberado:

Agora 2 blocos livres adjacentes

Agora, por que ter dois blocos livres adjacentes? Coalescendo-os:

Coalescendo os blocos liberados, agora 2 blocos alocados, 1 liberado

A coalescência pode ocorrer o mais rápido possível, ou, por exemplo, em um coletor de lixo, quando o coletor é executado.

Fontes do TikZ:


Eu acho que essa resposta não combina com o que eu quero. A coalescência de memória está lendo blocos contíguos de memória, conforme você forneceu em outra resposta. Se possível, remova esta resposta e a ligação em causa que você editou
Sai Kiran grandhi

@saikirangrandhi Vou manter a resposta para referência. Você pode revisar / desfazer a edição da sua pergunta conforme desejar; você pode simplesmente pressionar "editar" na pergunta.
Realz Slaw
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.