如果我启动一个 2D 内核,其中每个线程都对 2D 数组的单个元素进行操作,那么哪种访问元素的方式会合并?是数组[x][y] 还是数组[y][x]?
问问题
630 次
1 回答
8
如果x = threadIdx.x
然后y = threadIdx.y
_
array[y][x]
将被合并但
array[x][y]
不是。原因是 C 使用row-major order,即最后一个索引是运行速度最快的索引,因此可以array[y][x]
转到array[y][x+1]
内存中的相邻位置。并且 CUDA 块中的线程被安排成threadIdx.x
运行最快,然后是 y,最后是 z。
于 2013-04-04T12:38:30.163 回答