應(yīng)三叢,彭 鈴
(1.四川大學(xué) 計(jì)算機(jī)學(xué)院,四川 成都 610065;2.四川大學(xué) 視覺合成圖形圖像技術(shù)國(guó)防重點(diǎn)學(xué)科實(shí)驗(yàn)室,四川 成都 610065)
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)的算法模型優(yōu)化,是提升性能的關(guān)鍵。目前,CNN算法的實(shí)現(xiàn)平臺(tái)主要有中央處理單元(central processing unit,CPU),圖形處理單元 (graphic processing unit,GPU)和可編輯邏輯門陣列(filed programmable gated array,F(xiàn)PGA)。GPU雖然并行度高,但能耗和成本也較高;CPU無(wú)法實(shí)現(xiàn)高效的并行運(yùn)算,導(dǎo)致模型計(jì)算效率低下;而FPGA的可重構(gòu)、低延時(shí)、高吞吐量等特性更適用于人工智能算法加速。但隨著CNN算法日趨復(fù)雜,基于FPGA的軟硬件協(xié)同技術(shù)被廣泛應(yīng)用。
Meloni和Xue等采用軟硬件協(xié)同設(shè)計(jì)方法,其通用處理器是基于ARM(advanced RISC machines)架構(gòu),存在定制成本高、靈活性不足等問題。而第五代精簡(jiǎn)指令集(reduced instruction sets computing,RISC-V)作為當(dāng)下熱門的開源精簡(jiǎn)指令集架構(gòu),是解決上述問題的不二之選。RISC-V指令集由基本指令集和擴(kuò)展指令集構(gòu)成,其中,基本指令集是設(shè)計(jì)RISC-V處理器不可或缺的,擴(kuò)展指令集則根據(jù)用戶需求定制。目前,市面上涌現(xiàn)出眾多基于RISC-V指令集的開源處理器,伯克利大學(xué)設(shè)計(jì)的Rocket處理器和芯來科技研發(fā)的E203處理器深受廣大科研工作者推崇。Liao和Yang等選用Rocket處理器實(shí)現(xiàn)卷積加速,雖然加速效果明顯,但該RISC-V處理器的硬件設(shè)計(jì)代碼是由高級(jí)語(yǔ)言轉(zhuǎn)換生成,可讀性差,同時(shí),該硬件設(shè)計(jì)實(shí)現(xiàn)于FPGA,會(huì)消耗額外的查找表 (look-up-table,LUT)。而E203處理器代碼均由人工編寫,可讀性強(qiáng)且易于理解,該處理器核的功耗和面積與同級(jí)ARM Cortex-M核相比極具競(jìng)爭(zhēng)力。Wu等利用專用協(xié)處理器接口去設(shè)計(jì)擴(kuò)展指令,從而實(shí)現(xiàn)CNN加速和物聯(lián)網(wǎng)領(lǐng)域多種算法的配置,但其不適用于配置不同模型的卷積、池化、全連接等單元;且未設(shè)計(jì)片外存儲(chǔ)器單元,不適合數(shù)據(jù)量大的CNN模型。Zhang等采用軟硬件協(xié)同技術(shù)設(shè)計(jì)CNN加速器,加速效果顯著,但該CNN加速器不可配置。Ayat和英偉達(dá)的NVDLA主要針對(duì)卷積層加速,未結(jié)合CNN各個(gè)運(yùn)算單元加速。Ma等結(jié)合理論原理,探索卷積層的循環(huán)展開方法。Cao設(shè)計(jì)的CNN加速器在各個(gè)運(yùn)算單元實(shí)現(xiàn)了全并行展開,對(duì)硬件平臺(tái)要求較高。
綜合以上因素,本文進(jìn)行了如下研究:第一,擴(kuò)展協(xié)處理器的控制訪問接口,實(shí)現(xiàn)RISC-V對(duì)CNN加速器的參數(shù)配置;擴(kuò)展片外存儲(chǔ)器與協(xié)處速器的數(shù)據(jù)訪問接口,實(shí)現(xiàn)批量數(shù)據(jù)傳輸。第二,將卷積層的四重循環(huán)展開方法與英偉達(dá)NVDLA的并性設(shè)計(jì)方法相結(jié)合,實(shí)現(xiàn)多視圖部分并行展開,同時(shí)該方法可應(yīng)用于池化和全連接單元。各單元的硬件架構(gòu)決定寄存器組的設(shè)計(jì),由此完成可配置功能。
本文的RISC-V處理器是一款變長(zhǎng)兩級(jí)流水線的32位處理器。其中:第1級(jí)流水線完成取指功能;第2級(jí)流水線實(shí)現(xiàn)譯碼、執(zhí)行、交付和寫回功能。它的系統(tǒng)總線稱為內(nèi)部芯片總線(internal chip bus,ICB))。該總線沿用高級(jí)可擴(kuò)展接口(advanced extensible interface,AXI)的握手機(jī)制,僅兩個(gè)通道,易于控制。
本文構(gòu)建的片上系統(tǒng)(system on chip,SoC)如圖1所示,系統(tǒng)包括RISC-V處理器、協(xié)處理器接口單元、CNN協(xié)加速器和片外存儲(chǔ)器。
圖1 SoC系統(tǒng)框圖Fig. 1 Architecture of SoC system
圖1中,協(xié)處理器接口單元由控制訪問接口和數(shù)據(jù)訪問接口構(gòu)成,分別適用AXI-LITE和AXI-FULL總線。RISC-V處理器作為該SoC的配置管理器,控制CNN加速器的寄存器單元。CNN加速器主要完成寄存器單元的信息解析,然后根據(jù)譯碼信息,實(shí)現(xiàn)直接存儲(chǔ)訪問(direct memory access,DMA)與片外存儲(chǔ)器的數(shù)據(jù)交互,執(zhí)行卷積層、池化層和全連接層的實(shí)時(shí)運(yùn)算。
本文的高速協(xié)處理器接口包括協(xié)處理器控制訪問接口和協(xié)處理器數(shù)據(jù)訪問接口,如圖2所示。
由于ICB通用性弱,不適合直接連接高速模塊,因此,為協(xié)處理器擴(kuò)展高速控制訪問接口,完成RISC-V與CNN加速器的控制訪問總線的銜接,并使其兼具高速特性。具體實(shí)現(xiàn)方式是先利用總線橋?qū)CB接口轉(zhuǎn)換為適用于控制訪問單元的AXI接口(兼容AXI-LITE接口);然后為該橋接單元設(shè)計(jì)一個(gè)專用的異步先入先出(first-in first-out,F(xiàn)IFO)緩沖器,實(shí)現(xiàn)硬件加速單元能以高于RISC-V處理器的時(shí)鐘獨(dú)立工作。實(shí)現(xiàn)框圖如圖2(a)所示。
圖2(b)為協(xié)處理器的數(shù)據(jù)訪問接口框圖。由于CNN運(yùn)算的數(shù)據(jù)量龐大,僅靠片內(nèi)存儲(chǔ)器不僅耗費(fèi)資源,且無(wú)法實(shí)現(xiàn)批量傳輸,因此為其開辟適用AXI-FULL的片外存儲(chǔ)接口,以片外存儲(chǔ)器來實(shí)現(xiàn)數(shù)據(jù)的高速傳輸。該接口的突發(fā)傳輸參數(shù)包括突發(fā)包首地址和數(shù)據(jù)個(gè)數(shù)等,單次突發(fā)傳輸?shù)臄?shù)據(jù)個(gè)數(shù)最大為256。CNN加速器的數(shù)據(jù)接口由卷積、池化和權(quán)重對(duì)應(yīng)的讀通道和卷積、池化對(duì)應(yīng)的寫通道構(gòu)成;其中,讀通道包括讀命令通道和讀數(shù)據(jù)通道。經(jīng)多路仲裁器輪詢仲裁,從3組讀命令通道確定存儲(chǔ)器的讀命令通道,同時(shí)根據(jù)讀命令值,將存儲(chǔ)器中待讀取的數(shù)據(jù)分發(fā)給CNN加速器對(duì)應(yīng)的讀數(shù)據(jù)通道。而寫命令通道、寫數(shù)據(jù)通道和寫反饋通道共同構(gòu)成了寫通道。為了提升總線資源的利用率,將寫數(shù)據(jù)的最高位作為寫通道數(shù)據(jù)類型的判斷依據(jù),從而實(shí)現(xiàn)CNN加速器寫命令通道和寫數(shù)據(jù)通道的復(fù)用。如果是寫命令,則分發(fā)給卷積或池化的寫命令緩存單元,然后再以輪詢仲裁方式發(fā)送給存儲(chǔ)器的寫命令通道,同時(shí)存入狀態(tài)緩存器。對(duì)于寫數(shù)據(jù),先分發(fā)給對(duì)應(yīng)的緩存單元;然后,根據(jù)寫命令值,發(fā)送卷積或池化單元的數(shù)據(jù)到存儲(chǔ)器寫數(shù)據(jù)通道;最后,對(duì)寫響應(yīng)通道的數(shù)據(jù)和當(dāng)前狀態(tài)緩存器的數(shù)據(jù)進(jìn)行判決,以判決器的輸出作為存儲(chǔ)器寫響應(yīng)通道數(shù)據(jù)分發(fā)的標(biāo)志。
圖2 協(xié)處理器高速接口框圖Fig. 2 Diagram of coprocessor high-speed interface
K
,其值可配置為8、16、32。2.2.1 卷積設(shè)計(jì)與分析
卷積的輸入特征圖和輸出特征圖分別表示為I
和O
,權(quán)重和偏置分別為W
和B
。3維卷積輸出特征圖的相關(guān)計(jì)算公式如下:
H
、
H
、H
分別為輸出特征圖、輸入特征圖和權(quán)重卷積核的列大小,W
、W
、W
分別為輸出特征圖、輸入特征圖和權(quán)重卷積核的行大小,P
、
P
為沿行方向和沿列方向的填充行數(shù),S
、S
為沿行方向和沿列方向的滑動(dòng)步長(zhǎng),x
、y
為 輸出特征圖的坐標(biāo)點(diǎn),m
和n
分別為輸出通道和輸入通道的參數(shù)值,f
為激活函數(shù)。本文實(shí)現(xiàn)的三重循環(huán)并行展開方法,其基本單元由乘累加器和累加器構(gòu)成,有利于提升模塊的資源利用率。以并行度K
實(shí)現(xiàn),此時(shí),三重循環(huán)展開可抽象為多個(gè)矩陣的并行運(yùn)算。由于每個(gè)視圖的基本運(yùn)算單元最大并行度為32,因此單個(gè)視圖的并行乘累加陣列個(gè)數(shù)為32。圖3為卷積并行展開示意圖,其中,N
/K
和M
/K
分別表示特征矩陣沿輸入通道(輸入通道長(zhǎng)度為N
)和輸出通道(輸出通道長(zhǎng)度為M
),按并行度K
展開的總運(yùn)算次數(shù)(“/”代表的除法運(yùn)算,若不能整除,則向上取整,即即 「N
/K
」,下同)。為簡(jiǎn)化硬件設(shè)計(jì),對(duì)輸入特征圖的列以并行度K
展開,其運(yùn)算次數(shù)為H
×W
/K
。圖3中序號(hào)①表示沿輸入通道方向的K
個(gè)大小為1 ×1的特征矩陣參與卷積運(yùn)算;序號(hào)②表示列長(zhǎng)為K
,輸入通道長(zhǎng)度為K
,大小為1 ×1的特征矩陣參與卷積運(yùn)算;序號(hào)③則是沿輸出通道方向,同時(shí)進(jìn)行輸出通道長(zhǎng)度為K
的序號(hào)②運(yùn)算過程。M
和M
分別表示輸入特征圖和權(quán)重的運(yùn)算次數(shù)。圖3 卷積并行展開示意圖Fig. 3 Diagram of convolution parallel expansion
卷積運(yùn)算的理論計(jì)算公式如下:
T
和T
分別為CPU和CNN加速器的卷積運(yùn)算時(shí)間,T
和T
分別為CPU和CNN加速器的單次運(yùn)算時(shí)間,A
為卷積加速比。2.2.2 池化設(shè)計(jì)與分析
類似卷積的并行展開算法,對(duì)池化矩陣在輸入通道方向上、對(duì)輸出池化特征圖在列方向上分別執(zhí)行K
并行度展開,同時(shí)將池化單元設(shè)計(jì)為行池化和列池化級(jí)聯(lián)結(jié)構(gòu)。池化設(shè)計(jì)的相關(guān)參數(shù)如下:I
和O
分別為池化的輸入和輸出特征圖,N
為池化的通道數(shù),H
、W
分別為池化輸入特征圖的行大小和列大小,H
、W
分別為池化輸出特征圖的行大小和列大小,H
、W
為池化窗口的高和寬。池化的并行展開過程如圖4所示。針對(duì)行池化,其輸出特征圖大小為H
×W
,因此,行池化的通道參數(shù)和特征圖列大小的并行展開次數(shù)可表示為N
/K
和H
×W
/K
。由于只實(shí)現(xiàn)了行運(yùn)算,因此池化窗口的運(yùn)算次數(shù)為W
×K
,圖4中每個(gè)矩形框的大小為1×K
。列池化的展開原理類似。M
和M
是行池化和列池化的運(yùn)算次數(shù)。圖4 池化并行展開示意圖Fig. 4 Diagram of pooling parallel expansion
池化運(yùn)算時(shí)間的理論計(jì)算公式如下:
T
為CPU的池化運(yùn)行總時(shí)間,T
和T
分別為行池化耗時(shí)和列池化耗時(shí),T
和T
分別為CPU和CNN加速器的單次運(yùn)算時(shí)間,A
為池化加速比。2.2.3 全連接設(shè)計(jì)與分析
為減少額外的資源消耗,全連接模型可經(jīng)處理而映射到卷積運(yùn)算電路。其轉(zhuǎn)換思想是將維度為N
的輸入向量I
轉(zhuǎn)換為大小為1 ×1, 輸入通道數(shù)為N
+1的卷積輸入特征圖。將偏置矩陣合并到權(quán)重矩陣,矩陣權(quán)重卷積核大小為1 ×1,輸入通道數(shù)和輸出通道數(shù)分別為N
+1和M
。而轉(zhuǎn)換后的輸出特征圖O
的大小為1 ×1, 輸出通道數(shù)為M
。按卷積并行展開法,其運(yùn)算展開過程如圖3所示。理論計(jì)算公式如下:T
和T
分別為全連接運(yùn)算和CPU的總耗時(shí),T
和T
為 兩者所對(duì)應(yīng)的單次耗時(shí),A
為兩者的加速比。通過分析CNN加速器的各運(yùn)算單元,劃分其硬件單元為寄存器組、定點(diǎn)模塊、通用運(yùn)算單元和池化單元。根據(jù)設(shè)計(jì)的硬件電路結(jié)構(gòu),設(shè)計(jì)CNN加速器的寄存器組,它由1個(gè)系統(tǒng)控制寄存器,33個(gè)通用寄存器和26個(gè)池化寄存器構(gòu)成。通過配置寄存器組信息,來完成不同模型在CNN加速器上的部署。其中,通用寄存器組適用于卷積或全連接單元,而系統(tǒng)寄存器決定運(yùn)算單元開始或結(jié)束。
2.3.1 定點(diǎn)量化
根據(jù)Hubara等的研究,數(shù)據(jù)量化對(duì)圖像任務(wù)干擾較小,且對(duì)數(shù)據(jù)參數(shù)的精度要求不高,因此為解決CNN主流模型存在的計(jì)算量大、存儲(chǔ)占用大等問題,本文將32位單精度浮點(diǎn)數(shù)處理為16位定點(diǎn)數(shù),這樣既可降低數(shù)據(jù)存儲(chǔ)量,又可簡(jiǎn)化硬件加速器的設(shè)計(jì)。模型的存儲(chǔ)量可降低1倍。
2.3.2 通用運(yùn)算單元設(shè)計(jì)與實(shí)現(xiàn)
通用運(yùn)算單元包括通用寄存器組、卷積讀DMA、權(quán)重讀DMA、卷積緩存器、權(quán)重緩存器、卷積片上存儲(chǔ)器、權(quán)重片上存儲(chǔ)器、卷積控制單元、乘累加單元、累加單元和激活單元。同時(shí),由于卷積與全連接的運(yùn)算結(jié)構(gòu)相似,因此,僅設(shè)計(jì)卷積計(jì)算單元來作為通用計(jì)算單元,以復(fù)用形式實(shí)現(xiàn)卷積與全連接運(yùn)算。
圖5展示了通用運(yùn)算單元的結(jié)構(gòu),其卷積運(yùn)算的具體運(yùn)算流程為:首先,配置系統(tǒng)寄存器,產(chǎn)生系統(tǒng)控制信號(hào),然后,配置卷積運(yùn)算參數(shù)寄存器,確定特征圖的行大小、列大小、通道數(shù)、卷積核大小等,并產(chǎn)生卷積單元的控制信號(hào)。接著,配置卷積的數(shù)據(jù)訪問寄存器參數(shù),如突發(fā)包的讀地址和讀數(shù)據(jù)長(zhǎng)度等,根據(jù)這些參數(shù),將卷積和權(quán)重?cái)?shù)據(jù)經(jīng)DMA從片外存儲(chǔ)器寫入片上存儲(chǔ)器。如此,將所需的運(yùn)算數(shù)據(jù)準(zhǔn)備好。再根據(jù)卷積單元的運(yùn)算控制信號(hào)實(shí)現(xiàn)數(shù)據(jù)的乘累加和累加運(yùn)算。其中,乘累加單元是由K
路并行乘累加器構(gòu)成,其值在硬件電路設(shè)計(jì)中可配置為8、16、32。該運(yùn)算電路可被復(fù)用在3維視圖并行實(shí)現(xiàn)的CNN加速器中,如最大并行度為32,輸入通道為3,則復(fù)用該結(jié)構(gòu)1次;輸出特征圖高為224,復(fù)用7次;輸出通道為64,復(fù)用2次。圖5 通用運(yùn)算單元結(jié)構(gòu)Fig. 5 Structure of general operation units
對(duì)于全連接運(yùn)算,可通過處理其模型參數(shù),配置通用寄存器組,來實(shí)現(xiàn)卷積與全連接模型兼容,同時(shí)以運(yùn)算單元之間的復(fù)用來降低硬件資源消耗和設(shè)計(jì)的復(fù)雜度。例如,對(duì)全連接結(jié)構(gòu) 4096×1000,按卷積結(jié)構(gòu)處理,可得到結(jié)構(gòu)為 4 096×1×1的卷積輸入特征圖和結(jié)構(gòu)為4 096×1×1×1的權(quán)重特征圖,由此將全連接運(yùn)算轉(zhuǎn)化為卷積運(yùn)算,實(shí)現(xiàn)卷積與全連接結(jié)構(gòu)復(fù)用。
經(jīng)過乘累加和累加單元運(yùn)算后,根據(jù)激活函數(shù)寄存器的值,決定該運(yùn)算結(jié)果是否進(jìn)行激活運(yùn)算,并將最終結(jié)果存入結(jié)果緩存器。由于該通用運(yùn)算單元的輸出數(shù)據(jù)將作為下一運(yùn)算單元的輸入數(shù)據(jù),因此按通用寄存器組配置的輸出數(shù)據(jù)地址、數(shù)據(jù)長(zhǎng)度和存儲(chǔ)方式等,將結(jié)果經(jīng)卷積寫DMA寫回片外存儲(chǔ)器,并向寄存器返回運(yùn)算完成標(biāo)志。
2.3.3 池化運(yùn)算單元設(shè)計(jì)與實(shí)現(xiàn)
池化運(yùn)算單元由池化寄存器組、池化讀DMA、池化寫DMA、池化讀緩存器、池化寫緩存器、池化控制單元、行池化和列池化組成。其運(yùn)算結(jié)構(gòu)如圖6所示。
圖6 池化運(yùn)算單元結(jié)構(gòu)Fig. 6 Structure of pooling unit
與通用運(yùn)算單元類似,系統(tǒng)寄存器配置完成后,池化寄存器組開始對(duì)池化運(yùn)算參數(shù)寄存器(如輸入特征圖大小、輸出特征圖大小、池化窗口大小等)進(jìn)行配置。接著,池化模式寄存器被配置為最大池化、最小池化或平均池化之一,并產(chǎn)生相應(yīng)的控制信號(hào),發(fā)送給行池化和列池化單元。在完成池化運(yùn)算參數(shù)寄存器配置后,對(duì)池化數(shù)據(jù)參數(shù)寄存器進(jìn)行數(shù)據(jù)參數(shù)值寫入。根據(jù)這組寄存器提供的讀地址、讀數(shù)據(jù)長(zhǎng)度、讀數(shù)據(jù)形式(如行或面),從片外存儲(chǔ)器讀取與之對(duì)應(yīng)的有效數(shù)據(jù),并經(jīng)池化讀DMA存入池化讀緩存單元,然后執(zhí)行池化運(yùn)算。
池化的實(shí)際運(yùn)算單元包括行池化和列池化。其中,行池化的基本運(yùn)算電路是由最大池化電路、最小池化電路、平均池化電路和3選1多路選擇器構(gòu)成,池化方法控制信號(hào)決定行池化的輸出數(shù)據(jù)來源。對(duì)于列池化,其輸入源于行池化的輸出,因此列池化單元可由并行的行池化電路構(gòu)成。
根據(jù)池化運(yùn)算結(jié)構(gòu)框(圖6),列池化的輸出結(jié)果是池化的最終輸出結(jié)果。該結(jié)果通常作為全連接或卷積的輸入數(shù)據(jù),因此需要根據(jù)池化輸出數(shù)據(jù)參數(shù)寄存器,給定輸出存儲(chǔ)地址、存儲(chǔ)大小、行存儲(chǔ)參數(shù)、面存儲(chǔ)參數(shù)等,將池化輸出結(jié)果寫回片外存儲(chǔ)器的相應(yīng)單元。
使用開發(fā)工具Vivado2018對(duì)本文的設(shè)計(jì)進(jìn)行綜合和布局布線,其中RISC-V和CNN協(xié)加速器的時(shí)鐘頻率分別為16 MHz和110 MHz。表1列出了CNN協(xié)加速器資源消耗情況,CNN協(xié)加速器功耗為1.883 W。
表1 CNN協(xié)加速器資源消耗
Tab. 1 CNN accelerator resource utilization
資源名稱 資源消耗數(shù)目/個(gè) 資源占用率/%LUT 61 656 20.31 FF 84 115 13.85 BRAM 912 88.54 DSP 1 095 39.11
本文在相同測(cè)試條件下,分別將卷積、池化和全連接模型部署在CPU、GPU和本文設(shè)計(jì)的CNN協(xié)加速器,獲取各自的運(yùn)算時(shí)間、能耗等性能指標(biāo)。
表2為相同測(cè)試模型分別被部署在3個(gè)平臺(tái)(頻率2.4 GHz,功耗45 W的英特爾i5-9300處理器;頻率1.15 GHz,功耗235 W的英偉達(dá)GPU K40M處理器;頻率110 MHz,功耗1.883 W的CNN協(xié)加速器)的性能指標(biāo)。測(cè)試模型包括3個(gè)卷積模型,4個(gè)池化模型和3個(gè)全連接模型,卷積核大小均為 3 ×3。其中,本文的CNN加速器的卷積算力均值為221 GOPS。表2中的能耗比是GPU與CPU、本文協(xié)加速器與CPU的能耗比值;速度比是GPU與CPU、本文協(xié)加速器與CPU的運(yùn)算時(shí)間之比。
表2 不同平臺(tái)不同運(yùn)算單元性能
Tab. 2 Performance of different kits and different computing units
硬件平臺(tái) 運(yùn)算單元運(yùn)算時(shí)間/ms能耗/(W·s)能耗比速度比CPU i5-9th卷積 8 845.760 398.059 1 1池化 112.515 5.063 1 1全連接 11.960 0.538 1 1 GPU Tesla-K40M卷積 0.973 0.229 1 7429 095池化 0.914 0.215 24 123全連接 1.553 0.365 2 8本文協(xié)加速器卷積 46.676 0.087 4 554189池化 10.279 0.010 491 11全連接 2.184 0.004 131 6
為了更準(zhǔn)確地描述CNN模型的性能,將經(jīng)典模型VGG16的卷積層部署于CNN協(xié)加速器,表3列出了部署VGG16的5個(gè)卷積單元組時(shí),本文設(shè)計(jì)的加速器的性能。表3中,GOP(giga operations)代表十億次定點(diǎn)運(yùn)算數(shù),GOPS(giga operations per second)表示每秒執(zhí)行的十億次定點(diǎn)運(yùn)算數(shù)。
表3 VGG16卷積單元組性能
Tab. 3 Performance of convolution groups for VGG16 network
硬件平臺(tái) 卷積組 運(yùn)算時(shí)間/ms運(yùn)算量 吞吐量本文協(xié)加速器第1組 27.14 3.87 GOP142.59 GOPS第2組 27.14 5.55 GOP204.50 GOPS第3組 45.28 9.25 GOP204.28 GOPS第4組 46.35 9.25 GOP199.57 GOPS第5組 16.26 2.31 GOP142.07 GOPS
表4是本文設(shè)計(jì)的CNN加速器與部分前人工作的對(duì)比,從表4中可知,本文設(shè)計(jì)的CNN加速器的吞吐量為178.6 GOPS,與其他3種加速器相比,吞吐量分別提高94.3 GOPS、44.5 GOPS和55.9 GOPS。
表4 實(shí)驗(yàn)對(duì)比
Tab. 4 Comparison with previous implementations
平臺(tái) FPGA型號(hào)時(shí)鐘頻率/MHz運(yùn)行時(shí)間/ms運(yùn)算量 吞吐量Angel-eye[28]XC7Z020214364.0030.69 GOP84.30 GOPS ALAMO[29] GXA7 100 9.821.46 GOP134.10 GOPS ConvNets加速器[30]XC7Z045125249.5030.70 GOP123.12 GOPS本文協(xié)加速器VC707 110162.1730.69 GOP178.60 GOPS
本文基于RISC-V擴(kuò)展了控制訪問接口,用于參數(shù)配置,擴(kuò)展CNN加速器的數(shù)據(jù)訪問接口,完成數(shù)據(jù)高速傳輸,然后設(shè)計(jì)多視圖并行的卷積神經(jīng)網(wǎng)絡(luò)的協(xié)加速器,最后構(gòu)建包含RISC-V處理器和CNN協(xié)加速器的SoC。將CNN模型部署在本文設(shè)計(jì)的CNN協(xié)加速器、CPU、GPU平臺(tái),在測(cè)試模型和卷積核大小相同情況下,分別對(duì)各平臺(tái)的卷積、池化、全連接單元進(jìn)行仿真驗(yàn)證。其中,CNN的各運(yùn)算單元運(yùn)行在本文設(shè)計(jì)的CNN加速器的運(yùn)算速度分別是運(yùn)行在CPU平臺(tái)的189倍,11倍和6倍,但明顯低于GPU。而對(duì)比GPU與本文的加速器的能耗,各運(yùn)算單元運(yùn)行在GPU平臺(tái)的能耗分別是本文設(shè)計(jì)的CNN加速器的2.6倍,20.5倍和65.5倍。根據(jù)表3可知,全連接單元的加速比遠(yuǎn)小于卷積單元,其原因是全連接單元需經(jīng)轉(zhuǎn)換才能復(fù)用卷積單元結(jié)構(gòu),而轉(zhuǎn)換生成的卷積輸入特征圖的行和列大小都為1,這將導(dǎo)致訪問外部存儲(chǔ)器的帶寬降低。
為進(jìn)一步驗(yàn)證本文設(shè)計(jì)對(duì)具體CNN模型的影響,對(duì)VGG16的5組卷積單元進(jìn)行獨(dú)立驗(yàn)證,其卷積的運(yùn)算性能可達(dá)178.6 GOPS,與其他的CNN加速器相比,性能得以提升。雖然本文構(gòu)建的可配置CNN協(xié)加速器SoC的加速效果顯著,但僅僅是對(duì)卷積、池化、全連接單元的單獨(dú)測(cè)試,未進(jìn)行完整網(wǎng)絡(luò)的性能分析,下一步將搭建完整的CNN網(wǎng)絡(luò)模型進(jìn)行整體性能分析。