我想知道在 OpenCL 和 DirectX 中提交命令缓冲区是否有区别。据我所知,在 OpenCL 中提交命令缓冲区是在调用 cFlush 或 clFinish 时执行的。在http://msdn.microsoft.com/en-us/library/windows/hardware/ff569747(v=vs.85).aspx中解释了在 DirectX 中提交命令缓冲区。
我的问题是:OpenCL 和 DirectX 命令缓冲区提交在概念上是否相同?
我想知道在 OpenCL 和 DirectX 中提交命令缓冲区是否有区别。据我所知,在 OpenCL 中提交命令缓冲区是在调用 cFlush 或 clFinish 时执行的。在http://msdn.microsoft.com/en-us/library/windows/hardware/ff569747(v=vs.85).aspx中解释了在 DirectX 中提交命令缓冲区。
我的问题是:OpenCL 和 DirectX 命令缓冲区提交在概念上是否相同?
我对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