CUDA核函數參數解析

1、CUDA線程模型

Grid/Block/Thread之間的關係,如下圖所示。

Kernel:在GPU上執行的核心程序,這個kernel函數是運行在某個Grid上的。

2、核函數原型

核函數只能在主機端調用,調用時必須申明執行參數。調用形式如下:

                Kernel<<<Dg,Db, Ns, S>>>(param list); 

<<<>>>運算符內是核函數的執行參數,告訴編譯器運行時如何啓動核函數,用於說明內核函數中的線程數量,以及線程是如何組織的。 

<<<>>>運算符對kernel函數完整的執行配置參數形式是<<<Dg, Db, Ns, S>>> 

  • 參數Dg用於定義整個grid的維度和尺寸,即一個grid有多少個block。對應核函數內部實參gridDim,爲dim3類型。Dim3 Dg(Dg.x, Dg.y, 1)表示grid中每行有Dg.x個block,每列有Dg.y個block,第三維恆爲1(因爲如上圖Block組織形式最多支持2維,而Thread最多3維)。整個grid中共有Dg.x*Dg.y個block,其中Dg.x和Dg.y最大值爲65535。
  • 參數Db用於定義一個block的維度和尺寸,即一個block有多少個thread。對應核函數內部實參blockDim,爲dim3類型。Dim3 Db(Db.x, Db.y, Db.z)表示整個block中每行有Db.x個thread,每列有Db.y個thread,高度爲Db.z。Db.x和Db.y最大值爲512,Db.z最大值爲62。 一個block中共有Db.x*Db.y*Db.z個thread。(根據硬件配置和計算能力不同,Db.x和Db.y最大值也可能爲768、1024等)
  • 參數Ns是一個可選參數,用於設置每個block除了靜態分配的shared Memory以外,最多能動態分配的shared memory大小,單位爲byte。不需要動態分配時該值爲0或省略不寫。
  • 參數S是一個cudaStream_t類型的可選參數,初始值爲零,表示該核函數處在哪個流之中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章