GPU CUDA編程中threadIdx, blockIdx, blockDim, gridDim之間的區別與聯系


  前期寫代碼的時候都會困惑這個實際的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     2 

                                                                        1     3

    blocksize則是指里面的thread的情況,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跟矩陣中的二維元素進行一一對應。

 

引文鏈接:threadIdx,blockIdx, blockDim, gridDim之間的區別與聯系


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM