如何快速理解CUDA GPU并行編程?

理解線程(Thread)、線程塊(Block)、網格(Grid),線程塊數(BlockDim)、網格數(GridDim)以及核函數(Kernel)的概念,是CUDA學習的一個難點。本文會詳細介紹如何在CUDA中使用一維、二維核函數,并索引其下標。

Dim3類型的數據

這是CUDA自定義的一種數據結構,一般為三維的無符號整型,其定義及引用方式如下;

Dim3 BlockSize(16, 16, 1)
// BlockSize.x = 16; BlockSize.y = 16; BlockSize.z = 1;
// 也可以寫為  Dim3 BlockSize(16, 16),最后一維默認為1;

一維的CUDA核函數

  • blockIdx.x代表x方向上的線程塊序號;
  • blockDim.x代表x方向上單個線程塊內最大的線程數;
  • threadIdx.x代表x方向上的線程序號;

所以要索引第三個Block(序號2)中第4個線程(序號3)的下標index,其過程如圖所示:

一維結構及一維下標索引

二維的CUDA核函數

  • blockDim.x代表x方向上單個線程塊包含的線程數
  • blockDim.y代表y方向上單個線程塊包含的線程數

而x、y的方向如下圖所示:

二維結構及二維下標索引

以上就是兩種最常見的索引方式,在大部分任務中應該已經夠用了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。