threadIdx,blockIdx, blockDim, gridDim之间的区别与联系

原文链接:https://blog.csdn.net/qq_34488063/article/details/52162454,计算blockId 和threadId应该是从左到右,这点原文作者弄错了,所以更正一下。

前期写代码的时候都会困惑这个实际的threadIdx(tid,实际的线程id)到底是多少,自己写出来的对不对,今天经过自己一些小例子的推敲,以及找到官网的相关介绍,总算自己弄清楚了。

      在启动kernel的时候,要通过指定gridsize和blocksize才行,举下面的例子说说:

     dim3 gridsize(2,2);

     dim3 blocksize(4,4);

     gridsize相当于是一个2*2的block,gridDim.x,gridDim.y,gridDim.z相当于这个dim3的x,y,z方向的维度,这里是2*2*1。序号从0到3,且是从左到右的顺序,就是说是下面的情况:

     grid中的blockidx序号标注情况为:            0     1 

                                                                        2    3

    blocksize则是指里面的thread的情况,blockDim.x,blockDim.y,blockDim.z相当于这个dim3的x,y,z方向的维度,这里是4*4*1.序号是0-15,也是从左到右的标注:

    block中的threadidx序号标注情况:          0      1       2      3

                                                                      4       5       6       7

                                                                      8       9       10     11

                                                                      12       13       14      15

  应该这样子就一目了然了,然后求实际的tid的时候:

最后还发现了一个2D * 2D 表示threadid的二维位置的标示图, 适用于将每个threadid跟矩阵中的二维元素进行一一对应。

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81100177