在多核異構(gòu)的時代,軟件人員普遍面臨的一個困惑是,面對如此復(fù)雜的系統(tǒng),應(yīng)該如何部署我們的算法,是應(yīng)該讓它運行在CPU,GPU還是甚至類似TPU的專門ASIC上才是最佳方案?另外給定特定的計算平臺,我們的算法實現(xiàn)是不是已經(jīng)榨干硬件平臺的最大能力,還有沒有進一步改善的空間?這些問題尋尋覓覓答案,真像霧里看花,我們渴望有一雙慧眼,幫我們穿透迷津。
在衡量計算效能的正確姿勢我們提到了內(nèi)存帶寬(memory bandiwidth)和以FLOPS為代表的算力是可以很好的刻畫計算平臺的兩個指標。同時既然是要衡量算法的性能自然我們也要考慮算法的特性。基于此,論文《Roofline: An Insightful Visual Performance Model for Floating-Point Programs and Multicore Architectures》提出了Roofline模型,試圖對硬件和軟件通盤考慮,從而提出改善性能的洞見。
這里我們試著解釋如下,首先我們要介紹運算強度(arithmetic intensity,簡寫成AI)的概念,指的是針對單位內(nèi)存讀寫數(shù)據(jù)進行的運算次數(shù),以FLOP/Byte為單位。比如衡量計算效能的正確姿勢(2)介紹過的SAXPY,每次迭代,有三次內(nèi)存訪問(x讀一次,y讀寫各一次),而有兩次浮點運算(乘加各一次),所以其AI為(2 * N) / (3 * N * 4) = 1/6。
int N = 1 《《 22;
void saxpy(float a, float *x, float *y){
for (int i = 0; i 《 N; ++i)
y[i] = a*x[i] + y[i];
}
引進AI后,算力FLOPS就可以用以下公式來計算。
兩邊取對數(shù),
以logFLOPS為Y,logAI為X,我們可以得到斜截式 Y = X + logBW,另對特定平臺,算力FLOPS存在極限值,據(jù)此我們可以作如下圖。
圖中紫色的線條是不是很類似屋脊線,這正是該模型命名的由來。以脊點為界,左邊區(qū)域構(gòu)成內(nèi)存帶寬瓶頸區(qū)域,右邊區(qū)域?qū)?yīng)算力瓶頸區(qū)域。已知某算法的AI,其最大可獲取FLOPS很容易計算得到,見如下公式,為AI所在豎直線與Roofline的交點。如算法Algo1的AI處于內(nèi)存帶寬受限區(qū)域,而算法Algo2的AI則位于算力受限區(qū)域,如果Algo1和Algo2為同一問題兩種算法方案,顯然Alg2更有機會獲取滿意的FLOPS。
上面公式代表了理想化的情形,實際操作中,存在各種各樣的天花板(Ceiling)障礙,算法優(yōu)化的過程就是反復(fù)突破這些障礙而盡量接近roofline,最后得到理想的性能。如下圖過程展示,介紹如何通過改善算法的數(shù)據(jù)局部性以充分利用Cache,并通過向量化而調(diào)用SIMD硬件資源來達到這一目的。
除了上面介紹的Roofline模型能夠讓我們在特定平臺“紙上談兵”改善算法性能,Roofline也可以可視化同一算法部署在不同平臺時候性能的比較,結(jié)果讓人一目了然。在Google的有關(guān)TPU(TPU是Google開發(fā)的專門用于神經(jīng)網(wǎng)絡(luò)算法加速的芯片)的論文《In-Datacenter Performance Analysis of a Tensor Processing Unit》里,作者利用Roofline圖表來比較各種神經(jīng)網(wǎng)絡(luò)算法分別部署在同時代CPU、GPU和TPU的性能差異,令人印象深刻。五角星、三角形、圓形分別代表對應(yīng)算法在TPU、GPU和CPU上運行狀況。
需要指出的是,Roofline模型在實踐中并不像想象般容易,運用的時候有很多細微的地方需要仔細推敲。但它仍不失為非常insightful的尋寶圖,如果你能學(xué)會正確解讀,它完全有機會幫我們找到算法性能優(yōu)化的巨大寶藏。以后我們會有很多場合涉及它的理念和具體用法,敬請期待。
編輯:lyn
-
asic
+關(guān)注
關(guān)注
34文章
1243瀏覽量
122075 -
cpu
+關(guān)注
關(guān)注
68文章
11049瀏覽量
216161 -
算法
+關(guān)注
關(guān)注
23文章
4701瀏覽量
94876
原文標題:Roofline模型初步
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Texas Instruments TLK6002ZEU 6千兆位每秒 (Gbps) 的雙通道串行器-解串器 EDA模型與數(shù)據(jù)手冊解析

千方科技大模型技術(shù)在交通運輸領(lǐng)域的應(yīng)用實踐
NVIDIA使用Qwen3系列模型的最佳實踐

?VLM(視覺語言模型)?詳細解析

NVIDIA大語言模型在推薦系統(tǒng)中的應(yīng)用實踐

用PaddleNLP在4060單卡上實踐大模型預(yù)訓(xùn)練技術(shù)

【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗】+第一章初體驗
光電效應(yīng)的數(shù)學(xué)模型及解析
TLC555-Q1 spice模型到LTSPICE仿真軟件中提示無法解析是怎么回事?
云知聲山海大模型的訓(xùn)練優(yōu)化方法及應(yīng)用實踐
【《大語言模型應(yīng)用指南》閱讀體驗】+ 基礎(chǔ)知識學(xué)習(xí)
PyTorch神經(jīng)網(wǎng)絡(luò)模型構(gòu)建過程
AI大模型的發(fā)展歷程和應(yīng)用前景
我在大模型應(yīng)用之RAG方向的探索、實踐與思考

利用大模型服務(wù)一線小哥的探索與實踐

評論