前期写代码的时候都会困惑这个实际的threadIdx(TID,实际的线程ID)到底是多少,自己写出来的对不对,今天经过自己一些小例子的推敲,以及找到官网的相关介绍,总算自己弄清楚了。
在启动内核的时候,要通过指定gridsize和块大小才行,举下面的例子说说:
dim3 gridsize(2,2);
dim3 blocksize(4,4);
gridsize相当于是一个2×2的块,gridDim.x,gridDim.y,gridDim.z相当于这个为dim3的X,Y,Z方向的维度,这里是2 * 2 * 1。序号从0到3,且是从上到下的顺序,就是说是下面的情况:
grid中的blockidx序号标注情况为:0 2
1 3
块大小则是指里面的螺纹的情况,blockDim.x,blockDim.y,blockDim.z相当于这个为dim3的X,Y,Z方向的维度,这里是4 * 4 * 1。序号是0-15,也是从上到下的标注:
block中的threadidx序号标注情况:0 4 8 12
1 5 9 13
2 6 10 14
3 7 11 15
应该这样子就一目了然了,然后求实际的TID的时候:
最后还发现了一个2D * 2D表示threadid的二维位置的标示图,适用于将每个threadid跟矩阵中的二维元素进行一一对应。
原文:HTTPS://blog.csdn.net/qq_34488063/article/details/52162454