为什么cuda中的块/线程索引与C中的二维数组不相似?

时间:2016-10-27 13:19:44

标签: cuda

这是来自cuda编程指南的图片: enter image description here

这可能是一个非常愚蠢的问题,但对我来说这听起来真的很混乱。不应该是这样的:

Block (0,0) --> Block (0,1) --> Block (0,2) // This is supposedly row 0
Block (1,0) --> Block (1,1) --> Block (1,2) // This is supposedly row 1

这是否有意?

1 个答案:

答案 0 :(得分:3)

CUDA线程块或网格索引排序是x,y,z

例如,块(1,0)是x维度中的第二个块,y维度中的第一个块

当你建议(0,0),(0,1),(0,2)都属于同一行时,你只是反映了索引排列的特定视图(行,列)。

x,y和row,column之间没有必需的映射。你可以按照自己的意愿安排。

在CUDA C / C ++中习惯使用线程/块x维度来引用矩阵列,因为这有助于在warp内进行内存访问的良好合并。然而,在CUDA fortran中,通常可以反转这些(为了良好的合并),因为fortran数组的内存中的基础矩阵存储模式与C数组不同。