Pipe Utilization管道利用率
Pipe Utilization管道利用率
概述
CUDA設備的每個流式多處理器(SM)都具有許多專門用于執行特定任務的硬件單元。在芯片級,這些單元提供執行管道,翹曲調度程序將指令發送到這些管道。例如,結構單元提供執行結構獲取和執行結構過濾的功能。加載/存儲單元獲取數據并將其保存到內存中。了解這些管道的利用率并了解它們與目標設備的峰值性能有多接近,是分析內核執行效率的關鍵信息;還可以確定由于超標訂購特定類型的管道而導致的性能瓶頸。
背景
開普勒GK110白皮書和NVIDIA GeForce GTX 680白皮書都描述并比較了最新CUDA計算設備的架構細節。下表簡要總結了SM的單位計數及其每個周期對應的管道吞吐量:
對于這些體系結構吞吐量數字,管道利用率指標報告運行時每個管道的觀察利用率。高管道利用率表明,在內核執行期間,相應的計算資源被大量使用并且經常處于忙碌狀態。低值表示管道不經常使用,資源閑置。單個管道的結果彼此獨立;將兩個或多個管道利用率百分比相加不會產生有意義的值。由于管道度量報告為內核啟動期間的平均值,因此低值不一定排除管道在內核執行期間的某個時間點是瓶頸。
算術指令由多個管道執行,如前表中32位浮點指令和特殊函數操作的兩個示例所示。這些管道提供了非常不同的吞吐量,反過來導致了本地算術指令的不同吞吐量,如CUDA C編程指南所述。對于本實驗支持的CUDA設備,這些運算吞吐量為:
根據定義,指令吞吐量表示每個SM每個周期可以處理多少操作。換言之,與指令吞吐量較低的操作相比,具有高吞吐量的操作的發出成本更低。算術工作負載使用這個簡化的成本模型,通過加權發出的指令計數和相應的反向指令吞吐量。這樣做可以評估哪種類型的算術指令占整個處理成本的多少。這對于算術管道利用率高的內核來說尤其有用,以確定哪類算術操作可能達到了可用吞吐量限制。
Charts
Pipe Utilization
顯示在內核執行期間SMs的四個主要邏輯管道的平均利用率。有助于調查管道是否被超額訂閱,從而限制了內核的性能。這也有助于估計添加更多的工作是否能夠很好地擴展,或者是否會達到管道限制。在這種情況下,增加更多的工作可能是指增加更多的算術工作負載(例如,通過提高某些計算的準確性)、增加內存操作的數量(包括引入寄存器溢出),或者增加每個SM的活動扭曲數目的目的是改進指令延遲隱藏。
報告的值是內核執行期間的平均值。低利用率并不保證管道在內核執行期間的某個時刻不會被超額訂閱。
Metrics
Load / Store
加載/存儲包括所有發出的指令,這些指令觸發對目標設備的內存系統的請求,不包括結構操作。負責全局、本地、共享內存以及任何原子操作的加載和存儲操作。還包括泄漏登記。計算能力3.5及更高版本的設備支持通過只讀數據緩存(LDG)加載全局內存;這些操作不影響加載/存儲組,而是在結構管道利用率中考慮。在高負載/存儲利用率的情況下,收集內存實驗以獲得有關執行的內存操作的類型、計數和效率的更多信息。
結構覆蓋所有執行結構提取的已發出指令,對于計算能力為3.5及更高版本的設備,通過只讀數據緩存(LDG)加載全局內存。如果這個指標很高,請運行內存-結構實驗來更詳細地評估執行的結構請求。
控制流包括所有對控制流有影響的已發出指令,如分支指令(BRA、BRX)、跳轉指令(JMP、JMX)、函數調用(CAL、JCAL)、循環控制指令(BRK、CONT)、返回指令(RET)、程序終止(EXIT)和屏障同步(BAR)。有關這些單獨指令的詳細信息,請參閱“指令集參考”。如果控制流利用率很高,請運行分支統計實驗;這有助于了解控制流對總體內核執行性能的影響。
算術涵蓋所有發出的浮點指令、整數指令、轉換操作和移動指令。請參閱“指令集參考”,以獲取這些組中每個組的匯編指令的詳細列表。如果算術管道利用率很高,請檢查算術工作負載圖,以確定成本最高的指令類型。
Arithmetic Workload
提供各種算術指令的估計成本分布。成本模型是基于問題計數加權相應的指令吞吐量的倒數。指令類與本文背景部分給出的算術吞吐量表的行相匹配。
算術指令由芯片上的多個流水線執行,這些流水線可以并行運行。因此,算術工作負載分布并不是流水線利用率圖表所示算術流水線百分比的真實劃分;然而,成本估計值最高的指令類型很可能導致最高的片上流水線利用率。
Metrics
All references to individual assembly instructions in the following metric descriptions refer to the native instruction set architecture (ISA) of CUDA devices as further described in the Instruction Set Reference.
FP32 Estimated workload for all 32-bit floating-point add (FADD), multiply (FMUL), multiply-add (FMAD) instructions.
FP64 Estimated workload for all 64-bit floating-point add (DADD), multiply (DMUL), multiply-add (DMAD) instructions.
FP32 (Special) Estimated workload for all 32-bit floating-point reciprocal (RCP), reciprocal square root (RSQ), base-2 logarithm (LG2), base 2 exponential (EX2), sine (SIN), cosine (COS) instructions.
I32 (Add) Estimated workload for all 32-bit integer add (IADD), extended-precision add, subtract, extended-precision subtract, minimum (IMNMX), maximum instructions.
I32 (Mul) Estimated workload for all 32-bit integer multiply (IMUL), multiply-add (IMAD), extended-precision multiply-add, sum of absolute difference (ISAD), population count (POPC), count of leading zeros, most significant non-sign bit (FLO).
I32 (Shift) Estimated workload for all 32-bit integer shift left (SHL), shift right (SHR), funnel shift (SHF) instructions.
I32 (Bit) Estimated workload for all 32-bit integer bit reverse, bit field extract (BFE), bit field insert (BFI) instructions.
Logical Ops Estimated workload for all logical operations (LOP).
Shuffle Estimated workload for all warp shuffle (SHFL) instructions.
Conv (From I8/I16 to I32) Estimated workload for all type conversions from 8-bit and 16-bit integer to 32-bit types (subset of I2I).
Conv (To/From FP64) Estimated workload for all type conversions from and to 64-bit types (subset of I2F, F2I, and F2F).
Conv (All Other) Estimated workload for all all other type conversions (remaining subset of I2I, I2F, F2I, and F2F).
Analysis
如果裝載/儲存管道利用率高…
…運行內存實驗,尋找超出每個請求的理想事務數的內存操作;改進這些非最佳內存訪問可以減少加載/存儲管道的負載。
…考慮是否可以通過使用不同的實現或不同的算法來減少執行的內存操作的總數。
…并且單個線程訪問內存中的連續值,確保使用最寬的內存訪問類型來執行操作。例如,如果每個線程需要讀取128字節的連續內存,那么在一次128字節的訪問中讀取數據要比執行4次32字節的訪問要好。為此,請使用內置向量類型。
…并且內存統計-本地實驗顯示本地內存請求數很高,可以打印PTX優化匯編程序的代碼生成統計信息(–ptxas options=-v)以獲得溢出字節數;如果高,請嘗試通過更改內核啟動的執行配置或啟動邊界來減少溢出。
如果紋理管道利用率高…
…運行內存統計-紋理實驗,并研究紋理提取的效率。
…考慮是否可以通過使用不同的實現或不同的算法來減少執行的紋理操作的總數。還要檢查內核是否已經接近目標設備的預期峰值紋理性能。
如果控制流管道利用率高…
…進行分支統計實驗。在低控制流效率和高流量控制發散的情況下,嘗試以最小化翹曲發散為目標重新組合核心網格的線程。
如果算術管道利用率高…
…檢查算術工作負載并開始優化成本最高的指令類型。在可能的情況下,喜歡更快、更專業的數學函數,而不是更慢、更通用的函數。另請參閱CUDAC最佳實踐指南中的優化算術指令的一般提示。
…運行實現的FLOPS實驗和實現的IOPS。檢查內核是否接近目標設備的峰值性能,并研究是否有可能減少執行的算術指令數。
總結
以上是生活随笔為你收集整理的Pipe Utilization管道利用率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nsight Compute Profi
- 下一篇: 用NVIDIA NsightcCompu