我試圖找出一種方法來分配的內存塊是由兩個主機(CPU)和裝置(GPU)可訪問的訪問。除了使用cudaHostAlloc()函數來分配CPU和GPU都可以訪問的頁面鎖定內存以外,還有其他的方式來分配這樣的內存塊嗎?預先感謝您的意見。CUDA內存分配用於主機和設備
0
A
回答
2
主機和設備「共享」內存的唯一方法是使用較新的零複製功能。這在GT200架構卡和一些較新的筆記本電腦卡上可用。正如你注意到的那樣,該內存必須與cudaHostAlloc一起分配,以便頁面被鎖定。沒有其他選擇,即使這種功能在舊版CUDA兼容卡上也不可用。
如果你只是尋找一種簡單的(可能非高性能)的方式來管理主機設備傳輸,檢查出的推力庫。它具有一個向量類,可以讓您在設備上分配內存,但是可以像在主機上一樣從主機代碼讀取和寫入內存。
另一種選擇是編寫自己的包裝器來管理您的傳輸。
0
不,沒有在GPU內存上上傳緩衝區的「自動方式」。
1
沒有辦法分配一個緩衝區,除非你使用cudaHostAlloc()
是由GPU和CPU都可以訪問。這是因爲您不僅必須在CPU上分配固定內存(您可以在CUDA之外執行該操作),還必須將內存映射到GPU(或更具體地說,上下文的)虛擬內存中。
確實,在獨立GPU上零拷貝確實會導致總線傳輸。但是,如果您的訪問很好地結合在一起,並且只在數據仍然有效時才使用,因爲替代方法是將數據傳輸到設備,然後分兩個階段將其讀入多處理器。
相關問題
- 1. CUDA主機和使用相同的設備__constant__內存
- 2. CUDA和C++用於主機和設備代碼
- 3. 在主機設備上分配的空閒內存
- 4. 設備內存刷新cuda
- 5. 複製到CUDA到設備內存CUDA
- 6. 在CUDA設備中的內存分配不是預期的
- 7. 在CUDA的設備內存上分配二維數組
- 8. gpuocelot是否支持CUDA設備中的動態內存分配?
- 9. CUDA設備到主機複製很慢
- 10. CUDA:共享內存分配
- 11. CUDA內存分配性能
- 12. cuda內存分配cudaMalloc
- 13. CUDA(嵌套?)內存分配
- 14. CUDA內存分配和訪問問題
- 15. 如何在主機內存中分配一半OpenCL緩衝區,另一半分配給設備內存?
- 16. CUDA內核內部的內存分配
- 17. 將主機分支重新分配到主設備上
- 18. CUDA內存不返回到主機
- 19. 如何正確地將內存從設備複製到CUDA中的主機?
- 20. 需要CUDA設備內存交易
- 21. CUDA擴展std :: vector以管理主機和設備數據
- 22. CUDA Parallel NSight同時調試主機和設備
- 23. cuda - 在分配內存和將數據複製到設備的過程中,PyCuda比純Cuda慢嗎?
- 24. 用於啓用設備和分配內存的PCIe驅動程序錯誤
- 25. 使用CUDA的GPU設備和零拷貝固定內存
- 26. CUDA如何在主機代碼中聲明常量內存時訪問設備內核中的常量內存?
- 27. 使用CUDA進行暴力攻擊。關於內存分配
- 28. CUDA:重新分配內存時無效的設備指針錯誤
- 29. 如何在CUDA中將設備內存分配給我的指針數組?
- 30. 設備內存上的多個指針爲單個分配數組在cuda
不,但問題是關於可從主機和設備訪問的內存。零拷貝(固定主機內存)在較新版本的CUDA中提供了此功能。將GPU集成到芯片組並將系統內存用作GPU內存顯然非常有用。對於獨立GPU(即插入PCIe插槽),零拷貝會導致總線傳輸。 – mch 2009-11-19 20:52:56