1

如果我启动一个 2D 内核,其中每个线程都对 2D 数组的单个元素进行操作,那么哪种访问元素的方式会合并?是数组[x][y] 还是数组[y][x]?

4

1 回答 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 回答