0

我已經有一個已經並行化的CUDA內核,它執行一些需要頻繁插值的任務。並行化來自CUDA設備函數/內核的方法

所以這是一個內核

__global__ void complexStuff(...) 

它調用一次或多次該插補設備功能:

__device__ void interpolate(...) 

插值算法做了WENO插在連續三個維度。這是一個高度可並行化的任務,我迫切希望並行化!

很明顯,通過使用<<<...>>>語法從主機代碼調用內核,可以很容易地將內核complexStuff()並行化。 complexStuff()已經並行化也很重要。

但是我不清楚如何在CUDA設備函數中並行化/創建新線程......這甚至有可能嗎?有人知道嗎?

回答

2

您可能需要考慮Dynamic Parallelism(某些資源here,herehere),以便從另一個CUDA內核中調用CUDA內核。它要求您的設備計算能力爲3.5或更高。它帶有一些限制和限制,可能會降低性能(在第3個鏈接中提到)。
我的建議是首先考慮調用你的CUDA內核,用complexStuff(...)工作量乘以interpolate(...)量工作。換句話說,靜態猜測什麼是您需要做的最大平行細粒度作業。然後配置您的內核以使用塊線程執行那些細粒度的作業。請注意,這只是一個猜測而不知道程序代碼。