OpenCL執行

首先OpenCL同一個Command Queue中的Kernel 是按照順序執行的。Kernel1、Kernel2、Kernel3依次如commandQueue.執行順序如圖所示。

我們知道在Kernel的時候其實CPU端和GPU端可以進行交互的。然而,內核不是唯一可以在命令隊列上排隊的對象。內核需要數據纔可執行其操作,而數據需要傳送給設備以使用,這些數據可以是OpenCL緩衝區/子緩衝區或圖像對象。封裝數據的內存對象需要傳輸到設備中,你必須向命令隊列發出內存命令纔可實現該操作;在許多用例中,通常需要在開始計算之前將設備與數據結合在一起。以創建多個命令隊列並使用命令對它們進行排隊,存在多個命令隊列的原因是你希望解決的問題涉及主機中的一些(如果不是所有的話)異構設備。並且,這些命令隊列可能表示彼此不共享數據的獨立計算流,也可能表示相關的計算流,其中每個隨後的任務取決於前一個任務(通常共享數據)。注意,這些命令隊列將在設備上不同步執行,前提是沒有共享任何數據。如果共享數據,則程序員需要通過OpenCL規範提供的同步命令確保數據同步。


在OpenCL中 clEnqueueWriteBuffer可以通過控制CL_TRUE揮着CL_FALSE來控制是否阻塞。當然也可以通過event來控制,使得某個kernel在某些事件的list完成之後才執行。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章