CUDA 2D内核合并内存

时间:2013-04-04 09:01:56

标签: cuda

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

1 个答案:

答案 0 :(得分:8)

如果x = threadIdx.xy = threadIdx.y

array[y][x]

将合并但

array[x][y]

不。原因是C使用row-major order,即最后一个索引是运行速度最快的索引,因此array[y][x]array[y][x+1]会转到内存中的相邻位置。并且CUDA块中的线程被安排为threadIdx.x运行最快,然后是y,最后是z。