"Coalescence" peut également faire référence à des modèles d'accès à la mémoire coalescents . Dans cette utilisation, la coalescence est utilisée pour s'assurer que les threads s'exécutent simultanément, essayez d'accéder à la mémoire la plus proche. C'est généralement parce que:
- La mémoire est généralement récupérée dans de grands blocs de RAM.
- Certaines unités de traitement essaieront de prédire les futurs accès à la mémoire et de mettre en cache à l'avance, tout en traitant les anciennes parties de la mémoire.
- La mémoire est mise en cache dans une hiérarchie de caches successivement plus grands mais plus lents.
Par conséquent, il est important de créer des programmes qui peuvent utiliser des modèles de mémoire prévisibles. C'est encore plus important avec un programme threadé, afin que les demandes de mémoire ne sautent pas partout; sinon l'unité de traitement attendra que les demandes de mémoire soient satisfaites.
Diagrammes inspirés par Introduction à la programmation parallèle: Leçon 2 Matériel GPU et modèles de communication parallèle :
Ci-dessous: quatre threads, avec un accès mémoire uniforme. Le rectangle en pointillé noir représente une seule demande de mémoire de 4 mots.
Les accès en mémoire sont proches et peuvent être récupérés en une seule fois / bloc (ou le moins de requêtes).
Cependant, si nous augmentons la " foulée " de l'accès entre les threads, cela nécessitera beaucoup plus d'accès à la mémoire. Ci-dessous: quatre autres threads, avec une foulée de deux.
Ici, vous pouvez voir que ces 4 threads nécessitent 2 requêtes de bloc de mémoire. Plus la foulée est petite, mieux c'est. Plus la foulée est large, plus les demandes sont potentiellement nécessaires.
Bien sûr, pire qu'un grand pas de mémoire est un modèle d'accès à la mémoire aléatoire. Celles-ci seront presque impossibles à canaliser, à mettre en cache ou à prévoir.
Sources TikZ: