我試圖找出一種方法來分配的內存塊是由兩個主機(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. 設備內存刷新cuda
- 4. 複製到CUDA到設備內存CUDA
- 5. 在CUDA設備中的內存分配不是預期的
- 6. 在CUDA的設備內存上分配二維數組
- 7. CUDA:共享內存分配
- 8. CUDA內存分配性能
- 9. CUDA內存分配和訪問問題
- 10. CUDA內核內部的內存分配
- 11. 將主機分支重新分配到主設備上
- 12. CUDA內存不返回到主機
- 13. 如何正確地將內存從設備複製到CUDA中的主機?
- 14. 需要CUDA設備內存交易
- 15. CUDA擴展std :: vector以管理主機和設備數據
- 16. cuda - 在分配內存和將數據複製到設備的過程中,PyCuda比純Cuda慢嗎?
- 17. 用於啓用設備和分配內存的PCIe驅動程序錯誤
- 18. CUDA全局(如C語言)分配給設備內存的動態數組
- 19. 設備內存上的多個指針爲單個分配數組在cuda
- 20. CUDA:重新分配內存時無效的設備指針錯誤
- 21. CUDA使用cudaMemcpy2D將數組從設備複製到主機
- 22. 設備與CUDA的分裂
- 23. Cuda不同的內存分配
- 24. CUDA,全局內存或主機內存哪個更快?
- 25. CUDA:主機存儲器指針不會被複制到設備存儲器
- 26. 在設備代碼中使用指向設備內存的主機類成員
- 27. 小內存設備中的內存分配
- 28. CUDA主機到設備的傳輸速度比設備到主機的傳輸速度更快
- 29. 將設備中分配的數據從設備複製到主機
- 30. 複製陣列從主機到設備的CUDA
不,但問題是關於可從主機和設備訪問的內存。零拷貝(固定主機內存)在較新版本的CUDA中提供了此功能。將GPU集成到芯片組並將系統內存用作GPU內存顯然非常有用。對於獨立GPU(即插入PCIe插槽),零拷貝會導致總線傳輸。 – mch 2009-11-19 20:52:56