是否可以在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內核數據
- 2. 通過共享內存進程之間共享指針IPC
- 3. 的OpenCL內核+ ClMagma陣列
- 4. 線程之間共享指針嗎?
- 5. 子進程之間共享指針
- 6. 通過共享內存共享指針
- 7. OpenCL中內核指針工作
- 8. 共享內存 - 警告:指針和整數之間的比較
- 9. 指針和共享內存
- 10. OpenCL - 陣列的內核增量索引
- 11. OpenCL中的共享內存
- 12. 用戶空間和內核線程之間的共享內存
- 13. 共享內存矩陣乘法內核
- 14. 共享指針:指針的指針
- 15. 在不同的上下文之間共享OpenCL內存對象
- 16. 陣列和指針之間的區別
- 17. 共享內存段內的指針
- 18. OpenCL-共享內存訪問
- 19. 用戶模式和內核模式之間的共享內存
- 20. 複製包含共享指針列表的共享指針後面的對象
- 21. 在OpenCL 1.2內核之間傳遞變量/內核之間的通信
- 22. 共享內存中的指針
- 23. 替換共享指針的內容?
- 24. (共享)指針Singelton
- 25. 通過C++中的指針共享對象之間的數據
- 26. CUDA:在不同內核之間使用共享內存
- 27. 內核/用戶地址空間之間共享的無鎖隊列
- 28. opencl:內核之間的異步內存共享(具有相同的上下文,設備)
- 29. 在golang中共享接口之間的連接指針
- 30. C++智能指針:共享指針與共享數據
請考慮刪除C標籤,因爲這個問題似乎不是關於特定於C編程語言的問題。 –