2016-02-13 20 views
0

我有一個從全局CUDA內核調用設備函數的基本問題。當我想調用設備函數時,我們可以指定塊和線程的數量嗎?設置CUDA中調用設備函數的塊和線程數量?

我之前發佈了一個關於min減少的問題(here),我想在另一個全局內核中調用這個函數。但是,縮減代碼需要某些塊和線程。

回答

3

有兩種類型的功能,可以在設備上被調用:

__device__功能就象普通cc++功能:它們在單(CUDA)線程的上下文中操作。可以從塊中的任意數量的線程調用這些線程,但從函數本身的角度來看,它不會像內核啓動那樣自動創建一組線程。

__global__功能或「內核」,可以只使用內核啓動方法(例如,CUDA運行時API在my_kernel<<<...>>>(...);)調用。當通過內核啓動調用__global__函數時,可以指定要作爲內核配置(<<<...>>>)的一部分啓動的塊和線程數。如果您的GPU具有3.5或更高的計算能力,那麼您還可以從設備代碼調用__global__函數(使用基本相同的內核啓動語法,該語法允許您爲「子」內核指定塊和線程)。這採用CUDA Dynamic Parallelism,其中有專門的編程指南的整個部分。

有演示許多CUDA樣本代碼:

  1. 調用__device__功能,如simpleTemplates
  2. 呼叫從所述設備__global__功能,如cdpSimplePrint