天天看點

Pipe Utilization管道使用率

Pipe Utilization管道使用率

概述             

CUDA裝置的每個流式多處理器(SM)都具有許多專門用于執行特定任務的硬體單元。在晶片級,這些單元提供執行管道,翹曲排程程式将指令發送到這些管道。例如,結構單元提供執行結構擷取和執行結構過濾的功能。加載/存儲單元擷取資料并将其儲存到記憶體中。了解這些管道的使用率并了解它們與目标裝置的峰值性能有多接近,是分析核心執行效率的關鍵資訊;還可以确定由于超标訂購特定類型的管道而導緻的性能瓶頸。             

背景             

開普勒GK110白皮書和NVIDIA GeForce GTX 680白皮書都描述并比較了最新CUDA計算裝置的架構細節。下表簡要總結了SM的機關計數及其每個周期對應的管道吞吐量:

Pipe Utilization管道使用率

對于這些體系結構吞吐量數字,管道使用率名額報告運作時每個管道的觀察使用率。高管道使用率表明,在核心執行期間,相應的計算資源被大量使用并且經常處于忙碌狀态。低值表示管道不經常使用,資源閑置。單個管道的結果彼此獨立;将兩個或多個管道使用率百分比相加不會産生有意義的值。由于管道度量報告為核心啟動期間的平均值,是以低值不一定排除管道在核心執行期間的某個時間點是瓶頸。             

算術指令由多個管道執行,如前表中32位浮點指令和特殊函數操作的兩個示例所示。這些管道提供了非常不同的吞吐量,反過來導緻了本地算術指令的不同吞吐量,如CUDA C程式設計指南所述。對于本實驗支援的CUDA裝置,這些運算吞吐量為:

Pipe Utilization管道使用率

根據定義,指令吞吐量表示每個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)。有關這些單獨指令的詳細資訊,請參閱“指令集參考”。如果控制流使用率很高,請運作分支統計實驗;這有助于了解控制流對總體核心執行性能的影響。              

算術涵蓋所有發出的浮點指令、整數指令、轉換操作和移動指令。請參閱“指令集參考”,以擷取這些組中每個組的彙編指令的詳細清單。如果算術管道使用率很高,請檢查算術工作負載圖,以确定成本最高的指令類型。

Pipe Utilization管道使用率

 Arithmetic Workload

提供各種算術指令的估計成本分布。成本模型是基于問題計數權重相應的指令吞吐量的倒數。指令類與本文背景部分給出的算術吞吐量表的行相比對。              

算術指令由晶片上的多個流水線執行,這些流水線可以并行運作。是以,算術工作負載分布并不是流水線使用率圖表所示算術流水線百分比的真實劃分;然而,成本估計值最高的指令類型很可能導緻最高的片上流水線使用率。

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

DMUL

DMAD

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

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

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

I32 (Bit) Estimated workload for all 32-bit integer bit reverse, bit field extract (

BFE

), bit field insert (

BFI

Logical Ops Estimated workload for all logical operations (

LOP

Shuffle Estimated workload for all warp shuffle (

SHFL

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

F2F

Pipe Utilization管道使用率

 Analysis

如果裝載/儲存管道使用率高…             

…運作記憶體實驗,尋找超出每個請求的理想事務數的記憶體操作;改進這些非最佳記憶體通路可以減少加載/存儲管道的負載。             

…考慮是否可以通過使用不同的實作或不同的算法來減少執行的記憶體操作的總數。             

…并且單個線程通路記憶體中的連續值,確定使用最寬的記憶體通路類型來執行操作。例如,如果每個線程需要讀取128位元組的連續記憶體,那麼在一次128位元組的通路中讀取資料要比執行4次32位元組的通路要好。為此,請使用内置向量類型。              

…并且記憶體統計-本地實驗顯示本地記憶體請求數很高,可以列印PTX優化彙程式設計式的代碼生成統計資訊(--ptxas options=-v)以獲得溢出位元組數;如果高,請嘗試通過更改核心啟動的執行配置或啟動邊界來減少溢出。             

如果紋理管道使用率高…             

…運作記憶體統計-紋理實驗,并研究紋理提取的效率。             

…考慮是否可以通過使用不同的實作或不同的算法來減少執行的紋理操作的總數。還要檢查核心是否已經接近目标裝置的預期峰值紋理性能。              

如果控制流管道使用率高…             

…進行分支統計實驗。在低控制流效率和高流量控制發散的情況下,嘗試以最小化翹曲發散為目标重新組合核心網格的線程。             

人工智能晶片與自動駕駛

上一篇: 課程總結
下一篇: 每日總結66