Was ist "Memory Coalescing"?

16

Ich habe erfahren, dass die Grafikverarbeitungseinheit so etwas wie Memory Coalescing hat. Als ich darüber las, war mir das Thema nicht klar. Steht dies in irgendeiner Weise im Zusammenhang mit der Parallelität der Speicherebenen?

Ich habe in Google gesucht, konnte jedoch keine zufriedenstellende Antwort erhalten.

Es wäre hilfreich, wenn jemand eine umfassendere, leicht verständliche Erklärung geben würde.

Sai Kiran Grandhi
quelle
Memory Level Parallelism (MLP) ist die Fähigkeit, mehrere Speichertransaktionen gleichzeitig auszuführen. In vielen Architekturen manifestiert sich dies in der Fähigkeit, sowohl eine Lese- als auch eine Schreiboperation gleichzeitig auszuführen, obwohl es häufig auch die Möglichkeit gibt, mehrere Lesevorgänge gleichzeitig auszuführen. Es ist selten, dass mehrere Schreibvorgänge gleichzeitig ausgeführt werden, da das Risiko von Konflikten besteht (wenn versucht wird, zwei verschiedene Werte an denselben Speicherort zu schreiben). Beachten Sie, dass dies nicht mit vektorisierten Speicheroperationen identisch ist, z. B. dem Lesen von 4 separaten, aber zusammenhängenden 8-Bit-Werten bei einem einzelnen 32-Bit-Lesevorgang.
Sai Kiran Grandhi

Antworten:

11

"Zusammenführen" kann sich auch auf das Zusammenführen von Speicherzugriffsmustern beziehen . Bei dieser Verwendung wird unter Koaleszenz verstanden, dass sichergestellt wird, dass Threads gleichzeitig ausgeführt werden, und versucht wird, auf den Speicher in der Nähe zuzugreifen. Dies liegt normalerweise an:

  • Der Speicher wird normalerweise in großen Blöcken aus dem RAM abgerufen.
  • Einige Prozessoreinheiten versuchen, zukünftige Speicherzugriffe vorherzusagen und im Voraus zu zwischenspeichern, während ältere Teile des Speichers verarbeitet werden.
  • Der Speicher wird in einer Hierarchie von Caches gespeichert, die nacheinander größer, aber langsamer sind.

Daher ist es wichtig, Programme zu erstellen, die vorhersagbare Speichermuster verwenden können. Noch wichtiger ist es bei einem Thread-Programm, damit die Speicheranforderungen nicht von vorne beginnen. Andernfalls wartet die Verarbeitungseinheit auf die Erfüllung von Speicheranforderungen.

Von der Einführung in die parallele Programmierung inspirierte Diagramme : Lektion 2 GPU-Hardware und parallele Kommunikationsmuster :

Unten: Vier Threads mit einheitlichem Speicherzugriff. Das schwarz gestrichelte Rechteck repräsentiert eine einzelne 4-Wort-Speicheranforderung.

Bildbeschreibung hier eingeben

Die Speicherzugriffe sind kurz und können in einem Durchgang / Block (oder der geringsten Anzahl von Anforderungen) abgerufen werden.

Wenn wir jedoch den " Schritt " des Zugriffs zwischen den Threads erhöhen , sind viel mehr Speicherzugriffe erforderlich. Unten: vier weitere Fäden mit zwei Schritten.

4 Memory Coalesced Threads und 4 Threads mit einem Schritt von 2

Hier sehen Sie, dass diese 4 Threads 2 Speicherblockanforderungen erfordern. Je kleiner der Schritt, desto besser. Je breiter der Schritt, desto mehr Anforderungen sind möglicherweise erforderlich.

Schlimmer als ein großer Speicherschritt ist natürlich ein zufälliges Speicherzugriffsmuster. Es wird nahezu unmöglich sein, diese zu pipelinen, zwischenzuspeichern oder vorherzusagen.

TikZ-Quellen:

Realz Slaw
quelle
2
Mehrere Threads können auch auf dasselbe Datenelement zugreifen (nicht nur auf ein Element innerhalb desselben größeren Blocks), was SPLAT-Vorgängen in SIMD-Architekturen ähnelt (aber allgemeiner ist als diese). Als latenztolerante Durchsatzprozessoren können es sich GPUs leisten, die Zugriffslatenz zu erhöhen, wenn dies eine höhere effektive Bandbreite ermöglicht.
Paul A. Clayton
Der angegebene Link ist defekt.
Daniel Soutar
3

Ich denke, ich sehe zwei Verwendungen des Wortes "Verschmelzen" im Netz, die beide mit dem Gedächtnis zu tun haben. Eine davon ist das Zusammenführen von freigegebenen Speicherzuordnungen , auf die auf der in der Frage verlinkten Wikipedia-Seite verwiesen wird.


Freigegebene Speicherzuordnungen zusammenführen

Beim Zuweisen von Speicher kann es vorkommen, dass der Speichermanager zwei benachbarte Speicherblöcke freigibt. Wenn Sie diese kombinieren, werden sie zu einem einzigen freigegebenen Speicherblock. Dies wird als "Zusammenführen" bezeichnet. Beispiel:

Beginnend mit 4 zugewiesenen Blöcken:

4 zugeteilte Blöcke

Später wird einer von ihnen befreit:

Jetzt 1 freier Block

Und später wird ein anderer befreit:

Jetzt 2 benachbarte freie Blöcke

Warum gibt es nun zwei benachbarte freie Blöcke? Sie verbinden:

Zusammenführen der freigegebenen Blöcke, jetzt 2 zugewiesene Blöcke, 1 freigegeben

Koaleszenz kann auftreten, sobald dies möglich ist, oder beispielsweise in einem Abfallsammler, wenn der Sammler ausgeführt wird.

TikZ-Quellen:

Realz Slaw
quelle
Ich denke, diese Antwort passt nicht zu dem, was ich will. Memory Coalescing liest zusammenhängende Speicherblöcke, wie Sie in einer anderen Antwort angegeben haben. Wenn möglich, entfernen Sie bitte diese Antwort und den Link, den Sie bearbeitet haben
sai kiran grandhi
@saikirangrandhi Ich werde die Antwort als Referenz behalten. Sie können die Bearbeitung Ihrer Frage nach Belieben ändern oder rückgängig machen. Sie können einfach "Bearbeiten" unter der Frage drücken.
Realz Slaw