2014-10-08 57 views
2

我想學習NSIGHT。NSIGHT:內核級實驗中的紅色和黑色是什麼?

有人能告訴我這些紅色標記是從User Guide取下的截圖中指示的嗎?如您所見,每個SM的佔用率有兩個紅色標記,經線部分有兩個紅色標記。

同樣,那些長度不等的黑線是什麼?

enter image description here

來自同一頁面又如:

enter image description here

+0

我的理解是黑條代表「理論」列中的值,紅色方塊代表實現的值。當數值或條形是紅色時,這意味着它是一個限制因素。 ICBWT。 – 2014-10-08 10:51:25

+0

@Cicada你有什麼想法爲什麼一些實現下的領域是空白的? – user3891236 2014-10-09 11:44:34

回答

3

下面是基本的解釋:

  • 灰色條代表您的特定 設備有可用的資源量(由於其硬件和計算能力)。
  • 黑條表示可以在啓動配置下爲內核實現的理論限制(每個網格塊和每個塊的線程數)
  • 紅色點代表您正在使用的資源。

例如,看在所述第一圖像的 「Active經線」:

  • 灰色:該設備支持64個活動warp兼任。
  • 黑色:由於使用了寄存器,理論上可以映射64個經紗。
  • 紅色:你實現63.56活躍經紗。

在這種情況下,灰色條在黑色條之下,所以你不能看到灰色條。

在某些情況下,可能會發生理論極限值超過設備極限值。還行吧。你可以在第二張圖片上看到例子(塊限制(共享內存)和塊限制(寄存器)),如果你認爲你的內核只使用了你的一小部分資源,這是有道理的;如果一個塊使用1個寄存器,它可能是可能啓動65536個塊(不考慮其他因素),但是你的設備限制仍然是16個。然後,128個來自65536/512。這同樣適用於共享內存部分:因爲你使用0字節的共享內存每塊的,你可以根據共享內存的限制,推出塊的無限數量。

關於空格 的理論和實現值是除「活動Warp」和「佔用」的所有行相同。 你真的是在第一張圖片上每塊執行1024個線程,每塊32個扭曲。 在佔用率和活動經紗的情況下,我猜測達到的數量是一種統計測量。我認爲這是因爲CUDA模型的本質。在CUDA中,變形內的每個線程都在SM上同時執行。隱藏高延遲操作(如內存讀取)的方式是通過「幾乎免費的warps上下文切換」。我想這應該很難準確衡量在這種情況下活動經紗的數量。除了硬件的概念,我們還必須考慮到內核實現,分支發散,例如可以使經紗比別人慢...等

擴展信息

正如你所看到的,這些數字是密切相關的設備特定的硬件和計算能力,因此,或許一個具體的例子可以幫助這裏:

與CCC 3.0一個devide最多可每SM 2048個線程,每個SM 16分 塊處理和每個SM 64經紗。您還可以使用最大數量爲 的寄存器(在該情況下爲65536)。

This維基百科條目是一個方便的網站,以瞭解每個ccc功能。

您可以使用隨CUDA工具包提供的deviceQuery實用程序示例代碼查詢此參數,或者在執行時使用CUDA API作爲here

性能考慮

的事情是,在理想情況下的128個線程的16個塊可以使用每線程小於32個寄存器執行。這意味着高入住率。在大多數情況下,你的內核每塊需要32個寄存器,所以不再可能在SM上同時執行16個塊,然後以塊級粒度完成減少,即減少塊數。這是酒吧捕獲的。

你可以用線程和塊數打,甚至與_ _launch_bounds_ _指令來優化你的內核,也可以使用--maxrregcount設置來降低由使用的寄存器的數量單內核來查看它是否提高了整體執行速度。

+0

您能否解釋爲什麼某些字段在實現的列下爲空?如果紅色是理論上的限制,那麼什麼是黑色?你能否更新你的答案反映這些? – user3891236 2014-10-09 08:12:25

+0

在第二個屏幕截圖中也存在太多混淆。參見寄存器塊(128)的理論極限值大於器件極限值(16)。這怎麼可能 ? – user3891236 2014-10-09 08:16:11

+0

希望現在更清楚。很多因素都有關聯,所以我建議你也查看生成的圖表! – srodrb 2014-10-09 09:56:19

相關問題