常立博, 張盛兵
(1.西北工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院, 陜西 西安 710072; 2.西安郵電大學(xué) 電子工程學(xué)院, 陜西 西安 710121)
基于卷積神經(jīng)網(wǎng)絡(luò)CNNs的智能算法已廣泛應(yīng)用到自動(dòng)駕駛、智能監(jiān)控和移動(dòng)虛擬現(xiàn)實(shí)等領(lǐng)域。然而,此類智能算法在獲得較高精度的同時(shí),也具有極高的計(jì)算復(fù)雜度和巨大的參數(shù)量,導(dǎo)致采用對(duì)功耗和計(jì)算資源敏感的邊緣計(jì)算設(shè)備實(shí)現(xiàn)此類算法時(shí),通常無法滿足實(shí)時(shí)性和低功耗的應(yīng)用需求。因此本文將探索可適應(yīng)于終端場(chǎng)景的高能效CNN加速器設(shè)計(jì)方法。
采用基于參數(shù)量化CNNs的輕量化方法可以極大降低神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量、訪存量和計(jì)算復(fù)雜度[1],從而為將CNNs的計(jì)算任務(wù)映射到邊緣計(jì)算設(shè)備上提供了可能。因?yàn)镃NNs中不同層的冗余度存在很大差異,而基于混合精度量化策略可針對(duì)不同層的參數(shù)變化范圍調(diào)整數(shù)據(jù)位寬,得到在保證量化精度操作情況下表示參數(shù)的最小數(shù)據(jù)位寬[2],從而確定最優(yōu)的量化位寬。所以如果CNNs中各卷積層的參數(shù)均采用最優(yōu)的量化位寬時(shí),混合精度量化算法可在精度損失和壓縮率之間達(dá)到最佳平衡。然而混合量化CNNs可能引入不規(guī)則的算法運(yùn)算操作(如奇數(shù)位寬的乘法運(yùn)算),而已有僅支持特定統(tǒng)一參數(shù)位寬或特定幾種參數(shù)位寬的CNN處理器,由于未能最大限度地利用混合量化提供的計(jì)算并行度,阻礙了處理器性能進(jìn)一步提升。因此需要設(shè)計(jì)可靈活且高效支持混合量化CNNs的運(yùn)算操作,才能真正提高加速器針對(duì)混合精度CNNs的計(jì)算效率。
與此同時(shí),由于CNNs具有豐富的計(jì)算并行性,可以增加計(jì)算單元的數(shù)量以提高計(jì)算并行度。然而混合量化CNNs中不同層的參數(shù)位寬會(huì)導(dǎo)致不同層之間的訪存特性具有較大差異,如果采用固定的數(shù)據(jù)劃分和訪問模式[3],則會(huì)造成巨大的片上緩存資源浪費(fèi)并增加數(shù)據(jù)移動(dòng)量。如果將緩存不同類型參數(shù)的片上緩存區(qū)統(tǒng)一劃分,并根據(jù)不同類型參數(shù)的存儲(chǔ)需求來劃分緩存區(qū)尺寸,則會(huì)提高片上存儲(chǔ)器的利用率[4]。同時(shí),由于CNNs鄰近層之間的參數(shù)存在一定的關(guān)聯(lián)性,如上一層卷積的輸出特征圖可能是下一層卷積的輸入特征圖,鄰近層之間同類型的參數(shù)規(guī)模變化較小;同時(shí),基于殘差結(jié)構(gòu)的CNNs通過跨層信息融合以提高精度,因此可通過設(shè)計(jì)靈活的參數(shù)訪問模式以提高參數(shù)的復(fù)用性并減少數(shù)據(jù)移動(dòng)量,從而提高計(jì)算效率。
不同CNNs的模型結(jié)構(gòu)和計(jì)算模式均存在較大差異,并且不同應(yīng)用場(chǎng)景可提供的計(jì)算資源及對(duì)處理器的性能和功耗等要求也不同。采用面向特定應(yīng)用領(lǐng)域體系結(jié)構(gòu)(domain-specific architectures,DSA)[5]和可重構(gòu)計(jì)算技術(shù)方法,既可獲得很高的效能又具備一定的靈活性,可以兼顧嵌入式智能終端系統(tǒng)對(duì)高性能、低功耗以及高靈活性的要求,從而滿足應(yīng)用場(chǎng)景對(duì)CNN處理器的可定制性和可擴(kuò)展性要求。然而,隨著可重構(gòu)加速器靈活度的提高,其設(shè)計(jì)空間探索(design space exploration,DSE)的范圍將變得十分巨大,因此需要一種可高層次表達(dá)CNNs和可重構(gòu)平臺(tái)特性的算法映射表達(dá)方法,以降低映射復(fù)雜度,提高可重構(gòu)效率和處理器的通用性,從而可加速不同類型的CNN模型。
針對(duì)上述問題,本文采用軟硬件協(xié)同優(yōu)化和可重構(gòu)計(jì)算方法,針對(duì)混合精度CNNs計(jì)算和訪存特性,設(shè)計(jì)可支持混合位寬的可重構(gòu)運(yùn)算單元、可支持多種數(shù)據(jù)復(fù)用以及減少數(shù)據(jù)移動(dòng)數(shù)量的緩存器,以及設(shè)計(jì)了一種表達(dá)混合CNNs計(jì)算、訪存以及計(jì)算模式的宏指令集和可重構(gòu)處理器架構(gòu)。本文主要貢獻(xiàn)如下:
1) 提出具有可定制性和可擴(kuò)展性的CNN處理器架構(gòu),以及可有效表達(dá)混合精度CNNs模型計(jì)算的宏指令集(macro instruction set architecture,mISA)。通過高層描述被加速的CNNs模型計(jì)算、訪存和控制等數(shù)據(jù)流特征,并設(shè)計(jì)對(duì)應(yīng)的可重構(gòu)處理器結(jié)構(gòu)以提高計(jì)算效率。
2) 提出可支持混合位寬并行乘加運(yùn)算的可重構(gòu)微處理單元(reconfigurable micro-processing element,RmPE)和可重構(gòu)多核計(jì)算引擎架構(gòu)(compute engine,CE)。根據(jù)被加速的混合精度CNNs模型的結(jié)構(gòu)特點(diǎn)和目標(biāo)平臺(tái)的資源限制,計(jì)算引擎通過重構(gòu)陣列結(jié)構(gòu)和數(shù)據(jù)流模式以提高計(jì)算資源利用率。
3) 提出可適應(yīng)可重構(gòu)CNNs計(jì)算特性的彈性片上數(shù)據(jù)緩存策略。通過動(dòng)態(tài)配置地址及片上互聯(lián)模式減少非必要數(shù)據(jù)移動(dòng)的延時(shí)和功耗開銷;通過基于Tile的動(dòng)態(tài)緩存劃分策略提高片上存儲(chǔ)資源利用率。
為了滿足不同CNN模型中各卷積層對(duì)于運(yùn)算位寬的多樣化需求,提高CNN加速器的計(jì)算效率,目前針對(duì)混合精度CNNs計(jì)算模式以及可重構(gòu)CNN處理器體系結(jié)構(gòu)方面開展了大量研究。
目前已有大量基于ASIC或可重構(gòu)平臺(tái)(如FPGA)的面向混合精度CNN加速器設(shè)計(jì)。Judd等[6]提出的Stripes處理器支持可變精度的激活數(shù)據(jù),Lee等[7]提出的UNPU處理器支持可變精度的權(quán)重?cái)?shù)據(jù),但是2種架構(gòu)都只支持一種運(yùn)算數(shù)據(jù)位寬的改變,因此沒有最大限度提高混合精度CNNs的計(jì)算效率;Sharify等[8]提出的Loom處理器采用串行乘法單元以支持多精度的卷積運(yùn)算,然而由于需要并串轉(zhuǎn)換電路,需要消耗大量芯片面積和功耗;Sharna等[9]提出的基于位級(jí)融合的Bit Fusion處理器,利用2 bit數(shù)據(jù)運(yùn)算單元的融合和分解支持不同運(yùn)算數(shù)據(jù)位寬,但是由于基礎(chǔ)運(yùn)算單元處理位寬的限制,對(duì)于存在較多非二次冪位寬參數(shù)的混合精度CNNs,該架構(gòu)的加速效率會(huì)受到限制。
雖然基于ASIC的方法可通過定制化運(yùn)算單元實(shí)現(xiàn)混合精度CNNs模型加速, 但是此類方法無法應(yīng)用到基本運(yùn)算單元固定的可重構(gòu)平臺(tái),如基于DSP的FPGA等。已有基于FPGA的CNNs加速器通常采用匹配CNNs模型中最大的數(shù)據(jù)位寬的計(jì)算模式,所以對(duì)于量化后存在大量低數(shù)據(jù)位寬的CNNs則無法充分利用FPGA平臺(tái)中的DSP等計(jì)算資源,從而降低了加速器的計(jì)算效率,因此需要一種自適應(yīng)多精度計(jì)算的高效處理單元。為了提高FPGA平臺(tái)針對(duì)低數(shù)據(jù)位寬運(yùn)算的并行度,可將多個(gè)低位寬數(shù)據(jù)合并為一個(gè)高位寬數(shù)據(jù),通過復(fù)用DSP以提高計(jì)算并行度[10],其能夠根據(jù)不同運(yùn)算位寬調(diào)整運(yùn)算并行度,但是運(yùn)算單元的并行度受到符號(hào)位的限制,無法充分復(fù)用DSP資源。
雖然CNNs具有計(jì)算類型較少并且計(jì)算流程固定的特點(diǎn),但是不同CNNs或是同一模型中的不同卷積層的數(shù)據(jù)流和數(shù)據(jù)訪存等方面具有不同的特性。已有學(xué)者提出基于模板或自動(dòng)化設(shè)計(jì)方法[11-14],此類方法首先對(duì)算法和可重構(gòu)平臺(tái)的資源進(jìn)行抽象描述,然后通過優(yōu)化算法確定加速器體系結(jié)構(gòu)和具體可重構(gòu)配置的參數(shù)。如Ma等[11]首先設(shè)計(jì)了可實(shí)現(xiàn)CNNs運(yùn)算的基本操作單元庫(kù),然后通過自動(dòng)化地組合不同運(yùn)算單元以適應(yīng)不同的CNNs模型;Wei和Guo等[12-13]分別提出了基于性能和計(jì)算資源利用率約束的自動(dòng)化設(shè)計(jì)優(yōu)化方法,從而提出針對(duì)不同CNNs的計(jì)算效率。然而此類方法的優(yōu)化策略復(fù)雜度將隨著搜索空間的增加而快速提高,因此當(dāng)CNNs模型復(fù)雜度較高時(shí),通常很難得到最優(yōu)的處理器的體系結(jié)構(gòu)和映射策略。同時(shí),Azizimazreah等[14]通過配置和重構(gòu)“物理”基本單元,構(gòu)建“邏輯”運(yùn)算單元和緩存單元,從而降低重構(gòu)延時(shí)并提高加速器的可定制性和可擴(kuò)展性,然而其直接將各卷積運(yùn)算轉(zhuǎn)換為可重構(gòu)加速器的配置信息,因此映射復(fù)雜度較高。
為了提高CNNs的運(yùn)算效率,本文設(shè)計(jì)了一種可支持混合精度運(yùn)算的多核處理器,結(jié)構(gòu)如圖1所示。由支持可變精度的卷積、激活、池化等操作的計(jì)算引擎,可支持彈性劃分與動(dòng)態(tài)重組的緩存單元以及可支持亂序發(fā)射的控制單元組成,而計(jì)算數(shù)據(jù)和控制數(shù)據(jù)通過片上總線接口單元與外部完成數(shù)據(jù)交換。
圖1 可重構(gòu)CNN處理器架構(gòu)
其中,控制單元(command engine,CMDE)包含指令存儲(chǔ)、PC尋址單元、寄存器堆以及譯碼單元,通過PC訪問指令存儲(chǔ),經(jīng)譯碼模塊產(chǎn)生相應(yīng)的控制信號(hào),進(jìn)而控制片上數(shù)據(jù)通路和數(shù)據(jù)緩存。計(jì)算引擎由用于完成特定特征圖tile塊卷積運(yùn)算的二維RmPE陣列,以及用于池化和激活等標(biāo)量運(yùn)算的專用計(jì)算單元組成。片上彈性緩存包含多個(gè)相互獨(dú)立的存儲(chǔ)塊(bank),通過專用Crossbar總線將彈性緩存與計(jì)算引擎中對(duì)應(yīng)的數(shù)據(jù)緩存單元連接起來。
為了將不同結(jié)構(gòu)混合精度CNNs高效地映射到可重構(gòu)計(jì)算平臺(tái),根據(jù)CNNs中計(jì)算類型較少并且計(jì)算流程固定的特點(diǎn),本文提出一種控制通路簡(jiǎn)單、可提高數(shù)據(jù)級(jí)并行度的宏指令集。該指令集由10條32 bit指令組成,指令字段劃分方式如圖2所示,根據(jù)32 bit數(shù)據(jù)表示的含義將其細(xì)分為3個(gè)字段:功能,寄存器和參數(shù)。其中,由4 bit數(shù)據(jù)組成的function表示指令類型,由10 bit數(shù)據(jù)組成的registers表示用于控制計(jì)算過程的變量或索引,而由18 bit數(shù)據(jù)組成的parameters表示如量化的CNN模型的特征等信息。指令集分為4類:配置、運(yùn)算、訪存和循環(huán)控制。配置指令(config-*)用于實(shí)現(xiàn)在每個(gè)卷積層運(yùn)算前對(duì)該層的存儲(chǔ)劃分以及計(jì)算特性描述;運(yùn)算指令compute用于啟動(dòng)tile級(jí)運(yùn)算;訪存指令load/store控制計(jì)算引擎與彈性存儲(chǔ)之間的數(shù)據(jù)交互,循環(huán)控制指令add、beq、jmp負(fù)責(zé)控制計(jì)算任務(wù)的循環(huán)過程。
圖2 宏指令集格式
該宏指令包含2個(gè)32 bit通用寄存器,用于緩存特征圖塊的索引,并暫存一些標(biāo)量數(shù)據(jù),例如用于循環(huán)控制的變量值。如圖2所示,r1(a)表示參數(shù)a存儲(chǔ)在寄存器r1中,r1(a/b)表示參數(shù)a或b存儲(chǔ)在寄存器“r1”中,寄存器r2以類似的方式起作用。宏指令的參數(shù)(parameters)用于配置或控制可重新配置的計(jì)算引擎和彈性片上緩沖區(qū)。例如,根據(jù)存儲(chǔ)單元陣列的行和列中的RAM數(shù)量,特征圖的通道數(shù),填充的大小以及相關(guān)的緩沖區(qū)類型,使用“bank-config”來配置劃分緩沖區(qū)方法等。表1列出了宏指令集中各參數(shù)縮寫的含義。
表1 指令集中參數(shù)縮寫的含義
混合精度量化算法通過調(diào)整不同卷積層中特征值和權(quán)重的位寬,以實(shí)現(xiàn)CNNs的精度和壓縮率之間最優(yōu)平衡。其量化后的CNNs各層的參數(shù)位寬量為確定值,因此根據(jù)乘法分割原理,將多個(gè)低位寬數(shù)據(jù)拼接為一個(gè)高位寬數(shù)據(jù)運(yùn)算的模型可表達(dá)如(1)式所示,其中x為乘數(shù)位寬,y為被乘數(shù)位寬,p為并行度,b為乘法器的最大運(yùn)算位寬。在確定可重構(gòu)平臺(tái)中的乘法器位寬后,可利用(1)式確定特定運(yùn)算數(shù)據(jù)位寬和乘法操作的最大并行度。
b=px+(p-1)y-2p+1
(1)
根據(jù)上述并行乘法的分析,結(jié)合已有可重構(gòu)計(jì)算資源的特性(如FPGA平臺(tái)中的DSP),本文設(shè)計(jì)可支持2~8 bit內(nèi)任意精度并行乘加運(yùn)算的可重構(gòu)微處理單元(reconfigurable micro-processing element,RmPE),其架構(gòu)如圖3所示。RmPE內(nèi)部采用權(quán)重復(fù)用的計(jì)算模式,可根據(jù)輸入特征和權(quán)重的位寬確定運(yùn)算并行度,并且通過控制編碼與解碼操作動(dòng)態(tài)可重構(gòu)RmPE單元。并行輸入特征與權(quán)重在運(yùn)算并行度的控制下分離符號(hào)位與數(shù)據(jù)位,數(shù)據(jù)位輸入乘法運(yùn)算單元進(jìn)行并行乘法運(yùn)算,符號(hào)位輸入異或門進(jìn)行符號(hào)計(jì)算。不同運(yùn)算并行度下解碼出的乘法運(yùn)算結(jié)果輸入對(duì)應(yīng)累加器,對(duì)卷積過程中的部分和進(jìn)行累加,而計(jì)算出的符號(hào)位則會(huì)作為累加器執(zhí)行加法或減法運(yùn)算的標(biāo)志。卷積運(yùn)算結(jié)束后,累加結(jié)果統(tǒng)一截?cái)嘀? bit以降低激活運(yùn)算的復(fù)雜度。
圖3 RmPE架構(gòu)
為了適應(yīng)不同類型的混合精度CNNs的數(shù)據(jù)位寬,本文通過定義RmPE中對(duì)應(yīng)的可重構(gòu)參數(shù),從而可根據(jù)不同混合精度量化網(wǎng)絡(luò)模型定制計(jì)算單元的規(guī)模,在提升計(jì)算性能的并提高計(jì)算資源利用率,表2列舉了RmPE中的可重構(gòu)參數(shù)及其含義。
表2 RmPE參數(shù)描述
本文采用文獻(xiàn)[11]提出的計(jì)算單元組織方式,根據(jù)被加速的混合精度CNNs模型的結(jié)構(gòu)特點(diǎn)和目標(biāo)平臺(tái)的資源限制,將多個(gè)RmPE組成的二維陣列構(gòu)成計(jì)算引擎(compute engine,CE)。計(jì)算引擎的整體設(shè)計(jì)如圖4所示,包括采用陣列結(jié)構(gòu)的卷積運(yùn)算單元和串行處理卷積結(jié)果的池化和激活單元。計(jì)算引擎采用流模式處理運(yùn)算數(shù)據(jù),計(jì)算流程中的數(shù)據(jù)通路選擇由控制單元管理,卷積運(yùn)算單元從輸入緩存和權(quán)重緩存中讀取數(shù)據(jù)進(jìn)行卷積運(yùn)算,產(chǎn)生的并行卷積結(jié)果通過重組,以串行數(shù)據(jù)流模式輸入激活或者池化單元,最終運(yùn)算結(jié)果以并行方式存入輸出緩存。
圖4 計(jì)算引擎硬件結(jié)構(gòu)
由于RmPE在卷積處理單元中按照陣列方式進(jìn)行排列,因此可通過調(diào)整陣列結(jié)構(gòu)以適應(yīng)不同混合精度CNNs模型的計(jì)算特性。如圖4的虛線框中給出的nPEx,nPEy以及nPEz分別表示計(jì)算陣列的3個(gè)維度。可根據(jù)被加速的混合精度CNNs的結(jié)構(gòu)特點(diǎn)和目標(biāo)平臺(tái)的資源限制,通過重構(gòu)陣列結(jié)構(gòu)和數(shù)據(jù)流模式以提高計(jì)算資源利用率。
為了解決卷積運(yùn)算不同類型數(shù)據(jù)在混合精度CNNs各層間存儲(chǔ)量差異巨大的問題,本文采用文獻(xiàn)[14]提出的彈性存儲(chǔ)結(jié)構(gòu)(elastic buffer,EB),將片上存儲(chǔ)單元?jiǎng)澐譃槎鄠€(gè)獨(dú)立的bank,不再設(shè)有特定的輸入緩存、權(quán)重緩存以及輸出緩存,只提供對(duì)應(yīng)的數(shù)據(jù)輸入輸出接口,接口數(shù)目根據(jù)加速系統(tǒng)中計(jì)算引擎的數(shù)目定制,以保證數(shù)據(jù)訪問并行度。在每層運(yùn)算開始前,控制器根據(jù)各bank的狀態(tài)和bank劃分策略,以動(dòng)態(tài)重組的方式將bank指定為特定的計(jì)算引擎緩存單元。計(jì)算引擎通過待運(yùn)算數(shù)據(jù)的索引(如特征圖的tile編號(hào)等)訪問對(duì)應(yīng)的bank。其中卷積計(jì)算單元中的輸入、輸出、權(quán)重?cái)?shù)據(jù)按照?qǐng)D5所示的方式進(jìn)行tile劃分。在圖5a)中,輸入和輸出特征數(shù)據(jù)的tile在行方向上的尺寸等于特征圖寬度,在列方向上的尺寸決定了tile的組數(shù),每組包含全部輸入或輸出通道,計(jì)算過程中,tile的劃分方式會(huì)隨著運(yùn)算量的改變而改變,因此彈性存儲(chǔ)內(nèi)部以特征圖尺寸對(duì)特征數(shù)據(jù)進(jìn)行存儲(chǔ),以支持不同tile尺寸的重構(gòu)。圖5b)中權(quán)重塊在行方向上的數(shù)據(jù)量對(duì)應(yīng)該層單個(gè)卷積核的數(shù)據(jù)量,列方向的尺寸對(duì)應(yīng)輸入通道的分組,每組包含全部輸出通道的卷積核。
圖5 tile劃分方法
彈性存儲(chǔ)需要根據(jù)計(jì)算引擎中RmPE陣列的nPEx,nPEy以及nPEz3個(gè)維度進(jìn)行重構(gòu),以減少計(jì)算引擎因等待數(shù)據(jù)引起停頓,從而提高計(jì)算單元的利用率。因此,構(gòu)建輸入特征存儲(chǔ)區(qū)域的存儲(chǔ)塊在位面方向的數(shù)目需要匹配nPEz,從而為RmPE陣列提供nPEy行的并行輸入;構(gòu)成權(quán)重以及輸出特征存儲(chǔ)區(qū)域的存儲(chǔ)塊在位面方向的數(shù)目需要匹配nPEz,從而滿足RmPE陣列在輸出通道方向上的并行度。
本文選擇經(jīng)典CNNs-VGG-16和包含殘差結(jié)構(gòu)并且結(jié)構(gòu)復(fù)雜的ResNet-50,驗(yàn)證本文提出的混合精度CNNs可重構(gòu)處理器性能。采用文獻(xiàn)[2]提出的混合精度量化算法量化VGG-16和ResNet-50模型,量化參數(shù)位寬變化范圍及準(zhǔn)確率如表3所示,其中準(zhǔn)確率為針對(duì)ImageNet數(shù)據(jù)集的圖像分類結(jié)果。從表3可以看出量化后網(wǎng)絡(luò)模型的精度損失均小于1%,2種網(wǎng)絡(luò)量化后的權(quán)重位寬分布在2~8 bit之間。同時(shí),根據(jù)文獻(xiàn)[15]對(duì)于激活數(shù)據(jù)量化敏感度分析,激活值量化位寬的改變會(huì)對(duì)網(wǎng)絡(luò)準(zhǔn)確率造成很大影響,因此在混合精度量化后的ResNet-50和VGG-16網(wǎng)絡(luò)中,激活數(shù)據(jù)的位為特定幾種數(shù)據(jù)位寬,其中針對(duì)VGG-16模型選擇4或8 bit,而針對(duì)ResNet-50模型選擇4,6或8 bit。
表3 混合精度量化結(jié)果
根據(jù)nPEx方向上對(duì)RmPE數(shù)目的分析,卷積處理單元在3個(gè)方向上的尺寸共有4種可能性,按照(nPEx,nPEy,nPEz)的方式標(biāo)記,分別為(4,7,12),(5,7,10),(6,7,8),(7,7,7),因此需要為2種混合精度網(wǎng)絡(luò)各設(shè)計(jì)4種卷積處理單元進(jìn)行性能比較,為了方便描述,依照CNNs模型以及卷積處理單元在nPEx方向上的尺寸對(duì)加速器分別標(biāo)記為:ResNet4,ResNet5,ResNet6,ResNet7。表4展示了針對(duì)混合精度ResNet-50模型,本文設(shè)計(jì)的4種結(jié)構(gòu)的混合精度CNN加速器,在Ultra96-V2開發(fā)板上的計(jì)算吞吐率、計(jì)算效率、推理延時(shí)以及資源使用量等。其中計(jì)算性能最優(yōu)的是ResNet4,其計(jì)算性能和計(jì)算效率分別達(dá)到了219.56 GOPS和0.653 GOPS/DSP,其吞吐率甚至超過了使用更多計(jì)算單元的ResNet5,并且在DSP數(shù)量相同的情況下,ResNet4的計(jì)算性能要優(yōu)于ResNet6,這是由于混合精度ResNet-50模型在nPEx方向上的計(jì)算并行度處于飽和狀態(tài),不需要很多RmPE即可在特征的行方向上獲得較高的并行計(jì)算能力。然而,針對(duì)運(yùn)算并行度不高的模型(如VGG-16),不同類型計(jì)算陣列在特征行方上的并行計(jì)算能力差別不大,因此可通過減少nPEx并增加nPEz來提高計(jì)算效率??梢钥闯?針對(duì)特定的混合精度CNN模型,可通過改變計(jì)算陣列在不同維度的尺寸和對(duì)應(yīng)的片上緩存劃分策略,達(dá)到最優(yōu)的計(jì)算效率。然而,針對(duì)不同類型的混合精度CNN模型,則需要不同的重構(gòu)方法才能獲得最優(yōu)性能。
本文設(shè)計(jì)的混合精度CNNs處理器與其他FPGA平臺(tái)的加速器[10-14]的對(duì)比結(jié)果如表5所示。其中存儲(chǔ)資源部分的 Xilinx FPGA采用36 kB的存儲(chǔ)塊,而Intel FPGA采用20 kB的存儲(chǔ)塊;表中的DSP資源的Xilinx FPGA的DSP運(yùn)算位寬為27×18 bit,Intel FPGA的DSP運(yùn)算位寬為18×18 bit;表中邏輯資源的Xilinx FPGA為L(zhǎng)UTs,Intel FPGA為ALMs。為了公平地對(duì)比性能,表5中所有的計(jì)算性能均在batch size為1時(shí)測(cè)得。本文的混合精度CNN處理器在計(jì)算性能方面,比使用了更多DSP資源的固定位寬加速器[13]提高了111.4 GOPS,同時(shí)可獲得更高的準(zhǔn)確率。文獻(xiàn)[11-12]使用與本文類似的脈動(dòng)陣列結(jié)構(gòu)加速卷積運(yùn)算,當(dāng)FPGA上的DSP資源用量處于飽和狀態(tài)時(shí),雖然本文的混合精度CNN處理器在片上資源較少的Ultra96-V2平臺(tái)上的計(jì)算性能較低,但是在計(jì)算效率方面分別提高了3.2倍和1.6倍,說明本文提出的并行計(jì)算單元RmPE對(duì)計(jì)算效能的提升作用。同時(shí),將本文提出的可重構(gòu)CNNs處理器映射到片上資源較多的ZCU102平臺(tái)上,針對(duì)ResNet-50網(wǎng)絡(luò)的計(jì)算性能可達(dá)913.8 GOPS,計(jì)算效率達(dá)到0.40,其性能和計(jì)算效率均高于文獻(xiàn)[11],說明了本文提出的處理器具有較好的可擴(kuò)展性和可定制性。文獻(xiàn)[10]使用了與本文類似的并行乘法單元加速混合精度CNNs,在吞吐率和計(jì)算效率方面均優(yōu)于其他設(shè)計(jì),而本文利用分離符號(hào)位與使得本文的混合精度CNN處理器在DSP的使用效率方面相較于文獻(xiàn)[6]提高了6.7%。
表4 針對(duì)混合精度ResNet-50,采用不同陣列結(jié)構(gòu)的各種資源使用情況和性能對(duì)比
表5 與其他基于FPGA平臺(tái)CNN加速器對(duì)比
為了解決將基于混合精度CNNs的智能算法在已有通用計(jì)算平臺(tái)上實(shí)現(xiàn),無法滿足終端設(shè)備對(duì)實(shí)時(shí)性和低功耗的應(yīng)用需求的問題。本文設(shè)計(jì)了支持多精度并行乘加運(yùn)算的可重構(gòu)微處理單元,可根據(jù)混合CNNs模型結(jié)構(gòu)重構(gòu)多核處理器。根據(jù)不同混合精度CNNs定制片上資源,在計(jì)算過程中重構(gòu)計(jì)算單元并行度和片上緩存單元的劃分方式,提高處理器的計(jì)算效率。本文設(shè)計(jì)的CNN處理器在Ultra96-V2上推理VGG-16和ResNet-50時(shí)計(jì)算性能分別達(dá)到216.6和214 GOPS,計(jì)算效率為0.63和0.64 GOPS/DSP,實(shí)現(xiàn)了對(duì)嵌入式硬件平臺(tái)上計(jì)算資源的高效利用。