• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于FPGA的雙乘法器卷積加速算子的封裝方法

    2022-08-16 03:26:56聶煜桐沈月峰王呂大
    關(guān)鍵詞:乘法器校驗(yàn)算子

    聶煜桐,沈月峰,楊 帆,王呂大

    (中國(guó)航天科工集團(tuán)第二研究院 七〇六所,北京 100854)

    0 引 言

    近年來(lái),卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)應(yīng)用場(chǎng)景愈加復(fù)雜,CNN網(wǎng)絡(luò)模型的深度不斷增加,F(xiàn)PGA因其在速度、靈活性、功耗等方面的優(yōu)勢(shì)使得基于FPGA的卷積加速研究成為熱點(diǎn)[1,2]。通常情況下,F(xiàn)PGA上的卷積運(yùn)算會(huì)交付給DSP塊進(jìn)行實(shí)現(xiàn)。換言之,使用FPGA實(shí)現(xiàn)CNN常常依賴于FPGA片上的DSP資源以獲得最高的效率。然而DSP塊具有固定的位寬,而基于FPGA的CNN實(shí)現(xiàn)會(huì)將數(shù)據(jù)量化為8 bits位寬。因此,在FPGA的DSP塊沒(méi)有單指令流多數(shù)據(jù)流(SIMD)乘法支持的情況下,需要在DSP塊內(nèi)創(chuàng)建一個(gè)虛擬的SIMD通道——雙乘法器封裝[3],用以提高DSP塊的利用率?;陔p乘法器的卷積算子可以使運(yùn)算的吞吐量和DSP資源的利用率同時(shí)提高一倍。但是雙乘法器是通過(guò)位拼接實(shí)現(xiàn)的,這會(huì)導(dǎo)致符號(hào)位變成運(yùn)算位從而導(dǎo)致運(yùn)算結(jié)果錯(cuò)誤。因此簡(jiǎn)單的位拼接實(shí)現(xiàn)的雙乘法器只支持無(wú)符號(hào)數(shù)乘無(wú)符號(hào)數(shù),這種情況下封裝的卷積算子只能配合ReLU激活函數(shù)來(lái)使用。本文設(shè)計(jì)了一種校驗(yàn)電路,實(shí)現(xiàn)了雙有符號(hào)數(shù)拼接與有符號(hào)數(shù)的乘法。這使得該卷積算子支持如Leaky ReLU等多種激活函數(shù)。此外,F(xiàn)PGA擁有天生的并行性,對(duì)于該卷積算子而言,通過(guò)將卷積運(yùn)算展開為向量?jī)?nèi)積可以提高乘法運(yùn)算并行度,然后通過(guò)加法樹的設(shè)計(jì)思路提高加法運(yùn)算的并行度,從而提高算子的運(yùn)算速度。最后,為了支持不同規(guī)模的卷積運(yùn)算,本文采用參數(shù)化的設(shè)計(jì)方式來(lái)增加算子的靈活性,從而保證該算子可以適用于不同規(guī)模的神經(jīng)網(wǎng)絡(luò)。

    1 相關(guān)工作

    1.1 卷積神經(jīng)網(wǎng)絡(luò)的硬件加速研究

    近年來(lái),在機(jī)器學(xué)習(xí)領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)相比傳統(tǒng)算法有了很大的進(jìn)步,CNN在圖像識(shí)別、計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別等場(chǎng)景的表現(xiàn)非常優(yōu)異。以卷積神經(jīng)網(wǎng)絡(luò)為基礎(chǔ)的算法研究已表現(xiàn)出了其可靠性和穩(wěn)定性。大量可信數(shù)據(jù)的積累和硬件性能的提升,極大推動(dòng)了以數(shù)據(jù)和算力為基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)算法的研究。當(dāng)前實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的主要硬件平臺(tái)有:通用處理器(central processing unit,CPU)、圖形處理器(graphics processing unit,GPU)、專用集成芯片(application specific integrated circuit,ASIC)和現(xiàn)場(chǎng)可編程門陣列(field-programmable gate array,F(xiàn)PGA)。CPU的靈活性強(qiáng),調(diào)度效率高,但是CPU的并行能力不足,運(yùn)算效能相對(duì)較低。GPU擁有強(qiáng)大的浮點(diǎn)運(yùn)算能力和極高的運(yùn)算性能,非常適合執(zhí)行復(fù)雜的數(shù)學(xué)和幾何運(yùn)算(尤其是并行運(yùn)算)。但是由于GPU控制單元極少,故其必須由CPU進(jìn)行控制調(diào)用。此外GPU的功耗很大,對(duì)于浮點(diǎn)運(yùn)算精度不是很高的應(yīng)用,會(huì)造成功耗的浪費(fèi)。ASIC是一種為專門目的而設(shè)計(jì)的集成電路。ASIC芯片的效能要遠(yuǎn)高于其它硬件平臺(tái)。但是ASIC芯片靈活性很低,可擴(kuò)展性很差。相比之下,F(xiàn)PGA是作為ASIC領(lǐng)域中一種半定制電路而出現(xiàn)的,它擁有可定制、易擴(kuò)展、高并行等特點(diǎn),可以實(shí)時(shí)實(shí)現(xiàn)定制化設(shè)計(jì),F(xiàn)PGA理論上可以達(dá)到與定制芯片相當(dāng)?shù)男阅?。同時(shí)它又有很強(qiáng)的靈活性,很容易修改和擴(kuò)展新的算法。此外,對(duì)于通信密集型的任務(wù),F(xiàn)PGA 有比GPU更大的優(yōu)勢(shì)。除了性能和靈活度的優(yōu)勢(shì)以外,F(xiàn)PGA的功耗相對(duì)也比較低。因此,F(xiàn)PGA更適用于CNN算法的推理階段。

    1.2 基于FPGA的卷積加速研究

    FPGA是一種可自定義編程的硬件結(jié)構(gòu),其硬件結(jié)構(gòu)特性非常適合卷積運(yùn)算的特點(diǎn)。目前針對(duì)硬件結(jié)構(gòu)的優(yōu)化有很多的研究工作。亞利桑那州立大學(xué)的Ma Yufei等[4]利用循環(huán)交換技術(shù),改變循環(huán)計(jì)算的順序,利用循環(huán)展開技術(shù)以充分利用硬件的并行度,在Altera Arria10 GX 1150 FPGA上實(shí)現(xiàn)了645.25 GOPS的吞吐率。北京大學(xué)的Zhang Chen等[5]提出了核內(nèi)并行,核間并行以及混合并行3種數(shù)據(jù)級(jí)并行方式,并可以根據(jù)每層的參數(shù),選擇不同的并行方式。相比傳統(tǒng)方式,取得了4.0倍-8.3倍加速比。復(fù)旦大學(xué)的Li Huimin等[6]在卷積內(nèi)并行的基礎(chǔ)上,充分探索了卷積之間的并行度,提出一種全流水線架構(gòu)。它將網(wǎng)絡(luò)的每一層作為流水線的一級(jí),映射到硬件中獨(dú)立的一部分。但是由于每?jī)蓪又g都需要加入PingPong-Buffer來(lái)存儲(chǔ)相鄰層的中間結(jié)果,所以這種架構(gòu)需要消耗大量?jī)?nèi)存。為解決該問(wèn)題,石溪大學(xué)的Shen Yongming等[7]將卷積分為不同組,將FPGA的資源分為多個(gè)小的卷積處理器,每個(gè)小的卷積處理器處理同組內(nèi)的多層卷積運(yùn)算。該設(shè)計(jì)不僅具有更高的資源利用率和吞吐率,同時(shí)相比全流水結(jié)構(gòu),其所需中間緩存大大減小。為了進(jìn)一步提高FPGA的資源利用率,韓國(guó)蔚山科技大學(xué)的Nguyen等[3]提出了雙乘法器封裝技術(shù)。本文在這些研究的基礎(chǔ)上進(jìn)行了卷積算子級(jí)的優(yōu)化,擴(kuò)大了算子適用范圍的基礎(chǔ)上,提高了算子的運(yùn)算性能。

    2 卷積算子加速方法

    卷積算子是CNN模型中最核心的計(jì)算算子,是深度神經(jīng)網(wǎng)絡(luò)不可或缺的組成部分。在圖像領(lǐng)域,卷積層通過(guò)卷積算子的運(yùn)算可以提取出輸入圖像中比較復(fù)雜的特征,以實(shí)現(xiàn)圖像識(shí)別、分類等特定功能。

    2.1 卷積運(yùn)算

    卷積運(yùn)算是將矩陣A[n,n] (卷積核矩陣)在矩陣B[n,n] (圖像矩陣)上做滑窗操作。在每一個(gè)窗口上,將矩陣A[n,n]對(duì)應(yīng)的元素與矩陣B[n,n]的元素相乘,然后將所有的乘法結(jié)果相加作為對(duì)應(yīng)窗口的卷積結(jié)果進(jìn)行輸出?;瑒?dòng)窗口的設(shè)置可以將高維卷積分解為二維卷積。二維卷積每一個(gè)窗口上的數(shù)學(xué)運(yùn)算表達(dá)式(1)如下所示(式中?表示卷積運(yùn)算)

    (1)

    在整個(gè)輸入特征圖上的卷積運(yùn)算過(guò)程如圖1所示。

    圖1 卷積運(yùn)算過(guò)程

    圖1所示的二維卷積運(yùn)算過(guò)程可以抽象成算法1所示的由四層循環(huán)表示的偽碼。

    算法1:二維卷積算法偽碼

    輸入:輸入特征圖Datain[ci,ri], 卷積核K[n,n], 步長(zhǎng)s

    輸出:輸出特征圖Dataout[co,ro]

    (1)for(i=0;i

    (2)for(j=0;j

    (3)for(p=0;p

    (4)for(q=0;q

    (5)Dataout[i,j]+=Datain[p,q]×K[n-p,n-q]

    2.2 基于FPGA的硬件加速設(shè)計(jì)

    FPGA擁有靈活性強(qiáng),并行度高,運(yùn)算速度快等優(yōu)點(diǎn)。此外,F(xiàn)PGA還集成了大量的DSP資源以支持高并發(fā)的乘加運(yùn)算。因此FPGA非常適合用于卷積運(yùn)算的硬件加速。但是FPGA因其硬件特性導(dǎo)致它無(wú)法高效地支持大量浮點(diǎn)數(shù)運(yùn)算。定點(diǎn)量化[8]技術(shù)很好地解決了這一問(wèn)題。定點(diǎn)量化即將高位表示的浮點(diǎn)數(shù)量化成低位表示的定點(diǎn)數(shù)。相關(guān)實(shí)驗(yàn)結(jié)果表明,當(dāng)量化位寬在8 bits及以上時(shí),各網(wǎng)絡(luò)的損失基本在1%以內(nèi)。定點(diǎn)量化的做法不僅可以降低運(yùn)算的復(fù)雜度,還可以很好實(shí)現(xiàn)CNN在FPGA上的映射。因此基于FPGA 的CNN加速器通常使用8 bits的量化方式來(lái)實(shí)現(xiàn)卷積運(yùn)算。但是目前FPGA中的DSP資源支持最多25 bits×18 bits的有符號(hào)乘法運(yùn)算,同時(shí)擁有25 bits的預(yù)加器和48 bits的累加器。DSP塊是FPGA中承擔(dān)卷積運(yùn)算的主要運(yùn)算硬件單元。但是經(jīng)過(guò)定點(diǎn)量化的卷積運(yùn)算通常只需要進(jìn)行8 bits×8 bits的有符號(hào)乘法運(yùn)算,這無(wú)疑會(huì)帶來(lái)很大的位寬浪費(fèi)。為了減小上述位寬的浪費(fèi),提高DSP資源的利用率,Nguyen提出了雙乘法封裝的方法[3],即將兩個(gè)有相同乘數(shù)的乘法拼接在一起交給DSP模塊進(jìn)行運(yùn)算。如圖2(a)所示的兩個(gè)乘法A×C和B×C,其中A、B、C都為n bits無(wú)符號(hào)數(shù),將A和B進(jìn)行拼接,由于n bits×n bits的結(jié)果為2n bits,故需要在拼接數(shù)中間插入n+1 bits的0以保證A×C和B×C互不影響。如圖2(b)所示,對(duì)于兩個(gè)無(wú)符號(hào)數(shù)與無(wú)符號(hào)數(shù)的乘法進(jìn)行上述封裝,可以輸出正確結(jié)果。但是如圖2(c)所示,對(duì)于乘數(shù)是有符號(hào)數(shù)的情況,經(jīng)過(guò)位拼接后,會(huì)將低位乘數(shù)的符號(hào)位誤作為運(yùn)算位進(jìn)行處理,這種情況下會(huì)產(chǎn)生誤差導(dǎo)致運(yùn)算結(jié)果錯(cuò)誤。在實(shí)踐中,卷積層通常要配合激活函數(shù)一起搭建完整的網(wǎng)絡(luò)。若卷積算子只能支持無(wú)符號(hào)數(shù)的運(yùn)算,這將會(huì)進(jìn)一步影響到激活函數(shù)的選擇。為解決這一問(wèn)題,需要設(shè)計(jì)相關(guān)的校驗(yàn)電路進(jìn)行符號(hào)校驗(yàn)以支持雙有符號(hào)數(shù)與有符號(hào)數(shù)乘法的封裝。

    圖2 雙乘法器封裝及示例

    3 設(shè)計(jì)與實(shí)現(xiàn)

    3.1 雙乘法器封裝及校驗(yàn)電路設(shè)計(jì)

    為解決有符號(hào)數(shù)雙乘法封裝中符號(hào)位帶來(lái)的問(wèn)題,設(shè)計(jì)相應(yīng)的校驗(yàn)電路。需要封裝的乘法為A×C和B×C。首先對(duì)各乘數(shù)的符號(hào)狀態(tài)進(jìn)行分析,表1列出了乘數(shù)符號(hào)可能出現(xiàn)的所有組合。

    表1 乘數(shù)符號(hào)組合

    通過(guò)對(duì)表1的分析可以,根據(jù)公共乘數(shù)C的符號(hào)可將運(yùn)算分成*×Singed與*×UnSinged兩類。因此校驗(yàn)電路可以先設(shè)置一個(gè)比較器(Comparer)用于判斷公共乘數(shù)C的符號(hào),然后根據(jù)比較結(jié)果對(duì)乘數(shù)的符號(hào)順序進(jìn)行調(diào)整,將兩類乘法統(tǒng)一為同一類,即*×UnSinged。通過(guò)這一步的調(diào)整,只需要校驗(yàn)乘數(shù)A與乘數(shù)B的拼接問(wèn)題而無(wú)需考慮公共乘數(shù)C的符號(hào)。符號(hào)順序調(diào)整公式如式(2)所示

    C>0 A=-A, B=-B, C=-C ≤0 A=A, B=B, C=C

    (2)

    經(jīng)過(guò)符號(hào)調(diào)整后進(jìn)行第二步校驗(yàn)。首先分析有符號(hào)數(shù)的二進(jìn)制表示方式。有符號(hào)數(shù)常采用二進(jìn)制補(bǔ)碼的表示方式,設(shè)n bits有符號(hào)數(shù)A=an-1an-2…a1a0。 按照補(bǔ)碼的運(yùn)算方式可得A的計(jì)算公式如式(3)所示

    (3)

    根據(jù)數(shù)學(xué)運(yùn)算有-2n-1=2n-1-2n, 將該式代入式(3)可得

    (4)

    (5)

    圖3 校驗(yàn)電路設(shè)計(jì)

    3.2 并行加速

    通常情況下,基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行并行處理的方法有以下3種:卷積內(nèi)并行、卷積間并行、混合并行[9]。但是實(shí)踐中通常將卷積單元和池化單元作為一個(gè)整體運(yùn)算單元,通過(guò)運(yùn)算單元層級(jí)的流水線設(shè)計(jì)達(dá)到并行效果。從本質(zhì)上講,這是一種卷積核間并行的設(shè)計(jì)方式。算法1-1的四層循環(huán)中,最內(nèi)層的兩層循環(huán)是對(duì)卷積核的遍歷。對(duì)于K×K卷積核,完成這兩層循環(huán)共需K2個(gè)時(shí)鐘周期。通常情況下K的值是確定的,所以可以通過(guò)有限次的展開將這兩層for循環(huán)轉(zhuǎn)換成K2個(gè)并行的計(jì)算[8],即將矩陣的內(nèi)積展開成為向量的內(nèi)積,這樣便可在一個(gè)時(shí)鐘周期內(nèi)完成運(yùn)算并實(shí)現(xiàn)同樣的功能。在卷積運(yùn)算過(guò)程中,通過(guò)大小為K×K的滑動(dòng)窗口選擇參與運(yùn)算的數(shù)據(jù),然后將運(yùn)算數(shù)據(jù)和卷積核參數(shù)分別逐行分割并拼接成一維向量,最后對(duì)生成的兩個(gè)向量做內(nèi)積得到卷積運(yùn)算的結(jié)果,以一個(gè)3×3的卷積窗口為例,具體運(yùn)算過(guò)程如圖4所示。

    圖4 卷積展開的計(jì)算過(guò)程

    并行計(jì)算完這K2個(gè)乘法后,最終的卷積輸出需要將這K2個(gè)乘法結(jié)果相加。一般情況下需要做K2-1次加法。但是在FPGA中可以使用加法樹的計(jì)算方法來(lái)進(jìn)一步提高加法運(yùn)算的并行度。如圖5所示,該圖展示了加法樹的運(yùn)算結(jié)構(gòu),以該方式進(jìn)行計(jì)算只需做log2(K2-1) 次加法即可完成所有的運(yùn)算。

    圖5 加法樹

    3.3 卷積算子封裝

    卷積算子最終要服務(wù)于完整的網(wǎng)絡(luò)模型才能發(fā)揮自己的作用。在完整的網(wǎng)絡(luò)搭建過(guò)程中,往往需要不同規(guī)模的卷積層。這就要求底層設(shè)計(jì)的卷積算子易擴(kuò)展,方便修改對(duì)于卷積核大小的配置。故最終需要將算子封裝成一個(gè)卷積核大小可變的用戶IP核以適應(yīng)卷積神經(jīng)網(wǎng)絡(luò)中規(guī)模不斷變化的卷積運(yùn)算需求。使用參數(shù)化設(shè)計(jì)進(jìn)行RTL級(jí)的開發(fā)及封裝即可滿足這一需求。詳細(xì)的封裝電路設(shè)計(jì)如圖6所示。

    4 測(cè)試與驗(yàn)證

    4.1 實(shí)驗(yàn)說(shuō)明

    本文通過(guò)對(duì)卷積神經(jīng)網(wǎng)路中的核心算子——卷積算子的運(yùn)算原理以及FPGA資源特性和運(yùn)算特性的研究,設(shè)計(jì)了基于FPGA的雙乘法器卷積加速算子。算子的封裝過(guò)程中使用了雙有符號(hào)數(shù)乘法器,在提高DSP資源的利用率的同時(shí)實(shí)現(xiàn)運(yùn)算加速,即在一個(gè)時(shí)鐘周期完成兩個(gè)乘法運(yùn)算。由于底層加法器支持雙有符號(hào)數(shù)乘法,故該算子可以支持負(fù)數(shù)型激活函數(shù)。此外,本設(shè)計(jì)充分利用FPGA并行計(jì)算的優(yōu)勢(shì),將卷積運(yùn)算展開,通過(guò)卷積核內(nèi)并行的方式對(duì)算子進(jìn)行加速。根據(jù)以上的設(shè)計(jì)要點(diǎn),需要開展以下實(shí)驗(yàn)進(jìn)行驗(yàn)證:①雙乘法器封裝及校驗(yàn)電路的測(cè)試實(shí)驗(yàn);②卷積算子封裝測(cè)試實(shí)驗(yàn);③卷積算子性能驗(yàn)證實(shí)驗(yàn)。通過(guò)這些實(shí)驗(yàn),一方面可以通過(guò)充分的仿真測(cè)試保證算子運(yùn)算輸出的正確性,另一方面通過(guò)設(shè)置對(duì)照實(shí)驗(yàn),對(duì)所使用的資源數(shù)量進(jìn)行統(tǒng)計(jì),驗(yàn)證資源利用率的提升,同時(shí)通過(guò)對(duì)一定規(guī)模的卷積運(yùn)算所消耗的時(shí)鐘周期數(shù)進(jìn)行統(tǒng)計(jì),可以定量地說(shuō)明算子運(yùn)算性能的提升。

    圖6 卷積加速算子封裝電路設(shè)計(jì)

    4.2 實(shí)驗(yàn)條件與環(huán)境

    本文基于Xilinx的系列設(shè)計(jì)套件進(jìn)行實(shí)驗(yàn)開發(fā)及驗(yàn)證。硬件選擇Artix-7系列的開發(fā)板,該開發(fā)板可以提供豐富的DSP、LUT等邏輯資源和時(shí)鐘資源,完全可以滿足算子的封裝需求。此外,卷積算子最終要為大規(guī)模的神經(jīng)網(wǎng)絡(luò)服務(wù),因此使用資源豐富的開發(fā)板使得算子的擴(kuò)展使用更加方便。編譯器選擇Windows 10操作系統(tǒng)下的Vivado2019.2設(shè)計(jì)工具。Vivado套件支持FPGA的RTL級(jí)開發(fā),支持Verilog語(yǔ)言的編譯、仿真、綜合、布局布線以及bitstream文件的生成。同時(shí)它還提供ChipScope在線波形仿真功能,通過(guò)設(shè)計(jì)編寫測(cè)試文件可以直接生成電路測(cè)試波形,方便對(duì)設(shè)計(jì)的正確性進(jìn)行檢驗(yàn)。此外Vivado可以分別統(tǒng)計(jì)綜合與布局布線后所用資源的數(shù)量及利用率,方便對(duì)資源利用率動(dòng)態(tài)變化的分析。FPGA板卡通過(guò)Platform Cable USB與主機(jī)連接后,可進(jìn)行bitstream的下載以及仿真波形的采集。具體實(shí)驗(yàn)環(huán)境的配置見表2。

    4.3 實(shí)驗(yàn)內(nèi)容及實(shí)驗(yàn)結(jié)果

    本文所有的實(shí)驗(yàn)都使用Verilog語(yǔ)言進(jìn)行RTL級(jí)開發(fā),并設(shè)計(jì)Testbench文件對(duì)所開發(fā)模塊進(jìn)行仿真驗(yàn)證。根據(jù)4.1實(shí)驗(yàn)說(shuō)明的介紹,共有3組實(shí)驗(yàn),下文對(duì)這3組實(shí)驗(yàn)內(nèi)容進(jìn)行詳細(xì)說(shuō)明。

    表2 開發(fā)環(huán)境配置

    4.3.1 雙乘法器封裝及校驗(yàn)電路的測(cè)試實(shí)驗(yàn)

    該部分實(shí)驗(yàn)完成對(duì)于雙乘法器的封裝,并按照4.1介紹的校驗(yàn)方法開發(fā)對(duì)應(yīng)的校驗(yàn)電路。測(cè)試值覆蓋了8 bits位寬所表示有符號(hào)數(shù)的部分中間數(shù)值(如3、4、-3、-4等)和所有邊界數(shù)值(如127、-127、128、-128)以及部分越界數(shù)值(如255、-255等)。設(shè)置的測(cè)試用例覆蓋全面,且具有代表性,能夠充分驗(yàn)證設(shè)計(jì)的正確性。

    實(shí)驗(yàn)結(jié)果部分仿真圖如圖7所示。圖中a1、a2表示拼接的兩個(gè)乘數(shù),b表示公共乘數(shù),c1為a1×b的結(jié)果,c2為a2×b的結(jié)果。通過(guò)對(duì)測(cè)試結(jié)果的檢驗(yàn),所有測(cè)試數(shù)據(jù)對(duì)應(yīng)的輸出結(jié)果均正確。

    圖7 雙乘法器封裝驗(yàn)證實(shí)驗(yàn)仿真

    4.3.2 卷積算子封裝測(cè)試實(shí)驗(yàn)

    圖8 卷積算子封裝實(shí)驗(yàn)整數(shù)卷積仿真

    4.3.3 卷積算子優(yōu)化效果驗(yàn)證實(shí)驗(yàn)

    本文通過(guò)對(duì)卷積算子的封裝主要實(shí)現(xiàn)以下兩方面的優(yōu)化。①通過(guò)雙乘法器的封裝提升DSP資源的使用率;②通過(guò)卷積展開和雙乘法器運(yùn)算,同時(shí)提高卷積運(yùn)算核內(nèi)與核間的并行度,從而實(shí)現(xiàn)運(yùn)算速度的提升。為了驗(yàn)證上述優(yōu)化效果,本部分將設(shè)置相應(yīng)的對(duì)照實(shí)驗(yàn)。首先取消雙乘法器的封裝,使用正常的乘加器實(shí)現(xiàn)兩個(gè)與4.3.2實(shí)驗(yàn)中規(guī)模相同的卷積運(yùn)算,對(duì)比該實(shí)驗(yàn)與4.3.2實(shí)驗(yàn)各需要使用多少DSP資源。第二組對(duì)照實(shí)驗(yàn)將在上述實(shí)驗(yàn)的基礎(chǔ)上取消卷積展開的設(shè)計(jì),每個(gè)時(shí)鐘周期只計(jì)算一個(gè)乘法。該實(shí)驗(yàn)與4.3.2實(shí)驗(yàn)接入相同的時(shí)鐘周期,最后統(tǒng)計(jì)兩個(gè)實(shí)驗(yàn)完成相同規(guī)模卷積運(yùn)算所需的時(shí)鐘周期數(shù),時(shí)鐘周期的對(duì)比即可說(shuō)明運(yùn)算速度提升的大小。

    不同乘法器參與卷積運(yùn)算的資源統(tǒng)計(jì)如圖9所示。其中,圖9(a)為基于雙乘法器的卷積算子封裝資源消耗統(tǒng)計(jì),圖9(b)對(duì)照實(shí)驗(yàn)中資源消耗統(tǒng)計(jì)。且兩張資源消耗統(tǒng)計(jì)圖皆為編譯器Vivado綜合以及布局布線后統(tǒng)計(jì)的資源消耗數(shù)據(jù)。由圖9(a)可知,基于雙乘法器封裝的卷積算子共消耗了9個(gè)DSP,而對(duì)照實(shí)驗(yàn)中,實(shí)現(xiàn)相同規(guī)模的卷積需要消耗28個(gè)DSP資源。二者相比,資源利用率提高了3倍。然而,基于雙乘法器的卷積算子封裝,由于需要設(shè)計(jì)額外的校驗(yàn)電路,因而會(huì)消耗額外的LUT資源。但是對(duì)于FPGA而言,LUT屬于豐富資源,犧牲一定數(shù)量的LUT資源換取稀缺資源DSP利用率的提升是非常有價(jià)值的。

    圖9 卷積算子封裝資源消耗統(tǒng)計(jì)

    完成資源利用率的對(duì)比后,需要進(jìn)一步驗(yàn)證速度的提升。實(shí)驗(yàn)仿真時(shí)序圖如圖10所示。假設(shè)封裝的算子接入的時(shí)鐘為50 MHz,可以得到如圖10(a)所示的基于雙乘法封裝及卷積展開的卷積算子運(yùn)算時(shí)序圖。然后設(shè)置對(duì)照實(shí)驗(yàn),同樣在50 MHz的時(shí)鐘下完成相同規(guī)模的兩個(gè)卷積運(yùn)算,可得圖10(b)所示的時(shí)序圖。

    圖10 卷積算子運(yùn)算仿真時(shí)序圖

    5 結(jié)束語(yǔ)

    近年來(lái),卷積神經(jīng)網(wǎng)絡(luò)有了很廣泛的應(yīng)用。隨著數(shù)據(jù)量的不斷增加,卷積神經(jīng)網(wǎng)絡(luò)的硬件加速引發(fā)了廣泛的關(guān)注。FPGA因其功耗低、運(yùn)算速度快、并發(fā)度高、靈活性強(qiáng)等特點(diǎn)成為硬件加速的研究熱點(diǎn)。

    猜你喜歡
    乘法器校驗(yàn)算子
    擬微分算子在Hp(ω)上的有界性
    各向異性次Laplace算子和擬p-次Laplace算子的Picone恒等式及其應(yīng)用
    一類Markov模算子半群與相應(yīng)的算子值Dirichlet型刻畫
    爐溫均勻性校驗(yàn)在鑄鍛企業(yè)的應(yīng)用
    基于FPGA的流水線單精度浮點(diǎn)數(shù)乘法器設(shè)計(jì)*
    Roper-Suffridge延拓算子與Loewner鏈
    大型電動(dòng)機(jī)高阻抗差動(dòng)保護(hù)穩(wěn)定校驗(yàn)研究
    基于加窗插值FFT的PMU校驗(yàn)方法
    鍋爐安全閥在線校驗(yàn)不確定度評(píng)定
    乘法器模塊在FPGA中的實(shí)現(xiàn)
    龙门县| 阿城市| 乾安县| 儋州市| 镇安县| 登封市| 峨边| 新源县| 宿松县| 张北县| 舞阳县| 扶绥县| 遂平县| 二手房| 精河县| 广南县| 樟树市| 科尔| 龙泉市| 江口县| 克什克腾旗| 明溪县| 密山市| 台山市| 开封县| 南溪县| 巫山县| 嘉定区| 巴马| 梓潼县| 昌江| 塔城市| 罗山县| 抚顺县| 古交市| 麻栗坡县| 瑞丽市| 徐汇区| 皋兰县| 东明县| 南丹县|