2012-06-05 109 views
4

實際由內核實現的吞吐量是通過使用四個指標CUDA分析器報道:的區別是什麼:DRAM吞吐量VS全球內存吞吐量

  • 全球內存負載吞吐量
  • 全球內存存儲吞吐量
  • DRAM讀取吞吐量
  • DRAM寫入吞吐量

CUDA C最佳實踐指南將全局存儲器加載/存儲吞吐量描述爲實際的吞吐量,並且沒有具體說明DRAM讀/寫吞吐量。

CUPTI用戶指南定義:

  • 全局存儲器加載吞吐量((128 * global_load_hit)+(l2_subp0_read_requests + l2_subp1_read_requests)* 32 - (l1_cached_local_ld_misses * 128))/(gputime)
  • 全局存儲器存儲吞吐量(l2_subp0_write_requests + l2_subp1_write_requests)* 32 - (l1_cached_local_ld_misses * 128))/(gputime)
  • DRAM讀throughpu噸爲(fb_subp0_read + fb_subp1_read)* 32/gputime
  • DRAM寫吞吐量爲(fb_subp0_write + fb_subp1_write)* 32/gputime

我理解的DRAM的讀/寫吞吐量,因爲fb_subp *計數器報告許多DRAM訪問(32字節訪問時遞增1),並被收集用於所有SM。所以我很清楚吞吐量是根據gputime和訪問的字節數來計算的。

我不明白全局內存吞吐量的定義。 global_load_hit和counter沒有定義。我不明白爲什麼l1_cached_local_ld_misses在兩種情況下都被減少了。

DRAM在這種情況下與全局內存不同嗎?

如果我想知道我的內核的實際吞吐量應該使用DRAM還是全局內存吞吐量指標?

回答

0

全局內存加載/存儲會經過高速緩存;其中一些可能會發現一個打擊或回寫。這將避免訪問DRAM。因此,全局內存吞吐量取決於加載/存儲請求的數量以及高速緩存的命中/未命中率。

相比之下,DRAM吞吐量僅基於DRAM訪問進行計算,而不考慮高速緩存的任何影響。

要測量您的情況下的內核吞吐量,您應該使用全局內存吞吐量,因爲這些吞吐量包含緩存效果。

+0

如果我想知道有多少可用帶寬被使用,我應該使用DRAM吞吐量嗎? – user760944

2

全局內存吞吐量是指令從全局地址空間請求的數據量。global_load_hits是來自全局請求的L1高速緩存命中數(高速緩存行大小爲128字節)。公式的其餘部分通過計算對L2的所有訪問來近似全局吞吐量,以訪問錯過L1的訪問。

全局內存是可映射到設備內存和系統內存的虛擬內存空間。

DRAM是物理設備內存(例如卡上的GDDR5)。 DRAM在L2未命中時被訪問。以下虛擬地址空間可以在DRAM /設備存儲器中(全局,本地,常量,指令和紋理)。請注意,這些內存空間中的很多是虛擬地址空間,最終的數據可以駐留在DRAM或系統內存中。

+0

存在**請求的全局負載/存儲吞吐量**指標,用於請求的帶寬量。全局加載/存儲吞吐量報告來自全局地址空間的實際吞吐量。否則感謝您澄清全局內存(虛擬地址空間)和DRAM內存之間的差異。 – user760944