OpenCL1.1仕様は次のように述べています。
cl_int clEnqueueBarrier(cl_command_queue command_queue)
clEnqueueBarrierは、コマンドの次のバッチが実行を開始する前に、command_queue内のキューに入れられたすべてのコマンドの実行が終了することを保証する同期ポイントです。
cl_int clFinish(cl_command_queue command_queue)
command_queueで以前にキューに入れられたすべてのOpenCLコマンドが関連するデバイスに発行され、完了するまでブロックします。clFinishは、command_queue内のキューに入れられたすべてのコマンドが処理されて完了するまで戻りません。clFinishは同期ポイントでもあります。
インオーダーまたはアウトオブオーダーの実行で何かをしなければならないはずですが、違いがわかりません。順番に実行する場合、それらが必要になることはありますか?現時点では、次のようなことをしています。
...
for(...){
clEnqueuNDRangeKernel(...);
clFlush(command_queue);
clFinish(command_queue);
}
...
NvidiaGPUで。関連するコメントをいただければ幸いです。