GPU效能衡量指標

panda愛學習發表於2020-11-11

GPU加速優化之前,我們先看看GPU的效能衡量。

  1. FLOPS
  2. Occupancy

FLOPS(Floating-point-operations-per-second)

每秒浮點運算量,是衡量GPU硬體計算能力的指標。

 

Occupancy

佔有率,每個SM的活動執行緒束(possible active warps)數量與實際的活動執行緒束(active warps)數量的比值。它是衡量CUDA硬體執行效率的指標。CUDA上的執行緒指令是序列執行的。因此,在某些warp被暫停或者阻塞的時候,啟動另外的warp來保持硬體的busy,對於提升硬體執行效率來說非常重要。

儘管更高的佔有率並不總是意味著更高的效率,但是低的佔有率卻會影響掩蓋記憶體延遲的能力,進而引起效率的退化。當佔有率達到50%後,我們不會再尋求通過提高佔有率來提升效率。

影響Occupancy的因素有3個:

暫存器資源(register availability, thread私有)

Register 儲存了執行緒中的區域性變數,具有最低的存取延遲。但是能分配給SM上每個block以及每個thread的暫存器數量是有限的。Registers是一次性被分給一個block。如果每個thread擁有太多暫存器,則能駐存與SM上的block數量就會減少,從而降低Occupancy。因此每個thread能擁有的暫存器數目設定非常關鍵,這個值可以在編譯時通過maxrregcount或者__lauch_bounds_手動設定。nvcc --ptxas options=v 可以檢視每個kernel的每個執行緒的可用暫存器數量。

共享記憶體資源(shared memory,block內的thread共享)

通常,一個kernel要求的shared memeory是和block size有關的。每個block的thread是共享shared memory。分配給單個block的shared memory越多,則SM上能駐存的block越少,則Occupancy就會下降。

SM最大併發threads數量,SM最大併發warps數量,SM最大併發blocks數量

SM對於最大併發thread數,最大併發warps數,最大併發blocks數都是有限制的。如果這些數量超過了限制值,則多出的thread和warp和block就會等待,直到輪到自己的時候才開始工作。這樣的話SM是無法到達Occupancy的理論最大值的,且效能也會降低。

 

相關文章