0

OpenCL と DirectX でのコマンド バッファの送信に違いがあるかどうか疑問に思っています。私の知る限り、OpenCL でのコマンド バッファの送信は、cFlush または clFinish が呼び出されたときに実行されます。DirectX でのコマンド バッファーの送信については、http://msdn.microsoft.com/en-us/library/windows/hardware/ff569747(v=vs.85).aspx で説明されています

私の質問は、OpenCL と DirectX のコマンド バッファーの送信は概念的に同じですか?

4

1 に答える 1

0

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
于 2012-05-19T16:38:23.100 に答える