【发布时间】:2012-05-06 16:52:32
【问题描述】:
我已经阅读了 CUDA 编程指南,但我错过了一件事。假设我在全局内存中有 32 位 int 数组,我想通过合并访问将它复制到共享内存。 全局数组的索引从 0 到 1024,假设我有 4 个块,每个块有 256 个线程。
__shared__ int sData[256];
何时执行合并访问?
1.
sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y];
全局内存中的地址从 0 复制到 255,每个被 32 个线程在 warp 中复制,这样就可以了?
2.
sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y + someIndex];
如果 someIndex 不是 32 的倍数,它不会合并?地址错位?对吗?
【问题讨论】:
-
这些都不能合并,除了网格中的第一个块。线程按列主要顺序编号。
标签: memory cuda copy coalescing