我被要求測量我的代碼如何「高效」地使用GPU /峯值性能的百分比是算法實現的。我不知道如何做這個比較。現在我已經基本上讓計時器放入我的代碼並測量執行情況。我可以如何將此與最佳性能進行比較並找出可能的瓶頸? (我聽說過視覺輪廓儀,但無法讓它工作......它不斷給我「無法加載輸出」錯誤)。GPU的最佳性能
GPU的最佳性能
回答
每張卡都有最大的內存帶寬和處理速度。例如,GTX 480帶寬爲177.4 GB/s。你需要知道你的卡的規格。
首先要決定的是您的代碼是內存綁定還是計算綁定。如果它明顯是一個或另一個,這將有助於您專注于衡量正確的「效率」。如果你的程序是內存綁定的,那麼你需要比較你的帶寬和卡的最大帶寬。
您可以通過計算您讀/寫的內存量和除以運行時間(我使用cuda事件進行計時)來計算內存帶寬。下面是calculating bandwidth efficiency的一個很好的例子(查看並行縮減的白皮書)並使用它來幫助驗證內核。
我不很懂確定效率反之,如果你ALU約束。你可以計算(或分析)指令的數量,但該卡的最大值是多少?
我也不確定在可能的情況下如果你的內核是內存綁定和ALU綁定之間的東西,該怎麼做。
任何......?
一般來說,「高效」可能是您的程序使用多少內存和GPU週期(平均,最小,最大)的度量。那麼在AVG(GPU週期)/最大GPU週期內,效率度量將會是avg(mem)/時間段內的總內存等。
然後,我會將這些指標與某些GPU基準測試套件(您可以假定其在使用大部分GPU時非常高效)中的指標進行比較。或者,您可以針對您選擇的隨機GPU密集型程序進行測量。那就是我該怎麼做,但我從來沒有想過嘗試這麼好運!
至於瓶頸和「最佳」表現。這些可能是NP-Complete問題,沒有人可以幫助你。退出舊的分析器和調試器,開始通過代碼工作。
您可否詳細說明如何進行第一部分? (找到最大/平均GPU週期)?如果有幫助爲了計時目的,我現在使用cutStartTimer和cutStopTimer.Also是否可以使用SDK附帶的bandwidthtest.cu程序? – Manish 2011-02-17 00:51:42
不能與分析器和microoptimisation幫助,但有一個CUDA運算http://developer.download.nvidia.com/compute/cuda/CUDA_Occupancy_calculator.xls,它改掉估計請問你的CUDA代碼中使用的硬件資源,在此基礎上的值:
Threads Per Block
Registers Per Thread
Shared Memory Per Block (bytes)
- 1. GPU性能請求,什麼是最佳解決方案?
- 2. 最佳性能ObservableCollection.AddRange
- 3. OpenCV GPU性能
- 4. Scrapy的最佳性能
- 5. GPU性能指標
- 6. OpenCL使用GPU的最佳實踐
- 7. 最佳日誌性能
- 8. WCF最佳性能設置
- 9. MySQL索引最佳性能
- 10. 黑莓SQLite最佳性能
- 11. OOP - 最佳做法/性能
- 12. 使用2個GPU同時調用cudaMalloc時的性能不佳
- 13. 鎖定文件創建的最佳方式(最佳性能)
- 14. 測量的最佳性能表設計
- 15. 比較的String.Empty(C#)最佳性能
- 16. 服務器與Zend的最佳性能
- 17. Android圖庫性能的最佳實踐
- 18. 內存性能的最佳實踐
- 19. SQL DB設計的最佳性能?
- 20. 在windows上STS的最佳性能
- 21. Java 2D繪圖的最佳性能
- 22. 跨多GPU縮放性能
- 23. TensorFlow:多GPU配置(性能)
- 24. 定期GPU性能問題
- 25. iPhone/iPod touch CPU/GPU性能
- 26. Tensorflow多GPU性能不好
- 27. 搜索性能和數據完整性的最佳實踐(或最佳引擎)
- 28. CSS3動畫和最佳移動性能
- 29. 休眠性能最佳實踐?
- 30. CSS3 - 性能最佳實踐是什麼?
這將是值得的探查器工作。 – jmilloy 2011-02-18 00:43:42