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

        ?

        面向卷積神經(jīng)網(wǎng)絡(luò)的高并行度FPGA加速器設(shè)計

        2021-03-18 13:45:38
        計算機應(yīng)用 2021年3期
        關(guān)鍵詞:算力加速器利用率

        (1.北京航天自動控制研究所,北京 100854;2.宇航智能控制技術(shù)國家級重點實驗室,北京 100854)

        0 引言

        卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種包含卷積計算的前饋神經(jīng)網(wǎng)絡(luò),是深度學(xué)習(xí)的代表算法之一[1]。自從AlexNet[2]在2012 年ImageNet 大規(guī)模視覺識別挑戰(zhàn)賽(ImageNet Large Scale Visual Recognition Challenge,ILSVRC)[3]上展示出CNN 在大規(guī)模圖像處理中的巨大優(yōu)勢后,CNN 算法乃至循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)等其他深度學(xué)習(xí)算法受到了廣泛關(guān)注?,F(xiàn)在,基于CNN的圖像分類、目標(biāo)檢測、圖像分割等算法已經(jīng)廣泛應(yīng)用于道路行人檢測、無人駕駛汽車、醫(yī)學(xué)影像分析、國防安全等領(lǐng)域,并取得了顯著成果。

        雖然CNN 算法性能卓越,但是相較于傳統(tǒng)的圖像識別算法,它需要更多的計算量和存儲資源,如19 層的VGG(VGG-19)[4]包含1.4 × 108個參數(shù)、3.9 × 1010次浮點運算,152 層的ResNet[5](ResNet-152)包含5.7× 107個參數(shù)、2.2 × 109次浮點運算,輸入大小為300 × 300 的SSD[6]包含2.3× 107個參數(shù)、6.1× 1010次浮點運算。這對中央處理器(Central Processing Unit,CPU)來講并不友好,因為CPU 更擅長流程控制,而用于計算的資源并不多;相比較而言,擁有大量計算核心的圖形處理器(Graphics Processing Unit,GPU)更適合CNN 算法加速[7],但GPU 架構(gòu)本身并非專為加速CNN 算法設(shè)計,存在功耗過大的問題,難以適應(yīng)嵌入式領(lǐng)域的低功耗要求。

        為了解決嵌入式領(lǐng)域CNN 計算設(shè)備算力不足的問題,研究者們從計算單元結(jié)構(gòu)、訪存方式、低功耗設(shè)計等多個方面提出各種CNN 的硬件加速器技術(shù)及方案[8-12]。然而這些設(shè)計要么只利用CNN 的輸入輸出通道并行[8],導(dǎo)致其架構(gòu)的整體并行度較低,難以滿足嵌入式領(lǐng)域很多應(yīng)用的算力需求;要么直接將卷積計算轉(zhuǎn)換為矩陣向量乘,導(dǎo)致其所需片上存儲過大或者存儲帶寬需求過大,如Google 的張量處理器(Tensor Processing Unit,TPU)[9];雖然Eyeriss[11]通過其巧妙的脈動陣列同時利用了CNN 算法的多種并行,但是脈動陣列的邏輯控制復(fù)雜,導(dǎo)致其在現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)中的實現(xiàn)難以提高時鐘頻率[12];Xilinx 的深度學(xué)習(xí)處理單元(Deep learning Processing Unit,DPU)同時利用了CNN 的輸入輸出并行和特征圖內(nèi)并行,但其特征圖內(nèi)并行的方式會導(dǎo)致片上存儲帶寬需求增加、特征圖尺寸變小時計算效率急劇下降等諸多難以克服的問題。Angel-Eye[13]利用可配置的2維卷積器[14]實現(xiàn)了卷積核內(nèi)并行的方案,但是需要大規(guī)模的鏈式移動寄存器組,會消耗大量的FPGA 邏輯資源,而且控制邏輯復(fù)雜,難以利用高層次綜合(High Level Synthesis,HLS)實現(xiàn)??傊?,研究者們還未系統(tǒng)地比較研究CNN 算法中可用于硬件加速的各類并行度,也未針對CNN這種多通道2維卷積算法提出一種專門的硬件結(jié)構(gòu),以簡潔有效地利用CNN 算法的卷積核內(nèi)并行,進一步提高CNN加速器的算力。

        針對上述問題,本文以CNN 算法中可用于硬件加速的各類并行度為切入點,在綜合比較研究各類并行度的基礎(chǔ)上,提出CNN 加速器設(shè)計的各類并行度組合方案,以面對嵌入式應(yīng)用的不同算力需求場景。在較高算力需求場景下,為了簡潔有效地利用CNN 算法的卷積核內(nèi)并行,本文提出多通道卷積旋轉(zhuǎn)寄存流水(Multi-channel Convolutional Rotating-register Pipeline,MCRP)結(jié)構(gòu),其邏輯簡單,容易實現(xiàn),且不會額外增加片上緩存帶寬,計算過程中無須將輸入特征圖在卷積窗口內(nèi)展開,就可以實現(xiàn)卷積窗口內(nèi)數(shù)據(jù)的并行計算。利用此結(jié)構(gòu),可將CNN 加速器的并行度在只利用卷積輸入輸出并行的基礎(chǔ)上增加9 倍,使得設(shè)計出更高并行度的CNN 加速器變得簡單易行。本文的主要工作可歸納為如下幾點:

        1)針對3×3 的卷積運算,提出多通道卷積旋轉(zhuǎn)寄存流水結(jié)構(gòu)MCRP,簡潔有效地利用了CNN算法的卷積核內(nèi)并行。

        2)基于多通道卷積旋轉(zhuǎn)寄存流水結(jié)構(gòu),提出了一種CNN硬件加速器架構(gòu),并將其部署于Xilinx 的ZYNQ ultrascale+系列多處理器片上系統(tǒng)(Multi-Processor System on Chip,MPSoC)芯片上。

        1 CNN及其計算并行度

        CNN 通過局部連接模擬視覺神經(jīng)的感知局部性,通過權(quán)值共享的方式避免了深度神經(jīng)網(wǎng)絡(luò)容易過擬合的問題,使其在圖像分類、目標(biāo)檢測、圖像分割等諸多領(lǐng)域表現(xiàn)優(yōu)異。為了更好地理解本文的對CNN 及其各類并行計算方式的分析,本章將簡要介紹CNN 的基礎(chǔ)知識以及CNN 模型卷積層的各類計算并行度。

        1.1 CNN

        CNN 由一系列相互獨立的層組成(Layer),以多個串聯(lián)的卷積層和池化層作為特征提取器,以全連接層作為最后的特征分類器。CNN 的第一層輸入是待處理的圖片,輸出是一組特征圖(Fout);其余各層的輸入(Fin)是前一層的輸出特征圖;最后一層輸出CNN 的處理結(jié)果。在卷積層之后,為了縮小特征圖的尺寸,一般會有一個池化層用于降采樣。一般地,為了增加模型的表征能力,CNN 模型的每一層之后還會增加一個非線性激活函數(shù),如ReLU、sigmoid等。

        1)卷積層。卷積層的功能是對輸入特征圖進行特征提取。為了提取出多種不同特征,需要多個卷積核有規(guī)律地從輸入特征圖掃過。卷積核每次移動的距離稱為步長S(Stride),每個卷積核都是一個3 維張量,卷積核的通道數(shù)與輸入通道數(shù)相同,卷積核的個數(shù)和輸出通道數(shù)對應(yīng)。圖1 展示了3×3卷積的一般過程,其中:M為輸入通道數(shù),N為輸出通道數(shù),Wi/Hi為輸入特征圖的尺寸(寬/高),Wo/Ho為輸出特征圖的尺寸。卷積層的計算過程可公式化表示為:

        其中:conv2d為一般的平面內(nèi)的2維卷積算子;W(i,j)為與第i個輸入通道、第j個輸出通道對應(yīng)的卷積核;b(j)為與第j個輸出通道對應(yīng)的偏置。

        圖1 3×3卷積的一般過程Fig.1 General process of 3×3 convolution

        2)全連接層。全連接層的功能是對輸入特征進行線性變換:

        其中:Fin、Fout分別是輸入、輸出特征向量,或者可以看成是尺寸為1 的特征圖;W是大小為M×N的特征變換矩陣;b是輸出的偏置向量。

        3)池化層。池化層的功能是對輸入特征圖降采樣,輸出每個池化窗口內(nèi)的最大值(最大池化)或平均值(平均池化)。池化層不但能降低特征圖尺寸,而且還可以提高CNN 模型的特征魯棒性。池化窗口為2 的最大池化的計算過程可公式化表示為:其中:w是輸出特征圖的列索引;h是輸出特征圖的行索引;j為輸出特征圖的通道索引。

        除了卷積層和全連接層之外,CNN 模型還可能會包含池化層、跳連層(concat layer)[5]、元素可分離(element wise)卷積層[15]、深度可分離卷積層[16]以及其他層,但是這些層在規(guī)模較大的CNN 算法中的計算量占比都很小,圖2 展示了經(jīng)典CNN模型VGG-11[4]各類型層的計算量的分布情況。由圖2可以看出,在VGG-11 模型中,3×3 的卷積層占了95%以上的計算量,全連接層占了約2%的計算量,這與大部分CNN 算法的計算量的分布情況一致[17],因此,大部分CNN 加速器只針對卷積層和全連接層設(shè)計[8-13]。為了進一步簡化設(shè)計、提高性能,本文專門針對計算量占比最大的3×3 卷積進行硬件加速器設(shè)計,其他類型的層將通過3×3卷積算子間接支持。

        圖2 VGG-11的計算量分布情況Fig.2 Calculation distribution of VGG-11

        1.2 卷積層的各類并行度

        從算法角度來講,卷積層的前向計算過程為一個6 層嵌套循環(huán),只在循環(huán)的最內(nèi)層進行乘累加(Multiply ACcumulate,MAC)運算。具體過程見基本卷積的偽代碼:

        從上述偽代碼中可以看出,這6 層循環(huán)之間沒有依賴,它們的順序可以任意調(diào)換。而硬件加速卷積層計算的基本原理就是,將某些循環(huán)部分展開后移至最內(nèi)層,用多套乘累加電路并行計算,而剩余的循環(huán)依然在外層保持緊湊的嵌套結(jié)構(gòu),分時復(fù)用內(nèi)層的計算電路。選擇哪一層循環(huán)展開,展開為幾套電路,即并行度類型和大小的選擇,將很大程度決定CNN 加速器的算力峰值、硬件利用率、邏輯復(fù)雜度、數(shù)據(jù)流的安排、片上緩存設(shè)計以及最終性能。因此,計算并行度類型和大小的選擇是CNN加速器設(shè)計的關(guān)鍵。本文將卷積計算的6層歸納為4 類計算并行度,如圖3 所示,下面將分別介紹這4 類計算并行度。

        1)輸入通道并行。將基本卷積偽代碼中的輸入通道循環(huán)部分展開,同時計算PDi個輸入通道的數(shù)據(jù),即輸入通道并行,并行度為PDi。由于大多數(shù)CNN 算法的特征圖最小通道數(shù)不大于32[4-6,15-16],經(jīng)剪枝處理[18]后,很多層的通道數(shù)將小于32。為了保證硬件加速器的實際利用率,PDi一般不大于32。

        2)輸出通道并行。將基本卷積偽代碼中的輸出通道循環(huán)部分展開,同時計算PDo個輸出通道的數(shù)據(jù),即輸出通道并行,并行度為PDo。同樣的,為了保證硬件加速器的實際利用率,PDo一般不大于32。

        3)特征圖內(nèi)并行。將基本卷積偽代碼中的特征圖內(nèi)的行/列循環(huán)部分展開,同時計算PDf個特征圖內(nèi)的數(shù)據(jù),即特征圖內(nèi)并行,并行度為PDf。CNN 算法各層的特征圖尺寸變化范圍非常大,表1 統(tǒng)計了各經(jīng)典CNN 模型的特征圖尺寸變化范圍。為了在特征圖變小時依然保持較高硬件利用率,PDf一般不大于8。

        4)卷積核內(nèi)并行。將基本卷積偽代碼中的卷積核內(nèi)的行/列循環(huán)部分展開,即同時計算PDk個卷積核內(nèi)的數(shù)據(jù),即卷積核內(nèi)并行,并行度為PDk。由于CNN 的大部分計算量集中在3×3卷積層,因此可將PDk設(shè)9。

        表1 經(jīng)典CNN模型的特征圖尺寸變化范圍Tab.1 Feature map size range of classic CNN algorithms

        圖3 卷積層的4種計算并行度Fig.3 Four kinds of computating parallelism for convolutional layer

        2 FPGA高并行度加速計算方案

        本章將首先分析利用各類并行度進行硬件加速的優(yōu)缺點,提出應(yīng)對不同算力需求場景的并行度選擇方案。然后,提出MCRP 結(jié)構(gòu),此結(jié)構(gòu)將輸入通道并行和卷積核內(nèi)并行巧妙結(jié)合在一起,以很小的代價有效地利用卷積核內(nèi)并行。最后,基于MCRP 結(jié)構(gòu)提出了CNN 加速器整體架構(gòu)。如2.1 節(jié)所述,3×3的卷積層占據(jù)了CNN 算法的大部分計算量,為了簡化計算、提高性能,本文專門針對3×3 卷積層優(yōu)化設(shè)計CNN 加速器。

        對于其他尺寸卷積層和全連接層,可將其通過簡單的變換轉(zhuǎn)換為3×3卷積后進行加速計算。比如,步長為1的1×1卷積層可轉(zhuǎn)換為步長為3的3×3卷積層,轉(zhuǎn)換后輸入通道數(shù)變?yōu)樵瓉淼?/9,特征圖尺寸變?yōu)樵瓉淼? 倍;步長為1 的5×5 卷積層,通過適當(dāng)補零,將其轉(zhuǎn)換為步長為1的3×3卷積,轉(zhuǎn)換后輸入通道數(shù)變?yōu)樵瓉淼? 倍,而特征圖尺寸比本來的尺寸小3;而全連接層可以看作特征圖尺寸為1 的1×1 卷積,與步長為1的1×1卷積類似,也可轉(zhuǎn)換為3×3卷積層。

        2.1 硬件加速器方案選擇

        CNN 硬件加速器方案的選擇,關(guān)鍵在于并行度類型和大小的選擇。為了進一步說明各類并行度的優(yōu)缺點,本文將首先建立一個簡單而不失一般性的CNN 加速器的基本模型。如圖4 所示,此模型由3 塊獨立的片上緩存和處理單元(Process Element,PE)組成,PE 每次計算時都從Fin_buf 獲取輸入特征、從W_buf 獲取權(quán)重數(shù)據(jù)、從Fout_buf 獲取卷積的中間結(jié)果,將本次的計算結(jié)果累加到中間結(jié)果上之后寫回Fout_buf。

        圖4 CNN加速器的基本模型Fig.4 Basic model of CNN accelerator

        由圖3 可知,不同的并行度類型每次計算所需的數(shù)據(jù)量不同,即不同的并行度類型將會導(dǎo)致不同的片上緩存帶寬需求。片上緩存帶寬直接影響FPGA 中BRAM(Block Random Access Memory)和布線資源的消耗量,帶寬越大,消耗的資源越多,當(dāng)片上資源無法滿足帶寬需求時,將不得不調(diào)整數(shù)據(jù)流以及設(shè)計的其他部分。與本文其他部分的數(shù)據(jù)位寬設(shè)置相同,考慮到定點量化[20]的因素,將輸入特征、權(quán)重數(shù)據(jù)的位寬設(shè)為8 bit,而為了保證計算精度,中間結(jié)果的位寬設(shè)為12 bit。表2為各類并行度大小為9時,它們對片上緩存帶寬需求的比較。從表2 中可以看出,卷積核內(nèi)并行所需帶寬最小,僅為輸出通道并行和特征圖內(nèi)并行的1/3。從這一方面講,卷積核內(nèi)并行是CNN硬件加速器最佳并行方式選擇。

        表2 各類并行度的帶寬需求比較 單位:bit/clkTab.2 Comparison of bandwidth requirements for different kinds of parallelism unit:bit/clk

        基于FPGA 的CNN 加速器一般工作在100~300 MHz[17],因此只能通過提高硬件總體并行度的方式提高算力。由2.2節(jié)可知,各類并行度都被限制在較小范圍內(nèi),需將它們選擇性地組合使用。一般地,在低算力需求的應(yīng)用環(huán)境下,可選擇最為簡單的輸入通道并行+輸出通道并行(輸入輸出通道并行)的方式。在較高算力需求的應(yīng)用環(huán)境下,Xilinx 的DPU 就是采用輸入輸出通道并行+特征圖內(nèi)并行的組合方案。而本文認為在這種應(yīng)用環(huán)境下,DPU 的方案并不是最合適的。相比之下,輸入輸出通道并行+卷積核內(nèi)并行的方案更加簡潔高效,因為本文提出的MCRP 結(jié)構(gòu)可將輸入通道并行和卷積核內(nèi)并行的數(shù)據(jù)流巧妙結(jié)合在一起,在只增加少量邏輯和不增加緩存帶寬的情況下,就可以將設(shè)計的并行度在只利用輸入輸出并行的基礎(chǔ)上增加9 倍,既避免了特征圖內(nèi)并行方案的復(fù)雜邏輯設(shè)計,又克服了其在特征圖尺寸變小時,硬件利用率過低的缺陷。當(dāng)然,在更高算力需求的應(yīng)用環(huán)境下,當(dāng)輸入輸出通道并行+卷積核內(nèi)并行的方案不能滿足應(yīng)用的算力需求時,可以考慮將4種并行度全部組合起來使用。

        2.2 多通道卷積旋轉(zhuǎn)寄存流水結(jié)構(gòu)

        多通道卷積旋轉(zhuǎn)寄存流水結(jié)構(gòu)的主要功能是:在輸入通道并行的基礎(chǔ)上,在不增加Fin_buf 帶寬需求的條件下,利用卷積核內(nèi)的數(shù)據(jù)復(fù)用,每個時鐘周期為PE 單元提供3×3×PDi個特征數(shù)據(jù),以滿足PE 單元每個時鐘周期計算PDi個通道3×3 卷積的數(shù)據(jù)需求。MCRP 的結(jié)構(gòu)如圖5 所示,主要由Fin_buf、Line_buf和Fin_reg組成:

        1)Fin_buf。用于緩存從片外雙速率同步動態(tài)隨機存儲器(Dual Date Rate synchronous dynamic random memory,DDR)讀取的輸入特征數(shù)據(jù),并向MCRP 結(jié)構(gòu)提供數(shù)據(jù)。是由BRAM(Block RAM)實現(xiàn)的雙端口RAM,讀/寫端口位寬均為PDi× 8 bit,可同時讀寫PDi個特征數(shù)據(jù),其深度Fin_buf_LEN視片上存儲資源和CNN 模型的規(guī)模而定,沒有特殊要求。輸入特征數(shù)據(jù)按照圖6 所示的排序方式緩存到Fin_buf,第0 維對應(yīng)Fin_buf 的寬度,而其余各維度在Fin_buf 的深度方向順序緩存,即每PDi個通道的特征圖為一組,按照通道、列、行、分組的順序存儲。

        圖5 多通道卷積旋轉(zhuǎn)寄存流水結(jié)構(gòu)Fig.5 Multi-channel convolutional rotating-register pipeline structure

        圖6 DDR中輸入特征的排序方式Fig.6 Sorting order of input features in DDR

        2)Line_buf。由4 個獨立的line buffer 組成,分別編號為0、1、2、3。每個line buffer 為BRAM 實現(xiàn)的單端口RAM,端口位寬為PDi× 8 bit,深度Line_buf_LEN 由CNN 模型的最大特征圖尺寸決定,即每個line buffer 可存儲PDi個通道的1 行特征數(shù)據(jù)。PE 每次開始計算前,需首先將輸入特征圖的1、2、3行從Fin_buf依次寫入0、1、2 號line buffer;然后便可以每個時鐘周期3×PDi個特征數(shù)據(jù)的速度向Fin_reg 供應(yīng)數(shù)據(jù);與此同時,開始向3 號line buffer 寫入第4 行特征數(shù)據(jù)。當(dāng)0、1、2號buffer中的數(shù)據(jù)完成一次計算后,3號line buffer中的數(shù)據(jù)也剛好寫入完畢;此時,便可開始將1、2、3 號line buffer 中的數(shù)據(jù)供給Fin_reg,開啟2、3、4 行特征圖的計算;同時開始向0 號line buffer 寫入第5 行特征數(shù)據(jù)。以此類推,計算開啟后,總有3 個line buffer 在向Fin_reg 供應(yīng)數(shù)據(jù),而另一個line buffer從Fin_buf緩存數(shù)據(jù),整個過程好似Line_buf在旋轉(zhuǎn)。

        3)Fin_reg。與Line_buf類似,由4組獨立的Fin寄存器組成,分別編號為0、1、2、3。每組寄存器都由觸發(fā)器(Flip-Flop,F(xiàn)F)實現(xiàn),可緩存3×PDi個特征數(shù)據(jù),等于每次可從Line_buf讀取的數(shù)據(jù)量。當(dāng)0、1、2組寄存器依次寫滿后(需要3個時鐘周期),PE 單元便可開始工作,F(xiàn)in_reg 每個時鐘周期向PE 單元供應(yīng)3× 3×PDi個數(shù)據(jù);當(dāng)下一個時鐘周期到來時,第3 組寄存器已從Line_buf 取得數(shù)據(jù),F(xiàn)in_reg 便可將1、2、3 組寄存器中的數(shù)據(jù)供給PE 單元,同時向第0 組寄存器寫入數(shù)據(jù)。以此類推,每行開始計算后,總有3 組Fin 寄存器向PE 單元供應(yīng)數(shù)據(jù),而另一組寄存器從Line_buf 讀取數(shù)據(jù),整個過程好似Fin_reg在旋轉(zhuǎn)。

        總體來看,MCRP 沒有在輸入通道并行的基礎(chǔ)上增加對Fin_buf 的帶寬需求;經(jīng)過Line_buf 和Fin_reg 旋轉(zhuǎn)寄存之后,便可在每個時鐘周期向PE單元供應(yīng)3× 3×PDi個特征數(shù)據(jù)。不難發(fā)現(xiàn),MCRP結(jié)構(gòu)中Line_buf負責(zé)卷積窗口內(nèi)特征數(shù)據(jù)的行重用,F(xiàn)in_reg 負責(zé)卷積窗口內(nèi)特征數(shù)據(jù)的列重用,從而避免了將卷積層運算轉(zhuǎn)換為矩陣向量乘[9]。對于其他尺寸卷積,MCRP 結(jié)構(gòu)依然適用,只需調(diào)整Line_buf中l(wèi)ine buffer 的個數(shù)和Fin_reg中寄存器組的個數(shù)。

        2.3 CNN加速器架構(gòu)

        在MCRP 結(jié)構(gòu)的基礎(chǔ)上,本文提出了一種針對CNN 算法的FPGA 硬件加速單元(簡稱CNN 加速器)架構(gòu)。此架構(gòu)采用輸入輸出通道并行+卷積核內(nèi)并行的方案,為了保證此加速器對于大部分CNN 算法都有較高的硬件利用率,輸入通道并行度和輸出通道并行度將會被限制在32 以內(nèi),當(dāng)卷積核內(nèi)并行度為9 時,在250 MHz 的時鐘頻率下,此加速器架構(gòu)的理論峰值算力可以達到4 608 GOPS(Giga Operations Per Second),基本可以滿足嵌入式領(lǐng)域大部分應(yīng)用的算力需求。如圖7 所示,CNN 加速器主要由控制單元(Control)、片上緩存、計算單元PE共3個功能模塊組成。

        圖7 CNN加速器的整體架構(gòu)Fig.7 Overall architecture of CNN accelerator

        1)控制單元。CNN 加速器是主控ARM(Advanced RISC Machine)的從設(shè)備,ARM 可以通過控制單元啟動CNN 加速器,并通過AXILite 接口讀取Status_reg 查詢加速器的運行狀態(tài)。除了與ARM 通信和協(xié)調(diào)外,控制單元的另一功能是控制CNN加速器其他功能模塊的運行:控制各模塊間的數(shù)據(jù)流,配置各模塊的具體參數(shù)及功能、控制各模塊的啟動時序。具體工作過程為:當(dāng)ARM 啟動控制單元開始工作后,控制單元通過m_AXI 總線從DDR 讀取指令序列;把指令解碼后,根據(jù)指令中的信息以及Status_reg、Control_reg 的信息控制其他功能模塊工作;當(dāng)執(zhí)行到最后一條指令時,即完成一次CNN 算法的前向計算后,控制單元產(chǎn)生中斷信號,通知ARM計算完成。

        2)片上緩存。片上緩存由Fin_buf、W_buf 和Fout_buf 共3 部分組成,都是由BRAM 實現(xiàn),通過m_AXI 總線與片外存儲DDR 進行數(shù)據(jù)交換。其中,F(xiàn)in_buf 是MCRP 結(jié)構(gòu)的一部分,用于緩存輸入特征;W_buf用于緩存權(quán)重數(shù)據(jù),寫端口位寬為PDi× 8 bit,讀端口位寬為PDi× 3× 3× 8 bit,深度W_buf_LEN 視情況而定;對于Fout_buf,需要3 個端口同時讀寫中間結(jié)果和寫出最終結(jié)果到外部DDR,1 塊雙端口RAM 不能滿足要求,因此設(shè)置了兩片完全相同的輸出特征緩存區(qū),每片的讀/寫端口位寬均為PDo× 12 bit,深度Fout_buf_LEN 視情況而定。由此通過乒乓操作,可讓中間結(jié)果的讀寫和最終結(jié)果的導(dǎo)出同時進行。

        3)計算單元。計算單元是CNN 加速器的算力核心,由PDo個乘-加法樹和3 個寄存器組成。乘-加法樹的結(jié)構(gòu)如圖8 所示,由3× 3×PDi個乘法器和(3× 3×PDi-1)個加法器組成,為了避免因加法樹過大而拖慢工作頻率,還需在加法樹中間插入寄存器,使得加法樹變?yōu)槎嗉壛魉€結(jié)構(gòu)。每個乘-加法樹負責(zé)PDi個輸入通道的3× 3 卷積窗口內(nèi)的乘累加運算,每個時鐘周期從Fin_reg 和W_reg 分別獲取輸入特征和權(quán)重數(shù)據(jù),并向Conv_reg 寫入乘累加結(jié)果。一共PDo個加法樹,各對應(yīng)一個輸出通道,因此計算單元可在一個時鐘周期完成3× 3×PDi×PDo次乘累加運算(MAC),即計算單元的計算并行度可以達到3× 3×PDi×PDo。寄存器組包括Fin_reg、W_reg 和Conv_reg,都是由FF 實現(xiàn)。其中,F(xiàn)in_reg 也是MCRP結(jié)構(gòu)的一部分。W_reg 用于緩存從W_buf 獲取的PDo個卷積核的PDi個通道的權(quán)重數(shù)據(jù)。由于W_reg 所需的數(shù)據(jù)量較大,難以在一個時鐘周期內(nèi)全部獲取,因此設(shè)置2 個完全相同的W_reg,使得計算操作和權(quán)重數(shù)據(jù)的獲取操作乒乓同時進行,同時也降低了對W_buf 的帶寬需求。Conv_reg 用于獲取Fout_buf 中的中間結(jié)果或偏置數(shù)據(jù),與計算結(jié)果累加后寫回Fout_buf。

        圖8 乘-加法樹Fig.8 Multiplication-adder tree

        3 實驗及結(jié)果分析

        3.1 實驗環(huán)境

        為了驗證MCRP 結(jié)構(gòu)以及CNN 加速器架構(gòu)的設(shè)計合理性,采用XILINX的ZCU102開發(fā)板進行實驗驗證。ZCU102搭載的XCZU9EG 芯片為XILINX 的Zynq UltraScale+系列MPSoC,片上資源豐富,可基本滿足實驗要求。利用可編程邏輯(Programmable Logic,PL),即FPGA 部署CNN 加速器,通過輸入輸出通道并行度和卷積核內(nèi)并行度的大小,最大限度地利用片上的DSP 資源,具體超參數(shù)設(shè)置如表3 所示。處理系統(tǒng)(Processing System,PS)端的ARM-Cortex-A53 作為系統(tǒng)主控,通過AXI Lite 總線與CNN 加速器交互,控制其運行。此外,ARM 還用于CNN 算法的預(yù)處理、后處理、監(jiān)視CNN 加速器的運行狀態(tài)和性能等。

        本文以經(jīng)典的SSD-300[6]作為測試算法,因為SSD 算法在目標(biāo)檢測與識別領(lǐng)域應(yīng)用廣泛,且計算量巨大。SSD 算法的部分計算并不適合硬件加速,對其進行軟硬件劃分:主干網(wǎng)絡(luò)的CONV1~9 層、FC6~7 作為硬件加速部分,由CNN 加速器負責(zé);剩余的所有計算和處理作為軟件部分,由ARM 負責(zé)。硬件部分的參數(shù)量為183.48 Mb,每次前向推理的計算量為60.93 GOPS。因為訪問一次外存DRAM 所消耗的能耗是訪問一次片上SRAM 所消耗能量的128 倍以上[21],所以為了盡可能降低功耗,需將DDR 的讀寫次數(shù)降到最低,本文以SSD-300 所有層的輸入輸出特征、權(quán)重數(shù)據(jù)只從外部DDR 讀寫一次為目標(biāo),設(shè)置CNN 加速器的片上緩存(輸入特征緩存、權(quán)重數(shù)據(jù)緩存、輸出特征緩存)深度,具體如表3 所示。在這一條件下,CNN 加速器計算SSD 的硬件部分時的DDR 交互量達到最小,為460.60 Mb。換句話說,本文提出的CNN 加速器可根據(jù)CNN 算法的規(guī)模,靈活調(diào)整片上緩存大小,使得計算過程中DDR的交互量最小,整個加速器的功耗達到最低。

        表3 CNN加速器的超參數(shù)Tab.3 Hyperparameters of CNN accelerator

        實驗流程為:首先,對訓(xùn)練好的SSD 算法進行定點量化,將其權(quán)重和偏置量化為8 bit 的定點數(shù),并對量化后的參數(shù)根據(jù)CNN 加速器的要求進行重排序,生成.para 文件。然后,根據(jù)SSD 算法的網(wǎng)絡(luò)結(jié)構(gòu)(硬件部分)以及DDR 的內(nèi)存空間,編譯生成由自定義指令集組成的指令序列,得到.instruction 文件。在VIVADO 2019.1 中對CNN 加速器設(shè)計進行綜合、布局、布線后生成bit 文件。然后在XILINX 的SDK 2019.1 中進行相應(yīng)的軟件開發(fā),得到BOOT.bin 文件。最后,將.para 文件、.instruction 文件、BOOT.bin 文件一并下載到SD 卡中,ZCU102采用SD 卡啟動的模式,開啟實驗。實驗過程中,使用攝像頭不斷從外界采集圖像,ZCU102 通過UART 串口實時向上位機回傳檢測結(jié)果以及性能、功耗等參數(shù)。

        3.2 結(jié)果分析

        在250 MHz 的時鐘頻率下,PL 端的資源利用率如表4 所示??梢钥闯?,DSP 的利用率非常高,其中2 272 個用于PE 單元的乘-加法樹搭建,2個用于控制單元中的參數(shù)計算。由表3中的各類并行度超參數(shù)的大小可知,本加速器PE單元一共有4 608個乘法器,其中4 544個乘法器由DSP實現(xiàn),剩余的64個由查找表(Look Up Table,LUT)實現(xiàn),這是Vivado 為了布線方便、自動優(yōu)化的結(jié)果。DSP的利用量基本決定了CNN加速器的算力,DSP利用率越高,表明CNN加速器的架構(gòu)設(shè)計越合理,越能充分利用硬件平臺的片上計算資源。BRAM的利用率適中,表明本文以相對較小的片上緩存做到了DDR交互量最小。觸發(fā)器(Flip Flop,F(xiàn)F)和LUT 的資源利用率都沒有超過50%,表明此CNN 加速器架構(gòu)設(shè)計合理,不需要過多的邏輯資源便可實現(xiàn)加速器的完整功能,為片上部署其他加速算法和實現(xiàn)用戶自定義接口保留了充足的邏輯資源和片上存儲資源。

        表4 PL端的資源利用率Tab.4 Resource utilization on the PL side

        SSD-300 硬件部分各層的運行時間及硬件利用率等詳細信息如表5所示。在表3的宏參數(shù)設(shè)置下,CNN加速器的峰值算力為2 304.00 GOPS,計算SSD-300 時,實際算力為1 830.33 GOPS,硬件的平均利用率達到79.44%。從表5可以發(fā)現(xiàn),每層的工作負載越大,其硬件利用率越高,這是因為此加速器是專門針對較高算力需求場景而設(shè)計的。觀察發(fā)現(xiàn),fc-7、conv6-1、conv7-1、conv8-1、conv9-1 層的硬件利用率均低于9.5%,這是由于本CNN加速器是針對3× 3卷積設(shè)計的,對于1× 1 的卷積效率較低。但是在大部分較高算力應(yīng)用場景中,1× 1 的卷積在CNN 算法中的計算量占比很低(低于10%),因此,整個CNN 算法在本加速器中依然可以達到較高的硬件利用率,如SSD-300,可達到79.44%的硬件利用率。

        整個計算過程中,ARM 同步調(diào)用CNN 加速器,處理一張300×300 的RGB 圖像平均需要67.02 ms,其中PS 端的軟件部分平均耗時34.1 ms,PL 端的硬件部分平均耗時32.92 ms,軟硬件部分耗時基本相當(dāng)。在實際應(yīng)用中,可以讓ARM 異步調(diào)用CNN 加速器,使得軟硬件消耗時間重疊,總消耗時間變?yōu)檐?硬件部分耗時的最大值,以提高系統(tǒng)的整體性能。作為對照實驗,關(guān)閉PL端的CNN 加速器,只用ARM-Contex-A53單核處理一張300×300 的RGB 圖像平均需要172 792.2 ms。因此,與單核ARM 相比,CNN 加速器對SSD-300 算法的硬件部分的加速比為5 247.82。

        表6 列出了3 類基于FPGA 的CNN 加速器,為了方便比較,本文將其分別命名為加速器A[22]、加速器B[23]和加速器C[24]。加速器A、B 的目標(biāo)器件是XC7VX690T,其PL 端擁有3 600個DSP,比本文的目標(biāo)器件XCZU9EG 多出1 080個DSP,但加速器A、B的算力遠低于本文的加速器,主要有兩個原因:首先是它們的加速器架構(gòu)未充分利用PL 端的DSP 資源;其次是因為它們利用的數(shù)據(jù)類型位寬較寬,加速器A 的特征數(shù)據(jù)為16 bit 整型、權(quán)重數(shù)據(jù)為8 bit 整型(在表5 中表示為INT16/8),加速器B 的特征數(shù)據(jù)和權(quán)重數(shù)據(jù)均為16 bit 整型,均大于本文所采用的位寬。加速器C 所使用的器件為XCVU440,擁有2 880 個DSP,但其算力只有本文加速器的42.89%。比較發(fā)現(xiàn),本文提出的CNN加速器架構(gòu)可充分利用PL端的DSP資源,并能達到較高水平的算力。

        表5 SSD-300各層的計算性能對比Tab.5 Computing performance comparison of different layers of SSD-300

        表6 不同基于FPGA的CNN加速器的比較Tab.6 Comparison of different FPGA-based CNN accelerators

        4 結(jié)語

        本文在比較分析CNN 算法各類并行度的基礎(chǔ)上,提出了不同算力等級的CNN 加速器并行度選擇方案。為了簡潔有效地利用CNN 算法的卷積核內(nèi)并行,提出了多通道卷積旋轉(zhuǎn)寄存流水(MCRP)結(jié)構(gòu),此結(jié)構(gòu)在只增加少量邏輯和不增加片上緩存帶寬的條件下,可將CNN 加速器的并行度在只利用輸入輸出通道并行的基礎(chǔ)上提高9 倍。在MCRP 結(jié)構(gòu)的基礎(chǔ)上,本文選擇輸入輸出通道并行+卷積核內(nèi)并行的方案,提出了一種CNN 加速器架構(gòu)。此架構(gòu)的理論峰值算力可在保證硬件利用率的條件下輕松達到4 608 GOPS,能夠滿足嵌入式領(lǐng)域大部分應(yīng)用的算力需求。

        為了驗證本文CNN 加速器的設(shè)計合理性,將其部署到XILINX 的XCZU9EG 芯片上。在充分利用片上DSP 資源的條件下,CNN 加速器的峰值性能達到2 304.00 GOPS。以SSD-300為加速目標(biāo),硬件利用率達到80.96%,與單核ARM 相比,加速比達到5 283.1。與其他基于FPGA 的CNN 加速器相比,無論是峰值算力,還是實際的硬件利用率,都達到了較高水平,表明MCRP 結(jié)構(gòu)可有效提高CNN 加速器的算力。此加速器目前存在的不足之處在于,它對1× 1的卷積硬件利用率過低,在未來的研究中,將設(shè)法突破數(shù)據(jù)帶寬和數(shù)據(jù)流的限制,提高加速器對于1× 1卷積的硬件利用率。

        猜你喜歡
        算力加速器利用率
        輪滑加速器
        化學(xué)工業(yè)的“加速器”
        多方求解智能時代算力挑戰(zhàn)
        新華月報(2024年7期)2024-04-08 02:10:56
        這個第二不一般
        都市人(2023年11期)2024-01-12 05:55:06
        衛(wèi)星通信在算力網(wǎng)絡(luò)中的應(yīng)用研究
        中國電信董事長柯瑞文:算力成為數(shù)字經(jīng)濟的主要生產(chǎn)力
        全民小康路上的“加速器”
        少先隊活動(2021年6期)2021-07-22 08:44:24
        化肥利用率穩(wěn)步增長
        做好農(nóng)村土地流轉(zhuǎn) 提高土地利用率
        淺議如何提高涉煙信息的利用率
        亚洲一区二区三区综合免费在线| 91精品一区国产高清在线gif| 国产精品扒开腿做爽爽爽视频| 把女邻居弄到潮喷的性经历| 中文字幕av一区中文字幕天堂| 91av精品视频| 粉嫩av一区二区在线观看| 91精品福利一区二区三区| 淫秽在线中国国产视频| 久久老熟女乱色一区二区| 亚洲中文字幕高清在线视频一区 | 国产一区二区精品av| 五十路一区二区中文字幕| 亚洲一区二区三区色偷偷| 亚洲乱码中文字幕在线| 情人伊人久久综合亚洲| 国产成人精品999在线观看| 国产成年无码V片在线| 国产成人精品aaaa视频一区| 久久狠狠髙潮曰十八女人| 中文字幕av永久免费在线| 在线播放草猛免费视频| 国产成人亚洲精品无码青| 小荡货奶真大水真多紧视频| 久久成人麻豆午夜电影| 亚洲欧美日韩精品高清| 亚洲av性色精品国产| 亚洲av毛片在线网站| 免费av一区二区三区无码| 看全色黄大色大片免费久久| 99久久久国产精品免费蜜臀| 久久精品国产亚洲AⅤ无码剧情| 亚洲天堂av在线免费播放| 性无码免费一区二区三区在线| 日本少妇被黑人xxxxx| 午夜亚洲www湿好爽| 亚洲AⅤ无码日韩AV中文AV伦| 国产精品自在在线午夜出白浆| 日本国产一区二区在线| 国产成人无码一区二区三区| 午夜内射中出视频|