2013-03-22 18 views
0

我得到了以下問題。我想使用nvprof來測量我的cuda應用程序的gst_efficiencygld_efficiency。在CUDA 5.0分佈式的文檔告訴我這些使用下列公式計算能力2.0-3.0設備產生:用nvprof計算gst_throughput和gld_throughput

gld_efficiency = 100 * gld_requested_throughput/gld_throughput 

gst_efficiency = 100 * gst_requested_throughput/gst_throughput 

對於所需的度量下面的公式給出:

gld_throughput = ((128 * global_load_hit) + (l2_subp0_read_requests + l2_subp1_read_requests) * 32 - (l1_local_ld_miss * 128))/gputime 

gst_throughput = (l2_subp0_write_requests + l2_subp1_write_requests) * 32 - (l1_local_ld_miss * 128))/gputime 

gld_requested_throughput = (gld_inst_8bit + 2 * gld_inst_16bit + 4 * gld_inst_32bit + 8 
* gld_inst_64bit + 16 * gld_inst_128bit)/gputime 

gst_requested_throughput = (gst_inst_8bit + 2 * gst_inst_16bit + 4 * gst_inst_32bit + 8 
* gst_inst_64bit + 16 * gst_inst_128bit)/gputime 

由於沒有公式給出了使用的度量我假設這些事件可以通過nvprof來計算。但是有些事件似乎在我的gtx 460上不可用(也嘗試過gtx 560 Ti)。我粘貼的output

任何想法什麼是錯的或我誤解了什麼?

編輯: 我不想使用CUDA Visual Profiler,因爲我試圖分析我的應用程序的不同參數。因此,我想使用多個參數配置來運行nvprof,記錄多個事件(每個事件在其一次運行中),然後以表格形式輸出數據。我已經實現了自動化併爲其他指標(即指令發佈)工作,並希望爲加載和存儲效率做到這一點。這就是爲什麼我對涉及nvvp的解決方案不感興趣。順便說一句,對於我的應用程序nvvp未能計算商店效率所需的度量標準,因此在這種情況下它根本無助於我。

+0

一些其他人可以使用Visual探查,直接測量這些指標給你,讓你不需要收集所有這些事件。 – 2013-03-26 00:35:24

+0

@YuZhou請參閱我的編輯,謝謝 – soriak 2013-03-26 08:06:22

+0

- 查詢事件中的事件名稱可能與表中的不同。嘗試下面的公式: 'gld_throughput =((128 * l1_global_load_hit)+(l2_subp0_read_sector_queries + l2_subp1_read_sector_queries)* 32 - (l1_local_ld_miss * 128))/ gputime' 'gst_throughput =(l2_subp0_write_sector_queries + l2_subp1_write_sector_queries)* 32 - (* l1_local_ld_miss 128))/ gputime' – 2013-03-26 20:31:07

回答

1

我很高興有人有同樣的問題:)我試圖做同樣的事情,不能使用Visual Profiler,因爲我想配置6000個不同的內核。

在NVIDIA網站上的公式,記錄不完整 - 實際上變量可以是:

一)事件

二)其他指標

C)不同的變量依賴於GPU,你有

但是,很多指標都存在錯別字,或者在nvprof中比在網站上有所不同。另外,那裏的變量沒有被標記,所以你不能通過查看它們是a),b)還是c)來判斷。我用一個腳本來grep他們,然後必須手工修復它。這是我發現的:

1)「l1_local/global_ld/st_hit/miss」 這些在網站上有nvprof而不是「ld」/「st」的「加載」/「存儲」。

2)「l2_ ...無論... _requests」 這些在nvprof中有「sector_queries」而不是「requests」。

3) 「local_load/store_hit /未命中」 這些具有 「l1_」 在另外的探查 - 「l1_local/global_load/store_hit /錯過」

4) 「tex0_cache_misses」 這其中有 「扇區」在它在探查 - 「tex0_cache_sector_misses」

5) 「tex_cache_sector_queries」 缺少 「0」 - 所以在nvprof 「tex0_cache_sector_queries」。

最後,變量:

1) 「#SM」 流多處理器的數目。通過cudaDeviceProp獲取。

2)「gputime」 顯然,GPU上的執行時間。

3)「warp_size」 GPU上warp的大小,再次通過cudaDeviceProp獲取。

4)「max_warps_per_sm」 sm * #SM *上可執行塊的數量每塊有變形。我猜。

5) 「elapsed_cycles」 發現這一點: https://devtalk.nvidia.com/default/topic/518827/computeprof-34-active-cycles-34-counter-34-active-cycles-34-value-doesn-39-t-make-sense-to-/ 但仍然不能完全肯定,如果我得到它。

希望這有助於你和誰遇到同樣的問題:)

+0

感謝您的回答,非常感謝您的分享。不幸的是,我不得不完成我的項目,沒有這個信息但我希望你的解決方案可以幫助其他人。 – soriak 2013-05-02 11:21:16