Qu'est-ce que la «mémoire fusionnée»?

16

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.

sai kiran grandhi
la source
Le parallélisme au niveau de la mémoire (MLP) est la capacité d'effectuer plusieurs transactions de mémoire à la fois. Dans de nombreuses architectures, cela se manifeste par la capacité d'effectuer à la fois une opération de lecture et d'écriture, bien qu'il existe également couramment la possibilité d'effectuer plusieurs lectures à la fois. Il est rare d'effectuer plusieurs opérations d'écriture à la fois, en raison du risque de conflits potentiels (essayer d'écrire deux valeurs différentes au même emplacement). Notez que ce n'est pas la même chose que les opérations de mémoire vectorisée, telles que la lecture de 4 valeurs 8 bits distinctes mais contiguës dans une seule lecture 32 bits.
sai kiran grandhi

Réponses:

11

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

entrez la description de l'image ici

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.

4 threads coalescés en mémoire et 4 threads avec une foulée de 2

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:

Realz Slaw
la source
2
Plusieurs threads peuvent également accéder au même élément de données (pas seulement un élément dans le même bloc plus grand), quelque peu similaire (mais plus générique que) aux opérations SPLAT dans les architectures SIMD. En tant que processeurs de débit tolérants à la latence, les GPU peuvent se permettre d'augmenter la latence d'accès lorsque cela permet d'augmenter la bande passante effective.
Paul A. Clayton
Le lien donné est rompu.
Daniel Soutar
3

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:

4 blocs alloués

Plus tard, l'un d'eux est libéré:

Maintenant 1 bloc gratuit

Et plus tard, un autre est libéré:

Maintenant 2 blocs libres adjacents

Maintenant, pourquoi avoir deux blocs libres adjacents? Les fusionner:

Coalescence des blocs libérés, maintenant 2 blocs alloués, 1 libéré

La coalescence peut se produire dès que possible, ou, par exemple, dans un garbage collector, lorsque le collecteur s'exécute.

Sources TikZ:

Realz Slaw
la source
Je pense que cette réponse ne correspond pas à ce que je veux. La fusion de mémoire consiste à lire des blocs de mémoire contigus comme vous l'avez indiqué dans une autre réponse. Si possible, veuillez supprimer cette réponse et le lien en question que vous avez édité
sai kiran grandhi
@saikirangrandhi Je garderai la réponse pour référence. Vous pouvez réviser / annuler la modification de votre question comme vous le souhaitez; vous pouvez simplement appuyer sur "modifier" sous la question.
Realz Slaw