Shared-Memory-Bank-Konflikte in CUDA: Wie Speicher ist ausgerichtet auf die Banken

Soweit mein Verständnis geht, shared memory ist unterteilt in Banken und Zugriffe von mehreren threads auf eine einzelne Daten-element innerhalb der gleichen bank wird zu einem Konflikt (oder broadcast).

Ich im moment weisen Sie eine relativ große Auswahl, die konzeptionell stellt mehrere Paare von zwei Matrizen:

__shared__ float A[34*N]

Wo N ist die Anzahl der Paare und die ersten 16 schwimmt ein paar sind eine matrix und die folgenden 18 Schwimmer sind das zweite.

Die Sache ist, Zugang zu dem ersten matrix-Konflikt ist kostenlos, aber der Zugang zu der zweiten hat man Konflikte. Diese Konflikte sind unvermeidlich, aber mein denken ist, dass, da die zweite matrix ist 18 alle zukünftigen Matrizen wird ausgerichtet sein auf die Banken und damit auch mehr Konflikte als nötig auftreten.

Ist das wahr, wenn ja, wie kann ich es vermeiden?

Jedesmal, wenn ich allocate shared memory, fängt er bei einer neuen bank? Also könnte ich tun,

__shared__ Apair1[34]
__shared__ Apair2[34]
...

Irgendwelche Ideen?

Dank

  • Können Sie näher erläutern, wie Sie den Zugriff auf die Elemente?
InformationsquelleAutor zenna | 2010-02-17
Schreibe einen Kommentar