"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.
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.
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: