我有一個包含兩個主要任務的算法。這兩項任務都是令人尷尬的平行。所以我可以通過以下方式之一在CUDA上移植此算法。CUDA中的性能優化 - 我應該使用哪些算法?
>Kernel<<<
Block,Threads>>>() \\\For task1
cudaThreadSynchronize();
>Kerne2<<<
Block,Threads>>>() \\\For task2
或者我可以做以下事情。
>Kernel<<<
Block,Threads>>>()
{
1.Threads work on task 1.
2.syncronizes across device.
3.Start for task 2.
}
人們可以注意到,在第一種方法,我們必須要回來CPU,而在第二個趨勢,我們將在CUDA使用跨所有塊同步。 IPDPS 10中的論文表示,第二種方法在適當的護理下可以表現得更好。但總的來說應該遵循哪種方法?
嘗試一下,看看。 – GManNickG
我得到的結果贊成第一種方法,有時贊成第二種方法。文獻中推薦什麼? –
在這種情況下,確保第二種方法跟在紙上,看是否需要邊緣。如果兩者仍然相對相同(並且這是與您將要使用的真實數據),請保留您想要的數據。只是儘量保持切換它們的能力,所以你可以隨時測試。 – GManNickG