在編譯器優化上 , 首先是把張量計算拆分開 , 通過對特征圖和卷積kernel的計算拆分 , 編譯器可以用更小的粒度描述計算 , 避免引入不必要的依賴 , 提升數據并行性 , 創造潛在的調度機會 。
接著是指令調度 , 指定調度也是非常經典的編譯器優化方法 , 我們在編譯器層面也做了很多工作 。 首先它是張量 , 相對于寄存器來說 , 很大的不同在于張量是變化的 , 它有不同的channel、kernel , 卷積核 。 因此 , 需要對張量數據做建模 , 同時在軟件方面要有很強的指令流水線調度 , 即是軟流水 。
軟流水的流程如左上角圖所示 , 做完Load、Conv、Store后 , 再做Load、Conv、Store 。 由于兩個Load之間沒有必然的聯系 , 可以用如左下角圖的方式做成流水線 , 可以看到每一組的方塊本身就是一個循環體 , 但是循環體內部的三條指令沒有必然的聯系 , 通過這種方式三個指令就能自由靈活的同時運行 。 右下角圖表示一個實際的網絡執行過程 , 可以看到卷積陣列基本上是完全排滿的 , 沒有任何縫隙 。 ddr_load在中間配合著為卷積陣列提供輸入 , 同時會有一些別的運算 。 整體上可以獲得非常高的卷積利用率 。
上面是提到了卷積切分和指令調度 , 但很關鍵的問題是這么多層該怎么樣切分?這首先想到了C語言編譯器是怎么做的 , 它針對每一個函數內部做分析、編譯 , 然后看函數內部的這些代碼該怎樣做相互之間的優化 。 同理 , 當把卷積神經網絡的一次Inference看成一個函數時 , 應該通盤去看函數內部的整個執行過程中計算要怎樣去做 。
在地平線的實踐中 , 我們利用了一套計算融合技術 , 把算子綜合去看 。 如上圖左邊所示 , 把operator整個融合在一起 , 因為片上的memory總是很有限的 , 而且很貴 , 必要時溢出一些數據到DDR里 , 騰出一塊片上空間來保證執行可以進行下去 , 這塊空間越小越好 , 這樣整個DDR的訪存帶寬可以很小 。
右下角這張圖是720p圖片輸入到ResNet101網絡中 , 可以看到開始是先把圖片裝載到芯片內部 , 然后通過中間的運算 , 再把它存到DDR里 。 中間的過程只有三次DDR的訪問 , 這三次實現了一些數據的搬進、搬出 , 前面大概是一個18層的層融合輸出 , 再有一個14層的層融合輸出 , 最后是一個三層的融合輸出 , 通過這種方式可以最小化整個Inference過程中對DDR帶寬的訪存壓力 。 與此同時 , 還可以看片上的memory到底被利用的怎樣 , 挖掘接下來memory怎樣被利用滿 , 是在編譯器上優化 , 還是在芯片架構或算法張量大小上做更合理的調整 。
上圖是把所有的效果放在一起宏觀展示 , 可以看到有全局的計算融合 , 單層計算拆分和全局計算融合和依賴分析與指令調度 。
2.好用的關鍵:提升產品研發效率
什么是“好用”?我認為好用是把開發者頭腦里對產品的思考 , 利用芯片上所能提供的輔助設施 , 以最快的方式打造出他最想要的產品 , 來提升研發效率 。
怎么樣提升研發效率 , 也不是一個容易衡量的詞 , 所以先看歷史 。 上圖是過去100年時間里整個計算技術的發展 , 從最早利用機械搖桿的密碼破譯、線纜插拔的彈道計算 , 到商用計算、辦公游戲云服務 , 再到大家比較熟悉的移動通信 , 包括安卓和iOS 。 在此之前都無法繞開圖靈機以及控制圖靈機的編程模型 , 去實現人們想要機器做的行為 。
如果大家摸索過幾種不同的編程語言時 , 可以看到不管是C、C++、Java或Python , 它的核心還是if-else、循環、跳轉 , 只不過在用途、編譯計算等方面會有一些不同 , 但基礎東西是沒有變的 。 但是到了自主機器人時代是完全不同的 , 機器可以看懂和聽懂周圍的世界 , 這是一個數據驅動的可微分編程方式 。 在貫穿在整個過程中 , 應用場景和開發范式都在持續迭代 。
相關經驗推薦
- iPhone|蘋果iPhone14傳來新消息,雙4nm芯片,外觀基本敲定,庫克很誠意
- 中興|機皇配置!中興新品曝光信息更新,大電池+4nm芯片確實強
- OPPO|老傳統?韓國三星芯片造假?大客戶紛紛跑路
- PHP|建站常用軟件PhpStudy V8.1圖文安裝教程(Windows版)超詳細
- 中興|5000mAh+4nm芯片+20G運存,中興頂配旗艦讓友商羞愧
- 紅米手機|包圓年度全部旗艦芯片,Redmi K50宇宙真牛!
- iPhoneSE|本月發布!K50系列集結4款旗艦芯片,哪一款讓盧偉冰感到驚艷?
- 小米科技|小米上架新機,驍龍芯片+一億像素+67W快充+三星屏,售價1699元起
- 芯片|IQOO Neo5,雙芯旗艦的配置,12GB僅售2100多
- 軟件|千元機在年輕人里面使用壽命,比家里老人使用的周期,短很多
