Soweit ich weiß, ist geteilter Speicher in Banken aufgeteilt und Zugriffe von mehreren Threads auf ein einzelnes Datenelement innerhalb der gleichen Bank wird einen Konflikt (oder Broadcast) verursachen).Shared Memory Bank Konflikte in CUDA: Wie Speicher auf Banken ausgerichtet ist
Im Moment zuzuteilen I einen ziemlich großen Array, das mehrere Paare von zwei Matrizen konzeptionell darstellt:
__shared__ float A[34*N]
Wo N
die Anzahl von Paaren sind, und die ersten 16 Hin- und Herbewegungen eines Paares sind eine Matrix und die folgenden 18 Schwimmer sind die zweite.
Die Sache ist, der Zugriff auf die erste Matrix ist konfliktfrei, aber der Zugriff auf die zweite hat Konflikte. Diese Konflikte sind unvermeidlich, aber mein Denken ist, dass aufgrund der zweiten Matrix 18 alle zukünftigen Matrizen zu den Banken falsch ausgerichtet sein werden und deshalb mehr Konflikte als notwendig auftreten werden.
Ist das wahr, wenn ja, wie kann ich es vermeiden?
Jedes Mal, wenn ich Shared Memory zuteile, beginnt es bei einer neuen Bank? So könnte ich möglicherweise tun
__shared__ Apair1[34]
__shared__ Apair2[34]
...
Irgendwelche Ideen?
Dank
Können Sie näher erläutern, wie Sie auf die Elemente zugreifen? – Tom