我需要使計算的一部分是並行的。它是關於矢量的計算,有時我需要對每個值進行一次操作。所以我想讓它平行。Cuda如何從全局函數運行多個線程?一個運行多線程的內核
我不能解釋我的計算示例(它只是一個簡單的例子,不是我的算法): 我正在向前移動一個指針,當我找到第5個數字時,我將向矢量中的每個數字加上5。
所以我想避免這樣做對主機和複製所有大載體,設備的每一個指針移動後< =>主機(repetable)。我想它可能比主機上的所有東西都低效。
所以我有一個想法,我將所有的向量複製到設備一次,然後我就開始算法。
下面是一個簡單的應對提出我的問題:
__device__ void devFunction(long long unsigned int *arr, long long unsigned int param, long long unsigned int N) {
long long unsigned int i = blockIdx.x* blockDim.x+ threadIdx.x;
// do something ...
}
__global__ void globFunction(long long unsigned int *arr, long long unsigned int N) {
do {
devFunction(arr, param, N); // I want to run many threads here like <<<...>>>
// do something ...
} while(/* ... */);
}
int main() {
// declare array, alloc memory, copy memory, etc.
globFunction<<< 400000, 256>>>(arr, N); // I think here should be <<<1,1>>>
// do something ...
return 0;
}
所以這是可以做到的呢?從內核並行運行多個函數?其他解決方案?
爲什麼你需要從一個cuda線程產生更多的線程?難道你不能在主機的許多線程上調用內核並且同時運行計算嗎? – Tudor
它可能會比較慢,因爲每個線程都會執行相同的思考 - >通過這個Big vector向前移動指針並將其與數字5進行比較(在示例中)。我只需要在一個線程中執行一次並且只執行一次。只有每個線程上的其他計算。 – nosbor
@nosbor:所以你想知道是否有可能「平行做事」?這不是一個非常確切的問題,是嗎? – talonmies