这是一个概念性的问题。在数据自动化系统中,gridDim、blockDim和threadIdx可以是一维、二维或三维。我想知道,他们的2D和3D版本是如何解释的?
更详细地说,数据自动化系统是否认为多维gridDim、blockDim和threadIdx只是一个线性序列,就像C存储多维数组一样?如果不是,我们应该如何解释多维gridDim、blockDim和threadIdx?
谢谢。
编辑1.这个问题不是重复的。我确实遇到了提到的问题。它询问GPU线程的执行顺序,而不是它们的布局,就像这个线程一样。
编辑2.,也可以在http://docs.nvidia.com/cuda/cuda-c-programming-guide/#thread-hierarchy找到这个问题的答案。谢谢您@talonmies,供您参考。综上所述,多维gridDim、blockDim和threadIdx都是为了方便起见.它们可以被解释成一列有序的多维数组。
发布于 2015-10-23 07:23:22
直接引用CUDA编程指南
线程的索引与其线程ID以一种简单的方式相互关联:对于一维块,它们是相同的;对于大小为二维的块( Dx,Dy),索引(x,y)的线程ID是(x +y);对于大小为三维的块( Dx,Dy,Dz),索引线程(x,y,z)的线程ID是(x +y+way)。
因此,是的,编程模型中的逻辑线程编号是顺序的,然后x维变化最快,然后y维,然后z维。这既适用于块内的线程编号,也适用于网格中的块编号。编号类似于列专业排序的多维数组,尽管实际的threadIdx和blockIdx变量本身只是反映调度程序分配给每个线程或块的内部线程和块标识词的结构。
您应该注意到,threadIdx和blockIdx所暗示的编号只是为了程序员的方便,并不意味着任何关于GPU上线程执行顺序的信息。
发布于 2015-06-25 18:49:01
更详细地说,数据自动化系统是否认为多维gridDim、blockDim和threadIdx只是一个线性序列,就像C存储多维数组一样?
是。
所有多维数组都在C中线性化,它们按照行的主要顺序线性化--将同一行的所有元素放置到连续的位置,然后将这些行依次放置到内存空间中。
CUDA C还使用行主布局。二维数组布局的示例:

https://stackoverflow.com/questions/31058001
复制相似问题