2 つの主要なタスクで構成されるアルゴリズムがあります。両方のタスクは、恥ずかしいほど並行しています。したがって、次のいずれかの方法で、このアルゴリズムを 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 に戻る必要がありますが、2 番目の方法では CUDA のすべてのブロックで同期を使用する必要があります。IPDPS 10の論文では、2 番目の方法は、適切な注意を払って実行すると、より良い結果が得られると述べられています。しかし、一般的にどの方法に従うべきでしょうか?