CUDA fusionó el acceso a la memoria global
He leído la guía de programación CUDA, pero me perdí una cosa. Digamos que tengo una matriz de int de 32 bits en la memoria global y quiero copiarla en la memoria compartida con acceso combinado. La matriz global tiene índices de 0 a 1024, y digamos que tengo 4 bloques cada uno con 256 subprocesos.
<code>__shared__ int sData[256]; </code>
¿Cuándo se realiza el acceso coalescido?
1.
<code>sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y]; </code>
Las direcciones en la memoria global se copian de 0 a 255, cada una por 32 hilos en warp, así que aquí está bien.
2.
<code>sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y + someIndex]; </code>
Si someIndex no es múltiplo de 32, ¿no se fusiona? ¿Direcciones desalineadas? ¿Es eso correcto?