2011-02-17 41 views
4


我被要求測量我的代碼如何「高效」地使用GPU /峯值性能的百分比是算法實現的。我不知道如何做這個比較。現在我已經基本上讓計時器放入我的代碼並測量執行情況。我可以如何將此與最佳性能進行比較並找出可能的瓶頸? (我聽說過視覺輪廓儀,但無法讓它工作......它不斷給我「無法加載輸出」錯誤)。GPU的最佳性能

+1

這將是值得的探查器工作。 – jmilloy 2011-02-18 00:43:42

回答

0

每張卡都有最大的內存帶寬和處理速度。例如,GTX 480帶寬爲177.4 GB/s。你需要知道你的卡的規格。

首先要決定的是您的代碼是內存綁定還是計算綁定。如果它明顯是一個或另一個,這將有助於您專注于衡量正確的「效率」。如果你的程序是內存綁定的,那麼你需要比較你的帶寬和卡的最大帶寬。

您可以通過計算您讀/寫的內存量和除以運行時間(我使用cuda事件進行計時)來計算內存帶寬。下面是calculating bandwidth efficiency的一個很好的例子(查看並行縮減的白皮書)並使用它來幫助驗證內核。


  1. 我不很懂確定效率反之,如果你ALU約束。你可以計算(或分析)指令的數量,但該卡的最大值是多少?

  2. 我也不確定在可能的情況下如果你的內核是內存綁定和ALU綁定之間的東西,該怎麼做。

任何......?

0

一般來說,「高效」可能是您的程序使用多少內存和GPU週期(平均,最小,最大)的度量。那麼在AVG(GPU週期)/最大GPU週期內,效率度量將會是avg(mem)/時間段內的總內存等。

然後,我會將這些指標與某些GPU基準測試套件(您可以假定其在使用大部分GPU時非常高效)中的指標進行比較。或者,您可以針對您選擇的隨機GPU密集型程序進行測量。那就是我該怎麼做,但我從來沒有想過嘗試這麼好運!

至於瓶頸和「最佳」表現。這些可能是NP-Complete問題,沒有人可以幫助你。退出舊的分析器和調試器,開始通過代碼工作。

+0

您可否詳細說明如何進行第一部分? (找到最大/平均GPU週期)?如果有幫助爲了計時目的,我現在使用cutStartTimer和cutStopTimer.Also是否可以使用SDK附帶的bandwidthtest.cu程序? – Manish 2011-02-17 00:51:42

0

不能與分析器和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) 
+0

。我讀了計算器附帶的文檔。但是我不確定如何找到每個線程值的每個塊/寄存器的共享內存。我使用visual studio。我做了類似於 - > nvcc- ..(選項)..文件名從Windows命令提示符,但它沒有工作。你能告訴我如何找到這些參數? ? – Manish 2011-02-17 07:51:25

+1

佔用計算器只是試圖幫助您確定內核的最佳配置,並幫助您確定是否低效地使用設備資源。它不會告訴你你的帶寬或計算效率。 – jmilloy 2011-02-18 00:26:45