2015-11-12 26 views
0

在OCL 1.2中沒有任何同步的情況下共享2個內核之間的同一內存對象是否有效? 即我想創建一個內存對象,做一個copy_host_ptr並將它傳遞給2個內核作爲同時訪問的指針,主要是讀取。opencl:內核之間的異步內存共享(具有相同的上下文,設備)

我對兩個內核使用相同的設備/上下文/程序等,我只關心內存中的偏移量。即我不在乎2個內核中的mem-obj的基地址是否相同。

謝謝!

回答

0

如果您使用的是單個命令隊列,那麼是的,因爲那樣您的內核就會一個接一個地運行,並且不會同時訪問內存。

如果您正在使用多個命令隊列,並且在正確的條件下可以同時執行某些硬件上的內核,那麼您應該只對一個只讀緩衝區執行此操作。如果緩衝區被內核寫入,那麼我認爲讀取結果是未定義的,如果兩個內核寫入更多的話。

+0

即使只使用一個命令隊列(在某些情況下它甚至可以運行並行作業),正確的方法是將標誌設置爲緩衝區對象。這使得OpenCL驅動程序保證不要在同一時間在兩個內核中使用相同的緩衝區來寫入(或讀取/寫入)。 – DarkZeros

+0

@DarkZeros,我從來沒有清楚過後續內核在前一個內核完成之前可以開始執行的條件是什麼。這是有道理的,因爲在工作結束時給予閒置的計算單元是可能的。運行時是否必須查看用於確定是否存在依賴關係的緩衝區和映像對象? – Dithermaster

相關問題