李澤豪,程利甫,蔣仁興,柳宜川,王琴
(1.上海交通大學電子信息與電氣工程學院,上海,200240;2.上海航天電子技術研究所,上海,201109)
近年來,人工智能已經(jīng)深入到人們生活中的每一個角落,現(xiàn)有的各類神經(jīng)網(wǎng)絡架構的計算量級達到了GB級別,網(wǎng)絡中權重個數(shù)也在百萬數(shù)量級,這導致對神經(jīng)網(wǎng)絡運算的硬件載體的算力和存儲帶寬要求更加嚴格。傳統(tǒng)的基于馮諾依曼結構的CPU已難以滿足要求,GPU和專用集成電路雖然可以大幅度提升運算速度,但分別由于功耗問題和靈活性問題導致其適用范圍比較局限,因此兼具靈活性和低功耗的粗粒度可重構架構[1][2]逐漸成為了研究熱點。
本文結合了脈動陣列的思想,設計了神經(jīng)網(wǎng)絡核心算法各個尺寸卷積操作的高效數(shù)據(jù)流,在保證PE利用率和運算吞吐率的同時保證了配置的可重用特性。
粗粒度可重構架構的核心計算資源是通過可重配置的互連網(wǎng)絡連接而成功能單元陣列,如圖1所示,可以將應用中的計算密集型任務、控制密集型任務或是數(shù)據(jù)密集型任務放置與陣列中進行硬件加速。
圖1 通用CGRA架構
本文搭建的CGRA架構中有4個相同的PEA陣列,每個PEA陣列由64個異構PE組成,處理單元包括ALU、LSU、MUL、MAC等功能,如圖2所示??梢钥吹剑總€PE有四根輸入線,分別是32bits位寬的IN1、IN2、IN3,以及1bit位寬的單比特控制信號IN4,輸出有三根數(shù)據(jù)線,分別是32bits位寬的OUT1和OUT2,以及1bits位寬的輸出控制信號線。Opcode輸入控制PE功能與外部線連接。其中具有LSU功能,能夠訪問片上存儲的PE單元分布在陣列四周。
圖2 卷積窗口3*3數(shù)據(jù)流(a)權重參數(shù)(b)輸入特征圖數(shù)據(jù)(c)卷積部分和
目前的CGRA架構設計中,往往會在mesh結構的基礎上,擴展PE的互連能力[4][5],使得PE能夠與不相鄰的PE進行數(shù)據(jù)傳輸,從而使PE陣列更適合流式處理以達到更高的吞吐率。
本文所搭建的粗粒度可重構架構中,處理單元陣列尺寸為8*8,陣列由64個異構處理單元組成。陣列邊沿的PE可以與之橫向或者縱向距離為3以內的PE進行單周期的數(shù)據(jù)傳輸,并能夠與其距離為7的PE進行單周期數(shù)據(jù)傳輸。
目前針對神經(jīng)網(wǎng)絡這類數(shù)據(jù)密集型和計算密集型的應用,往往會給每個PE配備一個單獨的存儲塊[3]用于存儲頻繁使用的操作數(shù)或者存儲臨時數(shù)據(jù),以降低花費在訪問外部存儲中的時間。通用目的架構為了在各個應用場景達到最高的平均能效,往往不會單獨為每個PE配置較大的存儲空間,替代的則是小型用于少量局部數(shù)據(jù)存儲的LR(local register),本文所用架構的局部寄存器為每個PE提供了深度為16,位寬為32bits的可利用空間。
8*8的陣列結構被分為了四塊,每一塊配備了深度為8的,可供16個PE同時訪問的區(qū)域寄存器,以實現(xiàn)區(qū)域性的數(shù)據(jù)傳輸。另外,所搭建的架構提供了可供陣列上所有PE訪問的8個全局寄存器。
卷積所實現(xiàn)的功能類似于濾波操作,通過Nout個大小為w* h * Nin的三維卷積核W,在輸入特征圖I上以固定步長的滑窗操作遍歷整個輸入特征圖,每次滑窗操作會將卷積核各個位置的權重與其在特征圖中的數(shù)據(jù)相乘,再將所有乘數(shù)相加得到輸出特征圖A中的一個數(shù)據(jù),過程可表示為:
公式中?代表一次二維卷積操作,B為偏置。目前主要的卷積窗口尺寸分別為3*3、5*5以及7*7,因此主要針對這三種卷積窗進行映射數(shù)據(jù)流設計。
對于3*3尺寸的卷積操作,每次計算實際上需要18個獨立的操作數(shù),主要使用到的計算為乘加運算,完成一個卷積結果的輸出需要9次乘法和8次加法。在映射方案中,考慮到18個操作數(shù)中的權重所占的9個操作數(shù)可以重復利用,這部分操作數(shù)則預先通過配置放到了每個PE獨有的Local Register中,待遍歷完輸入特征圖之后再更新,這使得每次運算需要的新操作數(shù)從18個降低為9個。圖2(a)為更新各個PE的Local register的更新路徑,由綠色線條表示。模擬卷積操作的滑動窗口的滑動狀態(tài),可以發(fā)現(xiàn)相鄰兩次滑動窗口中有6個數(shù)可重復利用,應用到PE陣列中,設計方案使用脈動陣列的方式來模擬滑動窗口的滑動過程,在傳遞單次乘法計算結果的同時通過OUT2輸出接口傳遞IN1的輸入數(shù)據(jù),這種數(shù)據(jù)傳輸方式,只需要逐周期傳入輸入特征圖的3行數(shù)據(jù),將前幾個周期傳入的輸入數(shù)據(jù)繼續(xù)保留在陣列中傳輸,待流水線填充完成則可以將單個卷積結果所需要的新數(shù)據(jù)降低到3個。計算模式如圖2所示,計算結果從左至右傳遞,原始計算操作數(shù)從上至下傳遞,紅色線條為計算結果輸出路徑,藍色線條為原始操作數(shù)通過脈動陣列傳輸?shù)穆窂健?/p>
輸出的3個部分和使用額外的兩個PE做加法完成整個二維卷積窗口的計算結果,但脈動陣列的處理方式下,這3個結果之間相隔5個周期,無法通過簡單的路由完成周期對齊。為解決這個問題,設計了通過LR加上一個簡單路由功能PE可以完成5周期的緩沖PE。
這種計算模式下,數(shù)據(jù)的初始填充間隔周期為56個周期,流水線填充完畢后,每個周期可輸出一個卷積計算結果。并且將訪存帶寬需求縮小為原有需求的1/6,可以大幅度降低訪存功耗,PE利用率達98.4%,有效計算PE占比達70%。5*5和7*7卷積窗口的數(shù)據(jù)流設計思路與上述類似。
池化層實質為一個下采樣層,目的是降低特征圖的尺寸以實現(xiàn)特征圖的主要特征提取,并同時簡化網(wǎng)絡計算復雜度。常用的池化算子包括最大值池化和均值池化,池化操作將輸入特征圖分為多個K*K大小的區(qū)域,將其中的最大值或者區(qū)域內數(shù)據(jù)均值作為輸出。
陣列數(shù)據(jù)流設計如圖3所示為2*2池化,圖中黑色線條表示傳入的數(shù)據(jù)流,紅色線條表示通過減法PE得到的單比特控制信號,用于select功能PE選擇數(shù)據(jù)輸出。通過使用可供片上協(xié)處理器控制的全局寄存器控制功能單元每個功能的迭代次數(shù)可以完成同一配置在不同尺度輸入特征圖上的共用,可大幅度減少讀取配置所需的訪存時間和功耗。
圖3 陣列池化數(shù)據(jù)流
由于片外存儲數(shù)據(jù)的讀寫為數(shù)據(jù)密集型應用的瓶頸所在,CGRA的計算資源和片上存儲大小及數(shù)據(jù)帶寬的不匹配問題往往是限制架構性能的關鍵,數(shù)據(jù)帶寬并不能像計算資源一樣通過堆疊提高,而片上存儲的增大會提高芯片功耗。通過多陣列協(xié)同工作,利用合理的片上數(shù)據(jù)復用,平衡片外存儲訪問與計算時間,可以最大化釋放陣列處理單元的計算能力。
如圖4所示,相鄰的兩個PEA之間可以共用一個片上存儲塊,將初始計算操作數(shù)依次寫入各個片上存儲的同時,依次啟動各個陣列進行計算,使各個陣列之間形成一個廣義的流水線,計算結果通過SM1輸出。各個存儲塊分別有16個bank可同時被陣列上的訪存單元讀寫,通過地址增加方式的改變,可將片上存儲以8個bank分為兩組,兩個PEA陣列在同一時刻分別訪問一組,以乒乓模式對兩組存儲進行讀寫,可保證在兩個陣列同時運行時陣列之間不發(fā)生訪存沖突。
圖4 多陣列協(xié)同工作
為了驗證所設計數(shù)據(jù)流的性能,本文在VCS上搭建了上述通用粗粒度可重構架構的RTL仿真環(huán)境。
通過將64*64尺寸的特征圖分別進行3*3卷積、5*5卷積、7*7卷積以及池化窗口2*2的最大值池化,比較在CGRA平臺和使用Intel Core i5-8500型號CPU平臺的運行時間,具體運行結果如表1,發(fā)現(xiàn)針對各個尺寸的卷積,CGRA架構相對于CPU架構的平均加速比可達732倍,其中3*3卷積窗口使用了4個不同的卷積核,因此CPU時間為單個卷積核的4倍。對于2*2池化窗口的最大值池化操作,加速比也可達412倍。
表1 核心算法在單PEA和CPU的運行性能比較
在Pytorch平臺載入AlexNet模型預訓練權重后,通過量化將浮點數(shù)轉為32bits定點數(shù)據(jù),將AlexNet各個尺寸的卷積層通過上一節(jié)描述的方式映射到整個CGRA中,由于神經(jīng)網(wǎng)絡類應用對片上存儲需求較高,為了驗證陣列數(shù)據(jù)流的極限性能,仿真過程中將片上存儲限制放寬,預設了足夠放置所有權重和中間數(shù)據(jù)的存儲空間。在500MHz的時鐘頻率下,峰值計算性能可達379.11GOP/s,平均計算性能可達238.37GOP/s。
將此峰值性能與現(xiàn)有的卷積神經(jīng)網(wǎng)絡FPGA加速器做比較,其中FPGA[6]工作時鐘為100MHz,F(xiàn)PGA型號為Virtex-7 VX485T,F(xiàn)PGA[7]的工作時鐘評論為156MHz,型號為Virtex-7 VX690T,F(xiàn)PGA[8]工作頻率為150MHz??梢钥吹结槍lexNet網(wǎng)絡模型,CGRA的計算性能相比于FPGA加速器處于劣勢,這是由于CGRA在計算過程中需要更換配置達到重構以切換數(shù)據(jù)地址以及權重,這個過程需要消耗額外的時間,并且重新提取權重進入陣列之后,流水線需要重新填充。
計算性能上的劣勢除了重構時間造成,還由片上計算資源決定,若將FPGA的DSP個數(shù)與CGRA的PE個數(shù)做等效處理,那么從單個計算單元的執(zhí)行效率來看,CGRA比FPGA更高,并且CGRA擁有動態(tài)可重構的特性。因此,在CGRA的片上存儲資源足夠大的情況下,相比于FPGA實現(xiàn),本文的數(shù)據(jù)流映射方式使CGRA的計算單元能夠得到更有效的利用。
本文針對神經(jīng)網(wǎng)絡類應用核心算法特點,結合脈動陣列的思想在通用粗粒度可重構架構的處理單元互連特性下,設計了一套高效的映射數(shù)據(jù)流,設計方案在配置文件層提供了處理器參數(shù)控制接口,在不更換配置文件的情況下適用于不同輸入特征尺寸圖像,并可作為映射模板嵌入到大型網(wǎng)絡應用映射流程中。本文搭建了通用粗粒度可重構架構的RTL仿真環(huán)境,在該環(huán)境下針對神經(jīng)網(wǎng)絡核心算法進行仿真和性能評估,驗證了數(shù)據(jù)流方案的高效性,通過比較相同算法在CPU平臺和仿真平臺的運行時間,結果顯示所設計的數(shù)據(jù)流可以達到平均652倍的應用加速比。在片上存儲資源足夠的情況下,本文的數(shù)據(jù)流設計使得計算單元的執(zhí)行效率高于FPGA實現(xiàn)方式。