大家都在這裏。因爲OpenCL可以像在GPU上一樣運行CPU上的內核。在GPU中,物理上存在私有內存(寄存器)和共享內存,但是如果我選擇CPU作爲OpenCL設備,那麼私有內存和共享內存是如何實現的?我的意思是,它們是由DRAM還是其他模擬器(L1,L2,甚至L3緩存?),我不確定)。另外,與CPU相比,在CPU上使用共享內存的性能會受到限制,對吧?在OpenCL中,如何在CPU上實現私有內存和共享內存?
1
A
回答
4
沒有語言直接訪問CPU緩存(被引用,但我沒有足夠的代表有3個URL ...)。這反過來又意味着OpenCL無法將私有內存保存在緩存中。
In this presentation from AMD 他們只是將內存模型稱爲由上下文抽取的一系列內存對象(第16頁)。只要緩衝區可用於上下文中的設備,它們就會可讀。當涉及到不同類型的內核內存時,可以放心地假設在CPU上運行而不是在GPU上時,它們之間沒有性能差異(因爲有不同類型的DRAM)。
請記住,如果您在羣集上進行計算,那麼主機內存和本地內存仍然會有所不同,但仍需要考慮傳輸速率。 關於問題的第二部分,請參閱此文章on memory models in OpenCL。從結構化程序中獲得的性能可以讓您只需要在給定的工作組中進行通信。
如要進一步瞭解,請參閱-http://software.intel.com/sites/landingpage/opencl/optimization-guide/index.htm
-1
OpenCL的內存模型是基於GPU架構創建。在CPU上,對全局內存,共享內存和常量內存的訪問通過相同的緩存層次結構。
當然,使用本地內存實現可以提高性能,因爲緩存命中將會增加。
相關問題
- 1. OpenCL中的共享內存
- 2. OpenCL-共享內存訪問
- 3. 如何與shm_open共享現有內存?
- 4. 在共享內存
- 5. 如何在Windows中實現共享內存?
- 6. 在不同的上下文之間共享OpenCL內存對象
- 7. openCL CPU上的最大內存分配
- 8. 使用共享內存實現管道
- 9. 處理OpenCL內核中的臨時矩陣和私有內存
- 10. 在Nvidia的opencl中的共享內存中的動態分配
- 11. C++共享內存泄漏,如何清除共享內存?
- 12. 檢查共享內存是否存在,以及是否存在共享內存
- 13. 內存共享
- 14. linux共享內存實際在哪裏?
- 15. 在內存中緩存數據共享
- 16. IPC與共享內存的共享內存有什麼區別?
- 17. 共享內存在Unix的
- 18. 共享內存中內部進程的屏障實現
- 19. 如何在共享內存中得到共享對象
- 20. 在C++中實現共享內存管理器
- 21. Linux內核如何在2個進程間實現共享內存
- 22. PHP和共享內存
- 23. Java和C++共享內存
- 24. POSIX共享內存和msync
- 25. 共享內存和IPC
- 26. 共享內存和多
- 27. C-fork()和共享內存
- 28. electron.atom.io和共享內存
- 29. 指針和共享內存
- 30. 共享內存和常量