我有一个包含两个主要任务的算法。这两个任务令人尴尬地并行。所以我可以通过以下方式之一将这个算法移植到 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中的论文说,第二种方法在适当的照顾下可以表现得更好。但总的来说应该遵循哪种方法?