2012-05-19 59 views

回答

0

我不熟悉DX。但是OpenCL提交系統不需要clFlush和clFinish來運行隊列中的命令。

每次將內核或操作提交到OpenCL隊列時,只要它可以異步地處理CPU預測,就會對其進行處理。 clFlush()命令只是強制命令進入隊列。 clFinish()確保所有作業在將控制權返回給CPU之前已經在隊列中完成(這是一個阻塞調用)。

例如,這將可證明很好地工作:

clEnqueueWriteBuffer() 
clEnqueueNDRangeKernel() 
clEnqueueReadBuffer() 
sleep(10) 
//continue the processing 

但正確的方法是調用clFinish()(ensueres隊列爲空),以檢查它或由clEvent子系統(檢查是否排隊任務已完成):

clEnqueueWriteBuffer() 
clEnqueueNDRangeKernel() 
clEnqueueReadBuffer() 
clFinish() 
//continue the processing 
+0

我很感謝你的回答,但它與我所問的問題無關。我的問題是關於命令緩衝區 – Yakov