簡體   English   中英

Cuda cudaMemcpy 和 cudaMalloc

[英]Cuda cudaMemcpy and cudaMalloc

我總是讀到將數據從 cpu 分配和傳輸到 gpu 的速度很慢。 這是因為 cudaMalloc 很慢嗎? 是因為 cudaMemcpy 很慢嗎? 還是因為他們倆都很慢?

它主要與兩件事有關,首先是卡和 cpu 之間的 PCIExpress 總線的速度。 另一個與這些功能的運作方式有關。 現在,我認為新的 CUDA 4 對 memory 分配(標准或固定)有更好的支持,並且可以通過總線透明地訪問 memory。

現在,讓我們面對現實吧,在某些時候,您需要從 A 點到 B 點獲取數據來計算某些東西。 處理的最佳方法是進行非常大的計算或使用 CUDA 流在 GPU 上重疊傳輸和計算。

在大多數應用程序中,您應該在開始時執行一次 cudaMalloc,然后不再調用它。 因此,瓶頸實際上是 cudaMemcpy。

這是由於物理限制。 對於標准的 PCI-E 2.0 x16 鏈接,理論上您將獲得 8GB/s,但實際上通常為 5-6GB/s。 將其與設備上具有 80+GB/s 帶寬的 GTX460 等中檔費米進行比較。 您實際上在 memory 帶寬中受到了一個數量級的影響,從而相應地加快了數據傳輸時間。

GPGPU 應該是超級計算機,我相信 Seymour Cray(超級計算機專家)說過,“超級計算機將計算限制問題轉化為 I/O 限制問題”。 因此,優化數據傳輸就是一切。

以我個人的經驗,迭代算法是迄今為止通過移植到 GPGPU(2-3 個數量級)顯示出最佳改進的算法,因為您可以通過在 GPU 上保持原位來消除傳輸時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM