龔豪杰,周 海,馮水春
(1.中國(guó)科學(xué)院國(guó)家空間科學(xué)中心 復(fù)雜航天系統(tǒng)電子信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京 101499; 2.中國(guó)科學(xué)院大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,北京 101408)
隨著卷積神經(jīng)網(wǎng)絡(luò)[1]算法在目標(biāo)檢測(cè)、目標(biāo)跟蹤[2]等領(lǐng)域的發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)算法正在逐步取代傳統(tǒng)算法。針對(duì)未來(lái)復(fù)雜多變的應(yīng)用環(huán)境,空天領(lǐng)域也一直在推進(jìn)智能化發(fā)展,發(fā)揮智能技術(shù)在空天領(lǐng)域建設(shè)中的引領(lǐng)作用[3],但由于衛(wèi)星所處環(huán)境的特殊性,載荷在功耗、體積、材質(zhì)等方面都有嚴(yán)格的限制,導(dǎo)致其存儲(chǔ)、計(jì)算資源的稀缺性,如何將卷積神經(jīng)網(wǎng)絡(luò)模型部署到資源受限的嵌入式環(huán)境中成為了亟待解決的問(wèn)題。
FPGA具有可重構(gòu)、低功耗、可定制以及高性能等優(yōu)勢(shì)[4],可以高度并行地執(zhí)行卷積神經(jīng)網(wǎng)絡(luò)模型中大量重復(fù)的乘加運(yùn)算,并以較低的功耗完成高精度分類(lèi)任務(wù)[5]。因此,F(xiàn)PGA在加速卷積神經(jīng)網(wǎng)絡(luò)方面具有自己獨(dú)特的優(yōu)勢(shì)[6]。
基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)優(yōu)化加速是一個(gè)復(fù)雜的過(guò)程,設(shè)計(jì)方法也多種多樣。Wang D設(shè)計(jì)流水線卷積計(jì)算內(nèi)核來(lái)加速卷積計(jì)算[7];Eyeriss團(tuán)隊(duì)提出RS數(shù)據(jù)流以提高卷積計(jì)算的并行性[8];Liu等提出了一種大規(guī)模并行框架來(lái)提升卷積計(jì)算的吞吐量[9];張榜等通過(guò)雙緩沖和流水線技術(shù)對(duì)卷積進(jìn)行優(yōu)化[10];Suda等提出一種系統(tǒng)化的設(shè)計(jì)空間探索算法以最大化吞吐量[11]。目前的研究雖然提出了多種技術(shù)來(lái)加速卷積神經(jīng)網(wǎng)絡(luò),但都專(zhuān)注于某一方面的性能優(yōu)化,并沒(méi)有完全發(fā)揮FPGA的并行計(jì)算潛能。
本研究提出了一種卷積并行加速系統(tǒng),利用層融合、數(shù)據(jù)分片、緩存設(shè)計(jì)、并行設(shè)計(jì)等多種優(yōu)化策略加速卷積計(jì)算,與CPU、GPU平臺(tái)以及其它FPGA平臺(tái)設(shè)計(jì)方案相比綜合性能有一定的提升。
為了提升卷積神經(jīng)網(wǎng)絡(luò)的性能,處理更復(fù)雜的任務(wù)場(chǎng)景,卷積神經(jīng)網(wǎng)絡(luò)的層級(jí)逐漸加深,結(jié)構(gòu)也更加復(fù)雜。2012年,AlexNet奠定了卷積神經(jīng)網(wǎng)絡(luò)在圖像處理領(lǐng)域的地位,網(wǎng)絡(luò)層數(shù)只有8層;2014年,GoogLeNet通過(guò)不斷復(fù)用inception結(jié)構(gòu)來(lái)提升性能,卷積層數(shù)達(dá)22層;2016年,ResNet[12]利用殘差結(jié)構(gòu)將網(wǎng)絡(luò)深度提升到152層。隨著網(wǎng)絡(luò)深度的增加,其特征表達(dá)能力會(huì)有一個(gè)實(shí)質(zhì)性的突破。現(xiàn)如今,數(shù)千層的卷積神經(jīng)網(wǎng)絡(luò)已非常常見(jiàn)。
然后,深層網(wǎng)絡(luò)也帶來(lái)新的問(wèn)題,首當(dāng)其沖的就是訓(xùn)練難度加大,出現(xiàn)梯度消失和梯度爆炸,以及容易過(guò)擬合。因此,如今的深層網(wǎng)絡(luò)通常都會(huì)在卷積層后加一層BN層,BN層可以有效加快網(wǎng)絡(luò)的訓(xùn)練過(guò)程,防止梯度消失和梯度爆炸以及過(guò)擬合問(wèn)題。
圖1為ResNet(殘差網(wǎng)絡(luò))的基礎(chǔ)殘差模塊,包含兩個(gè)主要部分:卷積層和BN層。卷積層是圖形特征有效的提取器,BN層則可以解決隱藏層協(xié)變量偏移問(wèn)題,使得非線性變換函數(shù)的輸入值落入對(duì)輸入比較敏感的區(qū)域,以防止梯度消失,并加快訓(xùn)練過(guò)程。
圖1 殘差模塊
圖2為卷積層的基本運(yùn)算——卷積運(yùn)算。卷積時(shí)將卷積核與輸入特征圖矩陣的局部做卷積運(yùn)算得到輸出特征圖,局部大小取決于卷積核的大小,也即感受野的大小。其計(jì)算公式如下所示
(1)
圖2 卷積運(yùn)算
本文采用的卷積網(wǎng)絡(luò)參數(shù)見(jiàn)表1。該網(wǎng)絡(luò)結(jié)構(gòu)包含6層卷積層,卷積核為3×3,移動(dòng)步長(zhǎng)為1。
表1 卷積網(wǎng)絡(luò)配置參數(shù)
使用BN層是為了解決網(wǎng)絡(luò)訓(xùn)練過(guò)程中的梯度消失和梯度爆炸問(wèn)題并提高泛化性能,然而在前向推理過(guò)程中,使用訓(xùn)練后的數(shù)值固定的尺度因子γ和偏移因子β,以及每個(gè)通道的平均值μ與方差σ2的無(wú)偏估計(jì)計(jì)算BN層輸出。卷積層與BN層在FPGA實(shí)現(xiàn)時(shí)很難共用同一套處理資源,導(dǎo)致BN層帶來(lái)較大的額外資源開(kāi)銷(xiāo),為了提升網(wǎng)絡(luò)推理速度和降低資源消耗,可以將BN層與卷積層進(jìn)行融合。BN層的計(jì)算公式如下
(2)
式中:μ表示輸入數(shù)據(jù)的均值,σ2表示輸入數(shù)據(jù)的方差。ε是分母添加的一個(gè)很小的值,防止分母為0。γ表示尺度因子,β表示偏移因子,是模型在訓(xùn)練過(guò)程中自動(dòng)學(xué)習(xí)到的兩個(gè)參數(shù)。將卷積式(3)帶入到BN層計(jì)算式(2)中并展開(kāi)得到式(4)
Y=W·X+b
(3)
(4)
由于BN層本身帶有偏移因子,故卷積層的偏置b可以省略,因此融合后新卷積層的權(quán)重參數(shù)W′和偏置參數(shù)b′整理如下
(5)
(6)
融合卷積計(jì)算公式如下
Y′=W′X+b′
(7)
基于以上推理,將BN層在推理階段完全融入到卷積計(jì)算中,而沒(méi)有任何的精度損失,通過(guò)這種方式可以有效降低硬件計(jì)算量,減少資源消耗,加快推理過(guò)程。
隨著網(wǎng)絡(luò)的深度加深,結(jié)構(gòu)更加復(fù)雜,將導(dǎo)致大量的特征圖輸入和權(quán)重輸入,而片上存儲(chǔ)器由于資源的限制不能存儲(chǔ)所有的輸入數(shù)據(jù),因此需要較大的外部存儲(chǔ)。本系統(tǒng)涉及3個(gè)層級(jí)存儲(chǔ)模塊:外部存儲(chǔ)、片上緩存和寄存器級(jí)數(shù)據(jù)處理單元。外部存儲(chǔ)器存儲(chǔ)完整的網(wǎng)絡(luò)模型數(shù)據(jù),數(shù)據(jù)傳輸延遲是該部分主要的性能瓶頸,通過(guò)數(shù)據(jù)復(fù)用減少數(shù)據(jù)傳輸;片上存儲(chǔ)器存儲(chǔ)當(dāng)前網(wǎng)絡(luò)層的模型數(shù)據(jù),存儲(chǔ)資源限制是該部分主要的性能瓶頸,通過(guò)數(shù)據(jù)分片降低資源消耗;寄存器級(jí)存儲(chǔ)單元存儲(chǔ)處于計(jì)算狀態(tài)的數(shù)據(jù),計(jì)算并行性是該部分主要的性能瓶頸,通過(guò)循環(huán)展開(kāi)提升計(jì)算并行性。系統(tǒng)數(shù)據(jù)調(diào)度如圖3所示。
圖3 數(shù)據(jù)流調(diào)度
輸入數(shù)據(jù)流經(jīng)過(guò)處理器端的處理和預(yù)加載,將輸入圖像和權(quán)重存入外部存儲(chǔ)器DDR。PL端通過(guò)數(shù)據(jù)總線從外部存儲(chǔ)讀入當(dāng)前卷積層和BN層的融合數(shù)據(jù)到片上緩存,然后輸入到硬件加速模塊,數(shù)據(jù)處理單元完成卷積運(yùn)算,輸出數(shù)據(jù)返回到片上存儲(chǔ),繼續(xù)返回到外部存儲(chǔ)器作為結(jié)果輸出或作為下一層網(wǎng)絡(luò)的輸入。
加速器架構(gòu)如圖4所示,主要包括片上緩存、數(shù)據(jù)處理單元(PE)和控制器。片上緩存通過(guò)AXI總線與外部存儲(chǔ)交流。
圖4 加速器總體架構(gòu)
由于卷積神經(jīng)網(wǎng)絡(luò)參數(shù)量大,F(xiàn)PGA片上存儲(chǔ)資源有限,無(wú)法存儲(chǔ)所有的參數(shù)。數(shù)據(jù)緩存操作包括數(shù)據(jù)加載和數(shù)據(jù)處理兩部分,只有完成了數(shù)據(jù)加載之后才能對(duì)其中的數(shù)據(jù)進(jìn)行后續(xù)處理。為了避免數(shù)據(jù)傳輸導(dǎo)致數(shù)據(jù)處理單元閑置的情況,本文采用雙緩存機(jī)制,以圖中權(quán)重緩存為例,當(dāng)權(quán)重緩存1進(jìn)行數(shù)據(jù)加載時(shí),權(quán)重緩存2進(jìn)行數(shù)據(jù)處理;當(dāng)權(quán)重緩存2進(jìn)行數(shù)據(jù)加載時(shí),權(quán)重緩存1則進(jìn)行數(shù)據(jù)處理。這種ping-pong RAM的工作模式可以保證在整個(gè)處理過(guò)程中,數(shù)據(jù)處理單元始終處于工作狀態(tài)。同理,輸入緩存也是如此,數(shù)據(jù)加載和數(shù)據(jù)處理完全并行操作,使數(shù)據(jù)處理模塊的計(jì)算能力得到最大化利用。
卷積計(jì)算主要是權(quán)重矩陣與輸入特征圖進(jìn)行乘累加運(yùn)算得到輸出特征圖。相比于所有通道的輸入卷積窗口參與卷積生成最終的輸出通道數(shù)據(jù),本設(shè)計(jì)使用部分通道的輸入卷積窗口與所有的卷積核卷積生成中間結(jié)果,直到所有輸入通道計(jì)算完成并累加到輸出緩存生成最終輸出通道數(shù)據(jù),可以有效增加輸入特征圖的數(shù)據(jù)復(fù)用,減少其在BRAM和外部存儲(chǔ)器之間的重復(fù)傳輸。
加速器處理流程如下,卷積層與BN層融合權(quán)重通過(guò)數(shù)據(jù)分片設(shè)計(jì),輸入到權(quán)重緩存。輸入緩存生成多個(gè)通道的3×3卷積窗口,與權(quán)重同時(shí)輸入到PE單元進(jìn)行卷積運(yùn)算,N個(gè)PE單元完全并行處理,控制器計(jì)算輸出通道的索引值,通過(guò)索引值將運(yùn)算結(jié)果輸出到相應(yīng)的輸出緩存地址,由于輸入特征圖和權(quán)重進(jìn)行了分片,計(jì)算結(jié)果是中間值,需要在輸出緩存上進(jìn)行累加。當(dāng)所有的輸入特征圖計(jì)算完畢,輸出緩存添加偏置,并通過(guò)控制器判斷是否進(jìn)行激活處理,激活函數(shù)使用ReLU函數(shù)。
本文采用的層融合分片設(shè)計(jì)如圖5所示,矩陣代表完整的層融合輸入權(quán)重矩陣,其中列數(shù)表示輸入通道數(shù),行數(shù)表示輸出通道數(shù),每個(gè)灰色框圖表示一個(gè)3×3卷積核,實(shí)線框中矩陣即為數(shù)據(jù)分片后權(quán)重矩陣。本文在兩個(gè)維度上進(jìn)行數(shù)據(jù)分片,分別是輸入通道N和輸出通道M。在后續(xù)的卷積并行計(jì)算中,N表示輸入通道并行度,M表示輸出通道并行度。輸入通道并行和輸出通道并行在不同程度上影響計(jì)算資源的開(kāi)銷(xiāo)。在兩個(gè)維度上設(shè)置分片參數(shù),提升了數(shù)據(jù)分片和計(jì)算并行度的靈活性,能更充分利用平臺(tái)的硬件資源。
圖5 層融合數(shù)據(jù)分片
數(shù)據(jù)處理單元結(jié)構(gòu)如圖6所示,每個(gè)虛線框代表一個(gè)數(shù)據(jù)處理單元,其內(nèi)部為N個(gè)輸入通道之間并行運(yùn)算,需要N個(gè)不同的卷積核。虛線框之間為M個(gè)輸出通道之間的并行運(yùn)算,需要M組不同的卷積核。因此輸入通道N和輸出通道M決定了卷積計(jì)算的并行度。當(dāng)N和M分別等于當(dāng)前層的輸入特征圖數(shù)量和輸出特征圖數(shù)量時(shí),卷積并行性達(dá)到理論最大值,但也會(huì)消耗大量的硬件資源。因此,可以利用設(shè)計(jì)空間探索,合理分配并行粒度以平衡計(jì)算性能和資源消耗。
圖6 數(shù)據(jù)處理單元結(jié)構(gòu)
數(shù)據(jù)復(fù)用與卷積優(yōu)化方案如圖7所示,輸入特征圖按行順序一行一行輸入,每個(gè)像素值從第一次參與卷積計(jì)算到最后一次參與卷積計(jì)算,3×3卷積窗口會(huì)走過(guò)兩個(gè)輸入特征圖行尺寸的距離,為了最大化輸入特征值的復(fù)用機(jī)率,需要2倍特征圖行尺寸大小的線性緩存存儲(chǔ)訪問(wèn)過(guò)的特征值,這樣當(dāng)像素第二次進(jìn)入卷積窗口時(shí)可以直接從線性緩存中順序讀取,降低了數(shù)據(jù)訪問(wèn)延遲。
圖7 3×3卷積計(jì)算設(shè)計(jì)
本文采用3×3卷積核,卷積步長(zhǎng)為1。卷積窗口向右滑動(dòng)一個(gè)步長(zhǎng),只有最右邊的一列需要更新,復(fù)用第一列和第二列的輸入像素值,數(shù)據(jù)復(fù)用比例達(dá)66.7%。因此,本文采用兩個(gè)線性緩存,分別是線性緩存1和線性緩存2,每個(gè)線性緩存的大小為輸入特征圖行尺寸大小。每個(gè)讀數(shù)據(jù)階段線性緩存工作流程如下:
(1)輸入緩存輸入一個(gè)數(shù)據(jù)到卷積窗口;
(2)同時(shí)線性緩存1按從左到右順序存儲(chǔ)該輸入數(shù)據(jù);
(3)如果線性緩存1數(shù)據(jù)存滿(mǎn),則從左到右依次更新數(shù)據(jù),并將原始數(shù)據(jù)存入線性緩存2;
(4)如果線性緩存2數(shù)據(jù)存滿(mǎn),則從左到右依次更新數(shù)據(jù),并丟棄原始數(shù)據(jù)。
如圖7所示,線性緩存2負(fù)責(zé)更新卷積窗口第一行,線性緩存1負(fù)責(zé)更新第二行,每次從輸入緩存讀取的數(shù)據(jù)則負(fù)責(zé)更新第三行。卷積窗口的三行數(shù)據(jù)同時(shí)更新,讀數(shù)據(jù)階段需要兩個(gè)時(shí)鐘周期,一個(gè)時(shí)鐘周期讀地址,一個(gè)時(shí)鐘周期讀取數(shù)據(jù),通過(guò)完全流水線結(jié)構(gòu),可以在每個(gè)時(shí)鐘周期生成一個(gè)卷積窗口進(jìn)行后續(xù)計(jì)算。
生成的卷積窗口與權(quán)重同時(shí)輸入到卷積計(jì)算單元,卷積計(jì)算單元的乘法運(yùn)算完全展開(kāi),之后輸入到加法樹(shù),通過(guò)乘法陣列-加法樹(shù)的模式最大化核卷積計(jì)算的并行性。
由于不同的FPGA平臺(tái)有不同的資源限制,為了更好匹配平臺(tái)的資源限制,提升硬件資源利用率,本文提出了如表2所示的設(shè)計(jì)空間探索算法。
表2 設(shè)計(jì)空間探索偽代碼
如偽代碼所示,Cout表示輸出特征圖數(shù)量,Cin表示輸入特征圖數(shù)量。算法的輸入是當(dāng)前網(wǎng)絡(luò)的參數(shù)和硬件資源約束,輸出是網(wǎng)絡(luò)的并行度,包括輸入通道并行度N和輸出通道并行度M。首先,初始化參數(shù)N和M,根據(jù)當(dāng)前網(wǎng)絡(luò)并行度參數(shù)運(yùn)行網(wǎng)絡(luò),如果資源開(kāi)銷(xiāo)滿(mǎn)足硬件資源約束,則繼續(xù)判斷網(wǎng)絡(luò)的性能是否有提升,如果有提升則通過(guò)當(dāng)前的并行度參數(shù)更新N和M,否則丟棄當(dāng)前結(jié)果進(jìn)入下一次迭代,直到找到最優(yōu)的網(wǎng)絡(luò)并行度參數(shù),N和M確定了計(jì)算資源的使用量。通常情況下,卷積網(wǎng)絡(luò)的通道數(shù)會(huì)隨著網(wǎng)絡(luò)加深而成倍增長(zhǎng),且本文卷積加速模塊在不同卷積層間是復(fù)用的,因此在充分利用硬件資源情況下確定的初始卷積層的并行粒度可以沿用到后續(xù)網(wǎng)絡(luò)層中。網(wǎng)絡(luò)的并行粒度即為N×M。
本次實(shí)驗(yàn)使用Xilinx公司的ZCU104開(kāi)發(fā)板作為實(shí)驗(yàn)平臺(tái),該芯片含有PL端1728個(gè)DSP48E單元,38 Mb RAM,以及PS端2 GB DDR4存儲(chǔ)器件,完全可以滿(mǎn)足本實(shí)驗(yàn)的硬件要求。實(shí)驗(yàn)數(shù)據(jù)位寬設(shè)定為浮點(diǎn)32位,F(xiàn)PGA主頻設(shè)定為100 MHz。
此外還在CPU和GPU平臺(tái)上進(jìn)行計(jì)算性能測(cè)試,測(cè)試卷積網(wǎng)絡(luò)模型為表1的卷積層2,CPU采用的是Inter Core i5-4210H,主頻為2.90 GHz;GPU采用的是NVIDIA GTX1080ti,顯存容量為11 GB,核心頻率為1.582 GHz。
本實(shí)驗(yàn)基于Vivado_hls 2020.1和Vivado 2020.1軟件進(jìn)行開(kāi)發(fā)和仿真,仿真波形如圖8所示。卷積的輸入、權(quán)值和偏置都為32位浮點(diǎn)數(shù)據(jù),輸入時(shí)鐘頻率為100 MHz,時(shí)鐘波形如圖8中矩形框2所示。圖8所示波形包括待測(cè)加速器的波形信號(hào)和Test Bench Signals,為驗(yàn)證加速器功能正確性,這里關(guān)注這兩個(gè)信號(hào)的輸出波形,即ofm波形。當(dāng)輸出波形的寫(xiě)使能信號(hào)ofm_we0和片選信號(hào)ofm_ce0置高位1時(shí),輸出數(shù)據(jù)信號(hào)ofm_d0有效。矩形框1為待測(cè)加速器的輸出數(shù)據(jù)信號(hào),矩形框3為理論輸出數(shù)據(jù)信號(hào),可以看到,加速器的卷積輸出結(jié)果與理論輸出值完全相等,從而驗(yàn)證了卷積加速器的功能的正確性。
圖8 卷積模塊仿真波形
本次實(shí)驗(yàn)設(shè)計(jì)經(jīng)過(guò)綜合之后,Vivado HLS 2020.1給出了FPGA硬件資源使用情況。根據(jù)2.6節(jié)設(shè)計(jì)空間探索的結(jié)果,本文使用的輸入通道并行度參數(shù)N=8,輸出通道并行度參數(shù)M=4,卷積層在浮點(diǎn)32位運(yùn)算下的資源使用情況見(jiàn)表3。FPGA工作在100 MHz下,由于輸出緩存需要存儲(chǔ)中間結(jié)果,分片后的部分權(quán)重和部分輸入數(shù)據(jù)也存儲(chǔ)在片上RAM,所以BRAM和URAM使用資源較高,分別達(dá)到53%和46%。乘法運(yùn)算邏輯全部使用DSP資源,使用率達(dá)到83%;此外,LUT資源使用率也達(dá)到了93%,可以看出本文設(shè)計(jì)對(duì)資源的利用率已經(jīng)很高。
表3 FPGA資源利用率
由于不同文獻(xiàn)使用的FPGA器件和網(wǎng)絡(luò)結(jié)構(gòu)不同,如果僅采用前向推理的時(shí)延和平臺(tái)功耗,無(wú)法有效和公正地對(duì)比不同設(shè)計(jì)架構(gòu)的優(yōu)劣。此外,考慮到不同方法的資源利用效率存在差異,卷積運(yùn)算過(guò)程主要是乘加運(yùn)算。因此,本文提出DSP效率作為性能評(píng)估依據(jù)。DSP是卷積計(jì)算中使用的主要資源,通常情況下加速器的吞吐量與硬件平臺(tái)的DSP數(shù)量呈正相關(guān)趨勢(shì),DSP效率表示單位DSP所能提供的GFLOPS,可以避免不同硬件平臺(tái)DSP數(shù)量差異帶來(lái)的影響,從而更有效比較不同設(shè)計(jì)方案的性能優(yōu)劣。本文同時(shí)增加能效比參數(shù)以便全面對(duì)比不同方法的加速效果。
各卷積層的時(shí)延和性能見(jiàn)表4。時(shí)間延遲主要包括數(shù)據(jù)傳輸和卷積計(jì)算的延時(shí)。網(wǎng)絡(luò)整體的平均性能為35.45 GFLOPS。
表4 各卷積層的性能對(duì)比
通過(guò)本次設(shè)計(jì)的板級(jí)測(cè)試,得到系統(tǒng)的性能和功耗等數(shù)據(jù)與其它文獻(xiàn)的對(duì)比見(jiàn)表5。文獻(xiàn)[13]使用循環(huán)展開(kāi)并行處理和多級(jí)流水線加速卷積神經(jīng)網(wǎng)絡(luò),但沒(méi)有設(shè)計(jì)片上緩存結(jié)構(gòu)來(lái)提升數(shù)據(jù)訪問(wèn)效率,在DSP效率和能效比上遠(yuǎn)低于本設(shè)計(jì)。文獻(xiàn)[11]利用設(shè)計(jì)空間探索尋找最優(yōu)的計(jì)算并行性來(lái)最大化系統(tǒng)吞吐量,但沒(méi)有充分設(shè)計(jì)片上緩存的數(shù)據(jù)復(fù)用方案,DSP效率雖然高于本文,但是本文的能耗比更高,是其1.5倍,且本文使用32位浮點(diǎn)數(shù)表示,計(jì)算精度高于其16位定點(diǎn)數(shù)。綜上所述,本文設(shè)計(jì)的加速方案在利用了緩存設(shè)計(jì)、并行設(shè)計(jì)、數(shù)據(jù)復(fù)用以及設(shè)計(jì)空間探索等多種優(yōu)化設(shè)計(jì)的基礎(chǔ)上,具有更高的綜合性能。在硬件資源和功耗嚴(yán)格受限的嵌入式平臺(tái)中,本設(shè)計(jì)相比表中其它方案,在單位能量上貢獻(xiàn)更高的計(jì)算量。
表5 與其它文獻(xiàn)方法的對(duì)比
在100 MHz的工作頻率下,數(shù)據(jù)處理單元處理一次8×56×56的輸入特征圖,通過(guò)4×8×3×3的卷積核生成4×56×56的輸出特征圖的卷積計(jì)算,計(jì)算量為1 806 336 FLOPS,數(shù)據(jù)處理單元的運(yùn)行時(shí)間為34.37 μs,卷積計(jì)算的峰值性能為52.56 GFLOPS。
表6為本文設(shè)計(jì)的卷積峰值計(jì)算性能與CPU、GPU以及文獻(xiàn)[14]的對(duì)比,計(jì)算性能是CPU的4.1倍,功耗僅為GPU的9.9%。相比文獻(xiàn)[14],本文利用設(shè)計(jì)空間探索充分挖掘卷積計(jì)算的并行性,本文設(shè)計(jì)的卷積計(jì)算性能是其1.4倍。
表6 卷積計(jì)算性能的比較
針對(duì)如何提升運(yùn)行在嵌入式平臺(tái)的深度卷積神經(jīng)網(wǎng)絡(luò)的速度和能效,本文提出了一種卷積并行加速架構(gòu)。該架構(gòu)首先利用卷積層和BN層融合算法降低計(jì)算復(fù)雜度,通過(guò)層融合的分片設(shè)計(jì),降低片上存儲(chǔ)的資源消耗。為了優(yōu)化內(nèi)存,本文提出了一種雙線性緩存設(shè)計(jì),有效提高了數(shù)據(jù)復(fù)用效率,并利用ping-pong RAM的緩存方式和數(shù)據(jù)并行計(jì)算提高數(shù)據(jù)吞吐量。同時(shí),利用設(shè)計(jì)空間探索尋找最優(yōu)的計(jì)算并行度,從而最大化資源利用率。
實(shí)驗(yàn)結(jié)果表明,與CPU、GPU和其它FPGA平臺(tái)的實(shí)現(xiàn)對(duì)比,本文提出的方法在性能、能耗以及資源利用率方面具有更高的綜合性能,對(duì)于在資源和功耗嚴(yán)格受限的嵌入式環(huán)境中部署深度卷積網(wǎng)絡(luò),實(shí)現(xiàn)航天電子系統(tǒng)的智能化處理具有意義。