DXはよくわかりません。ただし、OpenCL サブミット システムでは、コマンドをキューで実行するために clFlush と clFinish は必要ありません。
カーネルまたは操作が OpenCL キューにサブミットされるたびに、CPU の排出に対して非同期で可能な限りすぐに処理されます。clFlush() コマンドは、コマンドを強制的にキューに入れるだけです。clFinish() は、制御を CPU に返す前に、キュー内のすべてのジョブが終了していることを確認します (これはブロッキング呼び出しです)。
たとえば、これはおそらく完全に機能します。
clEnqueueWriteBuffer()
clEnqueueNDRangeKernel()
clEnqueueReadBuffer()
sleep(10)
//continue the processing
ただし、適切な方法は、clFinish() を呼び出す (キューが空であることを確認する) か、clEvent サブシステム (キューに入れられたタスクが終了したかどうかを確認する) によってチェックアウトすることです。
clEnqueueWriteBuffer()
clEnqueueNDRangeKernel()
clEnqueueReadBuffer()
clFinish()
//continue the processing