CUDA uniu o acesso à memória global
Eu li o guia de programação CUDA, mas perdi uma coisa. Digamos que eu tenha matriz de 32 bits int na memória global e eu quero copiá-lo para a memória compartilhada com acesso coalescido. O array global tem índices de 0 a 1024, e digamos que eu tenha 4 blocos cada com 256 threads.
<code>__shared__ int sData[256]; </code>
Quando é feito o acesso coalescido?
1
<code>sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y]; </code>
Endereços na memória global são copiados de 0 a 255, cada um por 32 threads em dobra, então aqui está tudo bem?
2
<code>sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y + someIndex]; </code>
Se someIndex não é múltiplo de 32, não é coalescido? Endereços desalinhados? Isso está correto?