我有一个包含两个主要任务的算法。这两项任务都是令人尴尬的平行。所以我可以通过以下方式之一在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