我有一個從全局CUDA內核調用設備函數的基本問題。當我想調用設備函數時,我們可以指定塊和線程的數量嗎?設置CUDA中調用設備函數的塊和線程數量?
我之前發佈了一個關於min減少的問題(here),我想在另一個全局內核中調用這個函數。但是,縮減代碼需要某些塊和線程。
我有一個從全局CUDA內核調用設備函數的基本問題。當我想調用設備函數時,我們可以指定塊和線程的數量嗎?設置CUDA中調用設備函數的塊和線程數量?
我之前發佈了一個關於min減少的問題(here),我想在另一個全局內核中調用這個函數。但是,縮減代碼需要某些塊和線程。
有兩種類型的功能,可以在設備上被調用:
__device__
功能就象普通c
或c++
功能:它們在單(CUDA)線程的上下文中操作。可以從塊中的任意數量的線程調用這些線程,但從函數本身的角度來看,它不會像內核啓動那樣自動創建一組線程。
__global__
功能或「內核」,可以只使用內核啓動方法(例如,CUDA運行時API在my_kernel<<<...>>>(...);
)調用。當通過內核啓動調用__global__
函數時,可以指定要作爲內核配置(<<<...>>>
)的一部分啓動的塊和線程數。如果您的GPU具有3.5或更高的計算能力,那麼您還可以從設備代碼調用__global__
函數(使用基本相同的內核啓動語法,該語法允許您爲「子」內核指定塊和線程)。這採用CUDA Dynamic Parallelism,其中有專門的編程指南的整個部分。
有演示許多CUDA樣本代碼:
__device__
功能,如simpleTemplates__global__
功能,如cdpSimplePrint