cuda編程系列-內核調用(三)

1、內核調用介紹
使用ANSI C 和cuda擴展關鍵字編寫的代碼稱爲內核,該代碼是運行在gpu上面,通過cpu代碼通過內核調用的方式來啓動。也就是說,內核調用即cpu代碼啓動gpu代碼。內核調用通常會生成大量的塊(Block)和線程(Thread)來在GPU上並行處理數據。內核代碼類似普通的C函數,不同的是這段代碼是由多個線程並行執行的。
2、內核調用語法介紹

kernel<<<number of block,number of threads per block,size of shared memory>>>(parameters for kernel)
  • 第一個參數表示希望執行的塊數
  • 第二個參數表示每個塊具有的線程
  • 第三個參數可選,它指定內核使用的共享內存的大小

3、配置內核參數
爲了在設備上並行執行啓動多個線程,我們必須在內核調用中的配置參數,內核調用時在內核啓動配置中編寫的,它們指定了Grid中塊的數量,和每個塊中的線程數量。
我們可以並行啓動很多塊,每個塊內又有很多線程。通常,每個塊內有512或者1024個線程。一個塊內的線程可以通過共享內存進行彼此通信。
假設要並行啓動500個線程,你可以根據前面解釋的內核調用語法進行修改:

//第一種方式,一個塊裏面包含了500個線程
kernel<<<1,500>>>(1,4,d_c)
//第二種方式,250個塊每個塊包含了兩個線程
kernel<<<250,2>>>(1,4,d_c)
//注意:每個塊的線程不能包括GPU所支持的最大限制

GPU的塊和線程還支持多維的,可以更好的進行處理和可視化,舉例三位網格塊和三維線程塊語法如下:

kernel<<<dim(Nbx,Nby,Nbz),dim(Ntx,Nty,Ntz)>>>()

語法介紹

//Nbx,Nby,Nbz分別表示x,y,z軸方向的塊數
//Ntx,Nty,Ntz表示一個塊沿x,y,z軸方向的線程數
//如果沒有指定y和z維數,默認情況取1

4、自我檢驗
並行啓動5000個線程,使用內核配置進行實現,設置三種實現,每個塊最大使用512個線程?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章