CUDA verschmolz den Zugriff auf den globalen Speicher

Ich habe die CUDA-Programmieranleitung gelesen, aber eine Sache habe ich verpasst. Angenommen, ich habe ein Array mit 32-Bit-Int im globalen Speicher und möchte es mit zusammengeführtem Zugriff in den gemeinsamen Speicher kopieren. Globales Array hat Indizes von 0 bis 1024, und sagen wir, ich habe 4 Blöcke mit jeweils 256 Threads.

<code>__shared__ int sData[256];
</code>

Wann wird ein kombinierter Zugriff durchgeführt?

1.

<code>sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y];
</code>

Adressen im globalen Speicher werden von 0 auf 255 kopiert, jeweils um 32 Threads in Warp, also ist es hier in Ordnung?

2.

<code>sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y + someIndex];
</code>

Wenn someIndex nicht ein Vielfaches von 32 ist, wird es nicht zusammengeführt? Falsche Adressen? Ist das korrekt?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage