2016-06-09 34 views
1

從命令行使用nvprof --metrics測量帶寬的正確選項是什麼?我正在使用flop_dp_efficiency獲得峯值FLOPS的百分比,但手冊中的帶寬測量似乎有很多選項,我並不真正瞭解我正在測量的內容。例如dram_read,dram_write,gld_read,gld_write對我來說都是一樣的。另外,我應該通過假設兩者同時發生來報告bandwdith作爲讀寫吞吐量的總和嗎?帶寬的nvprof選項

編輯:

根據與圖中的出色答卷,這將是從設備內存將內核的帶寬?我正在考慮從內核到設備內存的路徑上使用最小帶寬(讀取+寫入),這可能會導致L2緩存。

我試圖通過測量FLOPS和帶寬來確定內核是否受計算或內存限制。

+0

http://docs.nvidia.com/cuda/profiler-users-guide/index.html#metrics-reference – kangshiyin

+0

爲什麼單獨報告全局內存(gld)和dram(設備內存)的帶寬? – user1382302

+0

您可以將這些名稱與GUI版本名稱進行比較。看起來device mem吞吐量是硬件視圖。它不包括緩存命中,但包括ECC位。全局mem吞吐量是軟件視圖。這與計算代碼中的吞吐量相同。 – kangshiyin

回答

9

爲了理解這方面的分析器指標,有必要了解GPU中的存儲器模型。我發現the diagram published in the Nsight Visual Studio edition documentation是有用的。我已標記了其是指編號度量編號的箭頭(和轉移的方向)的圖我已經列出如下:

enter image description here

請參閱CUDA profiler metrics reference每個度量的描述:

  1. dram_read_throughput,dram_read_transactions
  2. dram_write_throughput,dram_write_transactions
  3. sysmem_read_throughput,sysmem_read_transactions
  4. sysmem_write_throughput,sysmem_write_transactions
  5. l2_l1_read_transactions,l2_l1_read_throughput
  6. l2_l1_write_transactions,l2_l1_write_throughput
  7. l2_tex_read_transactions,l2_texture_read_throughput
  8. 質地是隻讀的,沒有成交的可能這個路徑
  9. shared_load_throughput上,shared_load_transactions
  10. shared_store_throughput,shared_store_transactions
  11. l1_cache_local_hit_rate
  12. L1是寫式高速緩存,所以沒有(獨立的)指標爲這個路徑 - 參考其他地方的指標
  13. l1_cache_global_hit_rate
  14. 見注12
  15. gld_efficiency,gld_throughput,gld_transactions
  16. gst_efficiency,gst_throughput,gst_transactions

注:

  1. 從右到左的箭頭表示讀取活動。從左到右的箭頭表示寫入活動。
  2. 「global」是一個邏輯空間。它從程序員的角度指向邏輯地址空間。指向「全局」空間的事務最終可能在緩存之一,sysmem或設備內存(dram)中。另一方面,「dram」是一個物理實體(例如,L1和L2緩存)。 「邏輯空間」全部在緊挨着「內核」列右側的圖的第一列中描述。右邊的其餘列是物理實體或資源。
  3. 我還沒有試圖用圖表上的位置標記每個可能的內存度量標準。希望如果你需要弄清其他人,這張圖表將會很有啓發性。

通過以上描述,可能您的問題仍然可能無法解答。那麼你就有必要澄清你的要求 - 「你想要準確衡量什麼?」然而,根據您撰寫的問題,如果您關心的是實際使用的內存帶寬,您可能需要查看dram_xxx度量標準。另外,如果您只是想估計最大可用內存帶寬,那麼使用CUDA示例代碼bandwidthTest可能是獲得代理測量的最簡單方法。只需使用報告的設備來設備的帶寬數量,作爲您的代碼可用的最大內存帶寬的估計值。

結合上述思想,dram_utilization指標給出了一個縮放結果,該結果表示實際使用的總可用內存帶寬的部分(從0到10)。

+0

特別感謝您的圖!我編輯了我的問題。 – user1382302

+1

將dram_read_transactions添加到dram_write_transactions中,將字節縮小32,然後除以內核執行時間 –

+1

如果您只是想確定計算與內存綁定,只需將dram_utilization與alu_fu_utilization進行比較即可。 –