亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2022-08-16 03:26:56聶煜桐沈月峰王呂大
        計算機工程與設計 2022年8期
        關鍵詞:乘法器校驗算子

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

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

        0 引 言

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

        1 相關工作

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

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

        1.2 基于FPGA的卷積加速研究

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

        2 卷積算子加速方法

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

        2.1 卷積運算

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

        (1)

        在整個輸入特征圖上的卷積運算過程如圖1所示。

        圖1 卷積運算過程

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

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

        輸入:輸入特征圖Datain[ci,ri], 卷積核K[n,n], 步長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的硬件加速設計

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

        圖2 雙乘法器封裝及示例

        3 設計與實現(xiàn)

        3.1 雙乘法器封裝及校驗電路設計

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

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

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

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

        (2)

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

        (3)

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

        (4)

        (5)

        圖3 校驗電路設計

        3.2 并行加速

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

        圖4 卷積展開的計算過程

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

        圖5 加法樹

        3.3 卷積算子封裝

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

        4 測試與驗證

        4.1 實驗說明

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

        圖6 卷積加速算子封裝電路設計

        4.2 實驗條件與環(huán)境

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

        4.3 實驗內(nèi)容及實驗結果

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

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

        4.3.1 雙乘法器封裝及校驗電路的測試實驗

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

        實驗結果部分仿真圖如圖7所示。圖中a1、a2表示拼接的兩個乘數(shù),b表示公共乘數(shù),c1為a1×b的結果,c2為a2×b的結果。通過對測試結果的檢驗,所有測試數(shù)據(jù)對應的輸出結果均正確。

        圖7 雙乘法器封裝驗證實驗仿真

        4.3.2 卷積算子封裝測試實驗

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

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

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

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

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

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

        圖10 卷積算子運算仿真時序圖

        5 結束語

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

        猜你喜歡
        乘法器校驗算子
        擬微分算子在Hp(ω)上的有界性
        各向異性次Laplace算子和擬p-次Laplace算子的Picone恒等式及其應用
        一類Markov模算子半群與相應的算子值Dirichlet型刻畫
        爐溫均勻性校驗在鑄鍛企業(yè)的應用
        基于FPGA的流水線單精度浮點數(shù)乘法器設計*
        Roper-Suffridge延拓算子與Loewner鏈
        大型電動機高阻抗差動保護穩(wěn)定校驗研究
        電測與儀表(2015年1期)2015-04-09 12:03:02
        基于加窗插值FFT的PMU校驗方法
        鍋爐安全閥在線校驗不確定度評定
        乘法器模塊在FPGA中的實現(xiàn)
        国产高清成人午夜视频| 人妻AV无码一区二区三区奥田咲| 精品一区二区三区在线视频观看| 国产一区二区三区在线观看黄| 老鸭窝视频在线观看| 东京无码熟妇人妻av在线网址| 国产成+人+综合+亚洲专| 久久偷拍国内亚洲青青草| 欧美午夜理伦三级在线观看| 中文字幕一区二区三区乱码| 91精品国产免费久久久久久青草| 国产少妇露脸精品自拍网站| 特黄 做受又硬又粗又大视频| av无码免费永久在线观看| 最新欧美一级视频| 精品婷婷国产综合久久| 亚洲av国产av综合av卡| 国产亚洲av人片在线观看| 视频二区精品中文字幕| 日本黄色影院一区二区免费看 | 国产永久免费高清在线| 在线a免费观看| 国产精品国产三级厂七| 国产一品二品三品精品在线| 丰满岳妇乱一区二区三区| 国产成人久久蜜一区二区| 亚洲女同一区二区三区| 日本高清视频wwww色| 亚洲国产精品一区二区第四页| 亚洲一区二区女优av| 人妻少妇进入猛烈时中文字幕| 无套内射无矿码免费看黄| 中文字幕第一页亚洲观看| 青青草视频在线观看绿色| 国产成人综合亚洲看片| 色综合88| 91青青草手机在线视频| 免费国产在线精品一区| 无码丰满少妇2在线观看| 和少妇人妻邻居做爰完整版| 强d乱码中文字幕熟女免费|