J'ai appris que l'unité de traitement graphique a ce qu'on appelle la fusion de mémoire. À la lecture, je n'étais pas clair sur le sujet. Est-ce que cela est lié au parallélisme au niveau de la mémoire?
J'ai cherché dans Google mais je n'ai pas pu obtenir de réponse satisfaisante.
Il serait utile que quelqu'un donne une explication plus complète et plus facile à comprendre.
terminology
reference-request
computer-architecture
memory-management
sai kiran grandhi
la source
la source
Réponses:
"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:
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:
la source
Je pense que je vois deux utilisations du mot «fusionner» autour du net, toutes deux liées à la mémoire. L'un consiste à fusionner les allocations de mémoire libérées , ce qui est mentionné dans la page wikipedia liée dans la question.
Coalescence d'allocations de mémoire libérées
Lors de l'allocation de mémoire, le gestionnaire de mémoire peut parfois avoir une situation où deux blocs de mémoire adjacents sont libérés. Leur combinaison ferait d'eux un seul bloc de mémoire libéré - c'est ce qu'on appelle la «coalescence». Exemple:
À partir de 4 blocs alloués:
Plus tard, l'un d'eux est libéré:
Et plus tard, un autre est libéré:
Maintenant, pourquoi avoir deux blocs libres adjacents? Les fusionner:
La coalescence peut se produire dès que possible, ou, par exemple, dans un garbage collector, lorsque le collecteur s'exécute.
Sources TikZ:
la source