是否可以在OpenCL中的多個內核之間共享指針數組。如果是這樣,我將如何去實施它?如果我沒有完全錯誤 - 可能是這種情況 - 在內核之間共享內容的唯一方式將是一個共享的cl_mem,但是我也認爲它們不能包含指針。OpenCL內核之間共享的指針陣列
回答
這在OpenCL 1.x中是不可能的,因爲主機和設備具有完全分離的存儲空間,所以包含主機指針的緩衝區在設備端沒有意義。
但是,OpenCL 2.0支持共享虛擬內存(SVM),因此包含指針的內存是合法的,因爲主機和設備共享一個地址空間。儘管有三個不同的粒度級別,這將限制你可以指向哪些指針。在最粗糙的情況下,它們只能引用設備當前擁有的相同緩衝區或其他SVM緩衝區內的位置。是的,cl_mem
仍然是將緩衝區傳遞給內核的方式,但在帶有SVM的OpenCL 2.0中,緩衝區可能包含指針。
編輯/增加: OP指出他們只是想共享內核之間的指針。如果這些只是設備指針,那麼可以將它們存儲在一個內核的緩衝區中,並從另一個內核的緩衝區中讀取它們。他們只能引用__global,而不是__local內存。沒有SVM,它們不能在主機上使用。主機當然需要分配緩衝區並將其傳遞給兩個內核以供其使用。就主機而言,它只是不透明的內存。只有內核知道它們是__全局指針。
我知道主機指針不能在GPU上工作。我也瞭解SVM,但這不是我所問的。我只想分享幾個不同內核之間的指針數組。 – Addi
設備指針?然後將它們存儲在一個內核的緩衝區中,並從另一個內核的緩衝區中讀取它們。它們不能在主機上使用。主機當然需要分配緩衝區並將其傳遞給兩個內核以供其使用。 – Dithermaster
好吧,問題是關於如何做到這一點。 – Addi
- 1. 的OpenCL內核+ ClMagma陣列
- 2. OpenCL中內核指針工作
- 3. 共享內存 - 警告:指針和整數之間的比較
- 4. OpenCL中的共享內存
- 5. 共享指針:指針的指針
- 6. OpenCL-共享內存訪問
- 7. 複製包含共享指針列表的共享指針後面的對象
- 8. (共享)指針Singelton
- 9. CUDA:在不同內核之間使用共享內存
- 10. 內核/用戶地址空間之間共享的無鎖隊列
- 11. 在golang中共享接口之間的連接指針
- 12. C++智能指針:共享指針與共享數據
- 13. 正常的指針算術在opencl內核上工作嗎?
- 14. 如何序列化共享/弱指針?
- 15. 在進程之間共享內核對象
- 16. 刪除共享指針
- 17. C++共享指針問題
- 18. 兒童指令之間共享數據
- 19. 指向Char陣列指針的指針
- 20. 如何在內核任務之間共享數據? (具有內核/內核任務的遊戲引擎)
- 21. 陣列指針到陣列
- 22. 類之間的共享列表
- 23. 進程之間不共享共享內存
- 24. 指針陣列的內存分配
- 25. WatchConnectivity,如何在iPhone和Apple Watch之間共享陣列
- 26. 用戶之間Drupal內容共享
- 27. 在模塊之間共享內存
- 28. 陣列的函數指針的指針
- 29. 指針陣列上的指針
- 30. matlab共享C++庫和OpenCL
請考慮刪除C標籤,因爲這個問題似乎不是關於特定於C編程語言的問題。 –