私は基本的に次のようなコードを持っています:
for (...) {
clEnqueueNDRangeKernel(...)
clFinish(...)
clEnqueueTask(...)
clEnqueueReadBuffer(...) // blocking
}
すべてが単一のコマンドキューにあり、アウトオブオーダー実行モードが有効になっていません。
このコードは、GPUハードウェアで約7.5秒で実行されます。clFinish呼び出しを削除すると、12秒で実行されます。キューの実行を開始するにはclFlushを呼び出す必要があると読みましたが、clFinishをclFlushに置き換えると、12秒で実行されます。
私が正しく理解していれば、clFinishは、すべてのコマンドが終了するのを待つブロッキング呼び出しです。clFlushの代わりにそれを使用すると、コードの実行が速くなりますか?