我總是讀到它分配和傳輸數據到CPU的速度很慢。這是因爲cudaMalloc速度慢嗎?是因爲cudaMemcpy速度慢嗎?或者它是否因爲它們都很慢?Cuda cudaMemcpy和cudaMalloc
2
A
回答
3
它主要與2件事有關,第一件事開始卡和CPU之間的PCIExpress總線的速度。另一個與這些功能的運作方式有關。現在,我認爲新的CUDA 4可以更好地支持內存分配(標準或固定)以及通過總線透明訪問內存的方式。
現在,讓我們面對它,在某些時候,您需要從點A到點B的數據來計算一些東西。最好的處理方式是要麼進行非常大的計算,要麼使用CUDA流來重疊GPU上的傳輸和計算。
3
在大多數應用程序中,您應該在開始時執行一次cudaMalloc,然後不再調用它。因此,瓶頸真的是cudaMemcpy。
這是由於物理限制。對於一個標準的PCI-E 2.0 x16鏈路,你可以得到8GB/s的理論值,但實際上通常爲5-6GB/s。比較這個w /甚至是一箇中等範圍的Fermi,就像GTX460那個設備上有80 + GB/s的帶寬。實際上,內存帶寬的命中率達到了一個數量級,因此您的數據傳輸時間也相應增加。
GPGPU應該是超級計算機,我相信Seymour Cray(超級計算機傢伙)說,「一臺超級計算機將計算受限的問題轉化爲I/O約束問題」。因此,優化數據傳輸就是一切。
根據我個人的經驗,迭代算法是通過移植到GPGPU(2-3個數量級)顯示最佳改進的算法,因爲您可以通過將所有內容保持在原位來消除傳輸時間GPU。
相關問題
- 1. 對cudaMalloc和cudaMemcpy
- 2. cudamalloc比cudamemcpy慢嗎?
- 3. 做CUDA事件時間cudaMalloc和cudaMemcpy執行?
- 4. CUDA cudaMalloc
- 5. CUDA複製與cudaMemcpy
- 6. CUDA和cudamemcpy中的固定內存()
- 7. cuda內存分配cudaMalloc
- 8. CUDA cudaMemcpy:無效的參數
- 9. 如果cudaMalloc()分配全局內存,那麼爲什麼我需要cudaMemcpy()?
- 10. cudaMalloc在CUDA中導致「未知錯誤」
- 11. CUDA Zero Copy與Jetson上的CudaMemcpy TK1
- 12. 如何使用cudaMalloc/cudaMemcpy指向包含指針的結構的指針?
- 13. CUDA和C++鏈接/編譯,cudaMalloc上的程序崩潰
- 14. cuda和cudamalloc分配大塊內存失敗
- 15. 「cudaMallocManaged」比「cudaMalloc」慢嗎?
- 16. cuda add float array
- 17. CUDA,試圖在設備
- 18. CUDA到設備錯誤
- 19. CUDA點積
- 20. 在CUDA
- 21. CUDA NPP GaussFilter破壞圖像
- 22. CUDA類與多維指針
- 23. cudaMalloc和「內存不足」問題
- 24. Makefile for Gtk +和cuda
- 25. CUDA內存限制
- 26. 安裝CUDA C++庫?
- 27. CUDA陣列 - 矢量乘法
- 28. CUDA上的塊間屏障
- 29. Cuda編譯錯誤:標識符「cudamalloc」未定義
- 30. CUDA 8.0 - cudaMemcpy() - 線性或恆定時間操作?
在我的情況下是相反的......我做一個cudaMemcpy和很多cudaMalloc .... – Lora 2011-05-05 14:18:37
你能談談更多關於你的應用程序嗎?你只是保留許多轉換的副本? – peakxu 2011-05-05 15:06:21
以及在我的情況下,我有一個輸入...但我無法檢測到我需要分配多少內存來解決這個輸入。因此我做了一個輸入的副本....並在需要時分配全局內存。換句話說,當前一個內存已滿時,我分配新的內存。 (請注意,我將需要所有分配的內存來計算完整的結果...) – scatman 2011-05-06 07:40:05