我正在爲不同大小的數據運行主機到設備bandwidthtests,並且注意到主機內存針對可分頁時被增加的帶寬。以下是我以MB/s爲單位的帶寬與以字節爲單位的數據傳輸大小的關係圖。人們可以注意到,對於少量的數據(< 300K),可分頁的票價優於固定...是否與O/S的內存分配有關? 這個帶寬測試程序來自NVidia的代碼示例sdk(稍加修改),我正在使用CUDA 4.0對Tesla C2050進行測試。 O/S是64位Linux。CUDA用於小數據的固定內存
2
A
回答
1
爲了儘可能實現最佳吞吐量,cudaMemcpy實現針對不同設備,源和目標位置以及數據大小具有不同的代碼路徑。
您所看到的不同速率可能是由於數組大小更改時的實現切換所致。例如,Fermi GPU具有專用複製引擎(可以與運行在SM上的內核並行運行),以及可以通過PCI-e訪問主機內存的SM。對於較小的陣列,可以將cudaMemcpy作爲在SM上運行的內核來實現,這些內核可以直接讀取主機內存並將加載的數據存儲在設備內存中(反之亦然),因此驅動程序可以選擇執行此操作。或者使用複製引擎可能更有效 - 我不確定它在實踐中的作用,但我認爲在它們之間切換是您在圖形中看到交叉的原因。
0
這可能是測試是一種欺騙行爲。
下面是定時碼之一:
cutilSafeCall(cudaEventRecord(start, 0));
if(PINNED == memMode)
{
for(unsigned int i = 0; i < MEMCOPY_ITERATIONS; i++)
{
cutilSafeCall(cudaMemcpyAsync(h_odata, d_idata, memSize,
cudaMemcpyDeviceToHost, 0));
}
}
else
{
for(unsigned int i = 0; i < MEMCOPY_ITERATIONS; i++)
{
cutilSafeCall(cudaMemcpy(h_odata, d_idata, memSize,
cudaMemcpyDeviceToHost));
}
}
cutilSafeCall(cudaEventRecord(stop, 0));
注意,該測試使用不同的功能,爲不同類型的內存做的memcpy。我認爲,這是一種欺騙,因爲模式之間的主要區別在於內存如何分配,其中cudaHostAlloc用於固定,而malloc用於未固定。
不同的Memcpy函數可以有不同的錯誤檢查和傳輸設置路徑。
因此,嘗試修改測試並在cudaMemcpy()
(例如,並將cudeEventRecord(...)
之後的所有ifs更改爲if(0 && (PINNED == memMode))
相關問題
- 1. CUDA和cudamemcpy中的固定內存()
- 2. cuda固定大小的全局數組
- 3. CUDA是否固定內存零拷貝?
- 4. CUDA固定內存併合並
- 5. CUDA:哪個內存空間是固定大小的數組存儲?
- 6. 使用CUDA的GPU設備和零拷貝固定內存
- 7. 在CUDA中綁定固定映射內存的紋理
- 8. 使用CUDA和Java分配大型固定內存塊
- 9. 如何使用CUDA從tensorflow python庫中固定內存
- 10. Cuda的:固定內存零拷貝的問題
- 11. 固定內存
- 12. 如何使矢量類型值固定在cuda中的內存
- 13. 固定大小LinkedHashMap內存泄漏?
- 14. 在本地內存中使用CUDA定義可變大小陣列使用CUDA
- 15. CUDA固定內存從設備中刷新
- 16. 固定大小的結構數組的內存問題
- 17. 在固定大小的數組內存儲「N」個記錄
- 18. OpenCL的固定內存VS堆內存
- 19. 固定大小的數據庫 - 優勢?
- 20. UICollectionView固定內容大小
- 21. 在CUDA內核中使用很多固定尺寸的矩陣
- 22. 爲什麼CUDA中的恆定內存大小受到限制?
- 23. 固定大小的數組
- 24. 關於CUDA __constant__內存和多GPU?
- 25. 可存放在共享內存中的數據量CUDA
- 26. AMD clEnqueueMapBuffer和固定內存
- 27. C++內存泄漏固定
- 28. 固定pthreads內存和CPU
- 29. CUDA共享內存佔用
- 30. 用於C++的固定大小數組的池分配器
謝謝你解釋,但我使用'cudaMemcpy(...)'固定和可分頁的分配。 – Sayan
而對於原始的「作弊」代碼,結果如何? – osgx
上面的代碼是來自測試,但是您遺漏的是在最後一行之後,它在停止主計時器之前調用cudaDeviceSynchronize()。這確保了整個複製成本是定時的,並且bandwidthTest不會「欺騙」。 – harrism