在多核異構(gòu)的時代,軟件人員普遍面臨的一個困惑是,面對如此復雜的系統(tǒ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ū)懔ζ款i區(qū)域。已知某算法的AI,其最大可獲取FLOPS很容易計算得到,見如下公式,為AI所在豎直線與Roofline的交點。如算法Algo1的AI處于內(nèi)存帶寬受限區(qū)域,而算法Algo2的AI則位于算力受限區(qū)域,如果Algo1和Algo2為同一問題兩種算法方案,顯然Alg2更有機會獲取滿意的FLOPS。

上面公式代表了理想化的情形,實際操作中,存在各種各樣的天花板(Ceiling)障礙,算法優(yōu)化的過程就是反復突破這些障礙而盡量接近roofline,最后得到理想的性能。如下圖過程展示,介紹如何通過改善算法的數(shù)據(jù)局部性以充分利用Cache,并通過向量化而調(diào)用SIMD硬件資源來達到這一目的。

除了上面介紹的Roofline模型能夠讓我們在特定平臺“紙上談兵”改善算法性能,Roofline也可以可視化同一算法部署在不同平臺時候性能的比較,結(jié)果讓人一目了然。在Google的有關(guān)TPU(TPU是Google開發(fā)的專門用于神經(jīng)網(wǎng)絡算法加速的芯片)的論文《In-Datacenter Performance Analysis of a Tensor Processing Unit》里,作者利用Roofline圖表來比較各種神經(jīng)網(wǎng)絡算法分別部署在同時代CPU、GPU和TPU的性能差異,令人印象深刻。五角星、三角形、圓形分別代表對應算法在TPU、GPU和CPU上運行狀況。

需要指出的是,Roofline模型在實踐中并不像想象般容易,運用的時候有很多細微的地方需要仔細推敲。但它仍不失為非常insightful的尋寶圖,如果你能學會正確解讀,它完全有機會幫我們找到算法性能優(yōu)化的巨大寶藏。以后我們會有很多場合涉及它的理念和具體用法,敬請期待。
編輯:lyn
-
asic
+關(guān)注
關(guān)注
34文章
1278瀏覽量
124996 -
cpu
+關(guān)注
關(guān)注
68文章
11337瀏覽量
226009 -
算法
+關(guān)注
關(guān)注
23文章
4810瀏覽量
98619
原文標題:Roofline模型初步
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
零基礎手寫大模型資料2026
中軟國際攜手華為基于昆侖大模型賦能油氣數(shù)智化轉(zhuǎn)型的創(chuàng)新實踐
百度正式發(fā)布并開源新一代文檔解析模型PaddleOCR-VL-1.5
醫(yī)療后勤應急保障大模型智能調(diào)度系統(tǒng):功能特點與平臺架構(gòu)解析
大模型驅(qū)動的星間鏈路動態(tài)組網(wǎng)分系統(tǒng):功能特點與平臺架構(gòu)解析
基于大模型ai的地面測控站網(wǎng)調(diào)度分系統(tǒng):功能特點與平臺架構(gòu)解析
大模型支撐后勤保障方案生成系統(tǒng):功能特點與平臺架構(gòu)解析
大模型賦能物資需求精準預測與采購系統(tǒng):功能特點與平臺架構(gòu)解析
后勤資源大模型智能調(diào)度系統(tǒng):功能特點與平臺架構(gòu)解析
深度解析 | 低抖動高精度EtherCAT多軸控制的實現(xiàn)與實踐案例
NVMe高速傳輸之擺脫XDMA設計27: 橋設備模型設計
大模型工具的 “京東答案”
AIcube1.4目標檢測模型導入yolotxt格式數(shù)據(jù)集后一直顯示數(shù)據(jù)正在解析,為什么?
cubemx導入模型后找不到keil找不到工程內(nèi)的模型的相關(guān)文件是怎么回事?
NVIDIA使用Qwen3系列模型的最佳實踐
解析Roofline模型實踐
評論