我可以調用clEnqueueWriteBuffer()
上目前正在由GPU設備上運行的內核寫入緩衝區中? 可以說我不在乎數據的衝突,我知道我在做什麼。 OpenCL實現是否允許這樣做?約clEnqueueWriteBuffer()內核執行
0
A
回答
1
如果命令隊列不與「無序EXEC的」標誌創建,所有排隊的命令依次執行(在單個命令隊列)。在這種情況下,寫入緩衝區和內核將不會同時執行。 在其他情況下,可能會同時執行這些命令,並且行爲將是未定義的。
1
值得爲你的實現運行一個測試,但是從我記得我通過OpenCL與AMD和NVIDIA合作的工作來看,即使指定亂序標誌,隊列也是有序的。
即使該命令將亂序執行,緩存由設備完成可能不會讓你看到在內核中的變化。對於全局內存以及隨後的內存,OpenCL規範指出:
全局內存。該內存區域允許對所有工作組中的所有工作項目進行讀/寫訪問。工作項可以讀取或寫入內存對象的任何元素。 讀和寫全局內存可能會因 設備的能力被緩存。
因此,即使您能夠寫入設備內存,內核也不太可能讀取這些更改。在你的情況下,寫作時,我認爲內核寫入會在寫入緩衝區發生之前提交,但似乎OpenCL規範在這一點上有意含糊(可能允許APU類型的數據訪問)。
0
如果你真的想試試這個,你需要兩個不同的命令隊列;這就是你如何重疊DMA和計算。我建議不要這樣做,因爲內核和轉移編寫的任何區域都會有不一致的結果。
相關問題
- 1. 並行內核執行
- 2. 並行內核執行
- 3. 執行CUDA內核幾次
- 4. CUDA並行內核執行,每個流有多個內核
- 5. 並行拷貝和opencl內核執行
- 6. clEnqueueReadBuffer/clEnqueueWriteBuffer:強制固定內存模式
- 7. 內核啓動和內核執行之間的時間
- 8. cuda內核不能執行所有blockIdx
- 9. cuda瞭解併發內核執行
- 10. CUDA和圖形內核執行順序
- 11. CUDA流和併發內核執行
- 12. cuda內核不能同時執行
- 13. 優化Cuda內核時間執行
- 14. cudaMallocHost(),cudaCreateEvent()與執行內核異步嗎?
- 15. OpenCL CodeXL Profiler多次執行內核
- 16. 內核underworking問題和執行成本
- 17. OpenCL內核的時序執行
- 18. 在Linux內核空間執行程序
- 19. CUDA上的定時內核執行
- 20. 執行snmpd :: FATAL:內核太舊
- 21. 執行程序和內核的數量
- 22. 由內核跟蹤線程執行
- 23. 從內核空間執行ioctl
- 24. 內核看起來不會執行
- 25. 從內核模式執行用戶模式可執行文件
- 26. 在執行特定命令時執行內核堆棧跟蹤
- 27. clEnqueueWriteBuffer究竟做了什麼?
- 28. 如何在安裝新內核時自動執行linux內核模塊編譯?
- 29. 如何使用1D高斯內核在Filter2D上執行自定義2D內核
- 30. 約串核心
非常感謝埃裏克! – Thejas