《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于脈動陣列的卷積計算模塊硬件設(shè)計
基于脈動陣列的卷積計算模塊硬件設(shè)計
2020年電子技術(shù)應(yīng)用第1期
王春林,譚克俊
大連海事大學(xué) 信息科學(xué)技術(shù)學(xué)院,遼寧 大連116026
摘要: 針對FPGA實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)中卷積計算的過程中,高并行度帶來長廣播、多扇入/扇出的數(shù)據(jù)通路問題,采用脈動陣列來實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)中卷積計算模塊,將權(quán)重固定到每個處理單元中,并按照輸入和輸出特征圖的維度來設(shè)置脈動陣列的大小,最后通過Vivado高層次綜合實現(xiàn)卷積計算模塊的硬件設(shè)計。實驗結(jié)果表明,本設(shè)計在實現(xiàn)1級流水化時序要求的同時,具有較低的資源占用和良好的擴(kuò)展性。
中圖分類號: TN402;TP391.41
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.191070
中文引用格式: 王春林,譚克俊. 基于脈動陣列的卷積計算模塊硬件設(shè)計[J].電子技術(shù)應(yīng)用,2020,46(1):57-61.
英文引用格式: Wang Chunlin,Tan Kejun. Hardware design of convolution calculation module based on systolic array[J]. Application of Electronic Technique,2020,46(1):57-61.
Hardware design of convolution calculation module based on systolic array
Wang Chunlin,Tan Kejun
Information Science and Technology College,Dalian Maritime University,Dalian 116026,China
Abstract: Aiming at the long broadcast, much fan in/fan out data path problem brought by high parullelism in the process of the Field Programmable Gate Array(FPGA) to realize the convolution computation in convolutional neural network, this paper adopts pulse array to realize convolution calculation module of convolutional neural network, fixes weights to each processing unit, according to the dimension of the input and output characteristic figure sets to pulse array size, and finally by Vivado high level synthesis realizes convolution calculation module hardware design. The experimental results show that the design has low resource occupancy and good expansibility while realizing the time-series requirements of level 1 pipelining.
Key words : FPGA;systolic array;convolution computation;high level synthesis

0 引言

    在過去的幾年里,深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)在圖像分類、目標(biāo)檢測[1]及圖像分割等領(lǐng)域起到十分重要的作用。這些使用的各種DNNs及其拓?fù)浣Y(jié)構(gòu)中,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是其中最為常見的實現(xiàn)方式。目前在硬件加速方案中,主要有基于CPU、GPU以及FPGA三種主流方案。考慮到 CPU性能限制和GPU功耗高的問題,采用FPGA來實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)成為了一種可行的實現(xiàn)方式,例如文獻(xiàn)[2]在FPGA中實現(xiàn)神經(jīng)網(wǎng)絡(luò)目標(biāo)檢測系統(tǒng),其檢測速度與能效均優(yōu)于CPU。采用傳統(tǒng)的Verilog HDL或者VHDL硬件描述語言實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)較為困難[3]高層次綜合(High Level Synthesis,HLS)將C/C++代碼通過特定的編譯器轉(zhuǎn)化為相應(yīng)的RTL級的代碼,降低了卷積神經(jīng)網(wǎng)絡(luò)的開發(fā)難度,減少了卷積神經(jīng)網(wǎng)絡(luò)的開發(fā)周期。

    使用FPGA實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)中卷積計算模塊的過程中,通常采用循環(huán)平鋪和循環(huán)展開[4]的方式實現(xiàn)。這種方式以擴(kuò)大并行度來達(dá)到網(wǎng)絡(luò)的時間復(fù)雜度。但是當(dāng)輸入和輸出特征圖維度增加時,擴(kuò)大并行度會帶來硬件設(shè)計中長廣播、多扇入/扇出的數(shù)據(jù)通路,導(dǎo)致卷積計算模塊無法在較高的主頻上運(yùn)行。因此,很多神經(jīng)網(wǎng)絡(luò)加速器都使用脈動陣列來優(yōu)化加速器架構(gòu)設(shè)計,如谷歌TPU加速器[5]、ShiDianNao加速器[6]等。而在這些加速器架構(gòu)設(shè)計中大多是采用im2col[7]的方式,即將參與卷積計算的輸入特征圖和權(quán)重展開為兩個矩陣,然后進(jìn)行矩陣乘法運(yùn)算。這種實現(xiàn)方式因為卷積步長的存在而產(chǎn)生大量的數(shù)據(jù)重疊,不利于在FPGA的片上塊存儲器(Block RAM,BRAM)內(nèi)進(jìn)行存儲。

    為了解決上述存在的問題,本文提出一種基于脈動陣列的卷積計算模塊設(shè)計,將由并行展開所帶來的長數(shù)據(jù)通路變?yōu)槊總€處理單元的短數(shù)據(jù)通路;并按照存儲矩陣的坐標(biāo)向卷積計算模塊中輸入特征圖數(shù)據(jù),以解決im2col方式存在的數(shù)據(jù)重疊,不利于BRAM存儲的問題。整體設(shè)計使用Vivado HLS開發(fā)環(huán)境進(jìn)行實現(xiàn)與優(yōu)化。

1 本文工作

1.1 脈動陣列實現(xiàn)卷積計算模塊

    脈動陣列(Systiloc Array)[8]是1970年KUNG H T[9]提出的一種應(yīng)用在片上多處理器的體系結(jié)構(gòu),由多個相同的、結(jié)構(gòu)簡單的計算單元(Processing Element,PE)以網(wǎng)格狀形式連接而成,具有并行性、規(guī)律性和局部通信的特征。信號處理算法如卡爾曼濾波[10]和數(shù)值線性代數(shù)算法都可以用脈動陣列來實現(xiàn)。本文卷積計算模塊中采用的脈動陣列實現(xiàn)方式如圖1所示。

wdz5-t1.gif

    在圖1中,I表示輸入特征圖,W表示權(quán)重參數(shù),O表示輸出特征圖,r、c分別表示特征圖的長和寬,m、n分別表示輸入特征圖與輸出特征圖的層數(shù)。在開始進(jìn)行卷積運(yùn)算之前,將特征圖數(shù)據(jù)輸入到BRAM中進(jìn)行緩存,將權(quán)重輸入到每個PE中進(jìn)行緩存。開始計算之后,輸入緩存中的數(shù)據(jù)沿脈動陣列的列方向進(jìn)行傳輸,PE計算的結(jié)果沿脈動陣列行方向進(jìn)行傳輸。非第0列的PE按照公式(1)進(jìn)行計算:

     wdz5-gs1.gif

式中PEin表示從輸入緩存或者上一個PE讀取輸入數(shù)據(jù),W表示PE緩存的權(quán)重數(shù)據(jù),PEout表示每個PE儲存的計算結(jié)果,cho與chi分別表示當(dāng)前PE的行列坐標(biāo)。第0列的PE只進(jìn)行乘法運(yùn)算。在每一行PE的末尾處連接一個result緩存,用來累加和存儲每行最后一個PE輸出的結(jié)果,并在完成一個卷積核運(yùn)算之后將存儲結(jié)果輸出到輸出緩存中。本文脈動陣列結(jié)構(gòu)設(shè)置為矩形脈動陣列,長和寬分別以輸入特征圖和輸出特征圖的層數(shù)來部署,并且每個PE在一個時鐘周期內(nèi)進(jìn)行一個乘法和加法運(yùn)算,根據(jù)這個條件可以得到所有PE完成計算所需要的時間計算公式:

    wdz5-gs2.gif

式中,Tsum表示完成所有輸出特征圖的計算所需要的時間,R、C分別表示輸出特征圖的長和寬,Cin、Cout分別表示輸入特征圖層數(shù)和輸出特征圖層數(shù),K表示卷積核的邊長,Tprc表示每個時鐘周期所需要的時間。如果R和C的大小設(shè)置為5,Cin和Cout分別設(shè)置為3和8,K設(shè)置為3,Tprc為10 ns,根據(jù)公式(2)可以得到理論上需要的時間為2 340 ns。

1.2 卷積計算模塊硬件設(shè)計

    根據(jù)1.1節(jié)中脈動陣列在卷積計算模塊中的實現(xiàn)方式,在Vivado HLS開發(fā)環(huán)境上對卷積計算模塊進(jìn)行設(shè)計。卷積計算模塊分為三個部分:輸入階段、計算階段和累加輸出階段。

    輸入階段的流程圖如圖2所示,圖中in(chi,ir,ic)表示BRAM存儲的輸入特征圖,ir、ic分別表示特征圖的長和寬。mid_in(cho,chi)和mid_out(cho,chi)分別表示每一個PE中的輸入和輸出緩存,CHI表示輸入特征圖的層數(shù),CHO表示輸出特征圖層數(shù),COUNT表示一個PE需要進(jìn)行卷積運(yùn)算的次數(shù)。chi、cho、loc表示三個變量,分別表示脈動陣列的列坐標(biāo)、行坐標(biāo)以及運(yùn)行計數(shù)。根據(jù)圖2中的運(yùn)行方式,每經(jīng)過一個時鐘周期,位于脈動陣列非0列的mid_in會從上一個相同行的mid_in中讀取輸入數(shù)據(jù)。位于脈動陣列的第0列的mid_in,會根據(jù)運(yùn)行狀態(tài)判斷是否需要從BRAM中讀取輸入特征圖數(shù)據(jù)。

wdz5-t2.gif

    計算階段的流程圖如圖3所示,其中weight(cho,chi,kr,kc)表示緩存到PE中權(quán)重參數(shù),kr、kc分別表示卷積核的列坐標(biāo)與行坐標(biāo)。當(dāng)輸入階段結(jié)束之后,進(jìn)入計算階段。位于脈動陣列非0排的mid_out會將mid_in中的數(shù)據(jù)與weight中的數(shù)據(jù)做乘法,再和上一個相同列的mid_out中的輸出數(shù)據(jù)做加法。位于脈動陣列第0排的mid_out則只做一次乘法。PE計算結(jié)果保存在當(dāng)前mid_out中。

wdz5-t3.gif

    累加輸出階段的流程圖如圖4所示,圖中out(cho,r,c)表示BRAM中輸出特征圖緩存,r、c分別表示輸出特征圖的列坐標(biāo)與行坐標(biāo)。result表示輸出緩存到BRAM之間的累加寄存器,用來將脈動陣列末尾行PE的結(jié)果進(jìn)行累加,k表示寄存器運(yùn)行的累加次數(shù)。當(dāng)一個卷積核運(yùn)算完成之后,將結(jié)果按照當(dāng)前的行列坐標(biāo)輸出到BRAM中的out緩存中,之后result寄存器清零,繼續(xù)下一次累加計算。

wdz5-t4.gif

    在這三個階段運(yùn)行過程中,希望在每一個時鐘周期內(nèi),當(dāng)前PE可以從外部或者相鄰的PE中讀取一個數(shù)據(jù)進(jìn)行乘加計算。因此使用#pragma HLS PIPELINE管道操作優(yōu)化指令,并設(shè)置流水為1級流水,保證每個時鐘內(nèi)都能夠開啟一次新的計算。在使用流水化操作之后,為了保證在輸入階段和計算階段的數(shù)據(jù)不會被覆蓋,采用移位寄存器的運(yùn)行方式,由末尾的PE開始依次從相鄰的上一個PE讀取數(shù)據(jù),新數(shù)據(jù)最后再進(jìn)行輸入。

    同時,因為采用將權(quán)重固定到PE中的計算模式,所以將In和Out以數(shù)組的形式存放到BRAM中。因為每個BRAM最大可配置的輸入輸出端口數(shù)為2,所以當(dāng)同時從BRAM中輸入輸出數(shù)量大于2時,就需要等待上一個操作結(jié)束之后,再執(zhí)行下一個操作,這樣就無法達(dá)到1級流水所需要的時間間隔。因此使用#pragma HLS ARRAY_PARTITION variable=<variable> complete dim=X指令,其中<variable>表示需要展開的數(shù)組名,X表示需要展開的數(shù)組維度,將in(chi,ir,ic)和out(cho,r,c)按照第一個維度展開成多個數(shù)組,來匹配脈動陣列的輸入與輸出。

2 實驗結(jié)果與分析

    本文在Vivado HLS 18.3開發(fā)環(huán)境上進(jìn)行綜合與仿真,使用的FPGA芯片型號為賽靈思公司的xc7z020clg484-1,運(yùn)行時鐘為100 MHz。使用輸入特征圖7×7大小的3層矩陣,得到的輸出特征圖為5×5的8層矩陣。卷積核采用8×3組大小為3×3的矩陣。單個PE的功能仿真波形如圖5所示。

wdz5-t5.gif

    其中,din0和din1分別表示輸入特征圖和權(quán)重數(shù)據(jù),din2表示從上一個相鄰PE中讀取的計算結(jié)果。dout表示乘加計算之后的結(jié)果,d0表示result寄存器中的輸入數(shù)據(jù),q0表示result寄存器的輸出數(shù)據(jù)。由于本文采用的時鐘頻率為100 MHz,每個時鐘周期為10 ns。從圖5中可以看出,當(dāng)ce0信號置1時,表示開始進(jìn)行運(yùn)算。之后在每一個時鐘周期內(nèi),都進(jìn)行一次乘加運(yùn)算,并將結(jié)果通過dout進(jìn)行輸出。因為采用1級流水優(yōu)化指令,dout輸出的結(jié)果將會在下一個時鐘周期輸出到d0。然后進(jìn)行累加操作。當(dāng)完成3×3次加法運(yùn)算,輸出標(biāo)志位we0信號置1,然后result寄存器將當(dāng)前的d0結(jié)果按照address0的地址通過q0輸出到指定BRAM上的輸出緩存中。然后d0清零,等待下一次計算開始。

    卷積計算模塊的輸出波形如圖6所示。從圖中可以看出,在ap_start使能信號置1之后,經(jīng)過17個時鐘周期得到輸出結(jié)果。從開始輸出結(jié)果,到輸出完成,一共經(jīng)過234個時鐘周期,也就是2 340 ns,與公式(2)中計算結(jié)果相同。

wdz5-t6.gif

    卷積計算模塊的總體時延如表1所示,從表中可以看出,每次計算PE需要17個時鐘周期才能夠得到結(jié)果。在使用了流水化操作,并且達(dá)到了1級流水的目標(biāo)之后,每個時鐘周期都會開啟一個新的循環(huán),PE無需等待到計算出結(jié)果就可以進(jìn)行下一個循環(huán)。與圖6中的波形結(jié)果相同。

wdz5-b1.gif

    表2所示為卷積計算模塊的總體資源消耗,卷積計算的核心就是乘法運(yùn)算。賽靈思xc7z020clg484-1型FPGA芯片內(nèi)置了DSP48核,可同時進(jìn)行一組乘法和加法運(yùn)算。根據(jù)卷積模塊的設(shè)計,每一個PE使用一個DPS48核進(jìn)行乘加計算。在CHI為3,CHO為8的情況下,一共需要24個DPS48核,與表中使用資源情況相符。觸發(fā)器和查找表資源使用也較少,為之后擴(kuò)大卷積計算模塊和設(shè)計卷積神經(jīng)網(wǎng)絡(luò)其余模塊預(yù)留了充足的資源。

wdz5-b2.gif

3 結(jié)論

    卷積神經(jīng)網(wǎng)絡(luò)中存在著大量的卷積計算,本文在資源使用情況較少的情況下,基于脈動陣列的運(yùn)行方式,對并行展開的卷積計算模塊進(jìn)行改進(jìn),然后通過Vivado HLS在賽靈思xc7z020clg484-1型FPGA芯片上進(jìn)行實現(xiàn)。在后續(xù)的研究中,可以將脈動陣列與循環(huán)展開和循環(huán)平鋪等并行展開方式相結(jié)合,從提高運(yùn)行速度與降低使用資源上進(jìn)一步提升卷積計算模塊的性能。

參考文獻(xiàn)

[1] 張杰,隋陽,李強(qiáng),等.基于卷積神經(jīng)網(wǎng)絡(luò)的火災(zāi)視頻圖像檢測[J].電子技術(shù)應(yīng)用,2019,45(4):34-38,44.

[2] 陳辰,嚴(yán)偉,夏珺,等.基于FPGA的深度學(xué)習(xí)目標(biāo)檢測系統(tǒng)的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2019,45(8):40-43,47.

[3] Zhang Xiaofan,Wang Junson,Zhu Chao,et al.DNN-Builder:an automated tool for building high-performance DNN hardware accelerators for FPGAs[C].Proceedings of the International Conference on Computer-Aided Design.ACM,2018.

[4] Zhang Chen,Li Peng,Sun Guangyu,et al.Optimizing fpga-based accelerator design for deep convolutional neural networks[C]. Proceedings of the 2015 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays.ACM,2015.

[5] JOUPPI N P,YOUNG C,PATIL N,et al.In-datacenter performance analysis of a tensor processing unit[C].2017 ACM/IEEE 44th Annual International Symposium on Computer Architecture(ISCA).IEEE,2017.

[6] Chen Tianshi,Du Zidong,Sun Ninghui,et al.Diannao:a small-footprint high-throughput accelerator for ubiquitous machine-learning[C].ACM Sigplan Notices.ACM,2014:269-284.

[7] HU Y H,KUNG S Y.Systolic arrays.in:handbook of signal processing systems[M].Springer,Cham,2019:939-977.

[8] SANAULLAH A,HERBORDT M C.Unlocking performance-programmability by penetrating the Intel FPGA OpenCL Toolflow[C]. 2018 IEEE High Performance Extreme Computing Conference(HPEC).IEEE,2018.

[9] KUNG H T,LEISERSON C E.Systolic arrays(for VLSI)[C].Sparse Matrix Proceedings 1978,Society for Industrial and Applied Mathematics,1979.

[10] 王陽,陶華敏,肖山竹,等.基于脈動陣列的矩陣乘法器硬件加速技術(shù)研究[J].微電子學(xué)與計算機(jī),2015,32(11):120-124.



作者信息:

王春林,譚克俊

(大連海事大學(xué) 信息科學(xué)技術(shù)學(xué)院,遼寧 大連116026)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 久久6这里只有精品| 三年片在线观看免费观看大全中国| 男人天堂视频网| 国产壮汉男同志69可播放| aaa日本高清在线播放免费观看| 日本媚薬痉挛在线观看免费| 国产精品久久久久久久久电影网| 中文字幕一级片| 杨晨晨白丝mm131| 国产三级在线免费观看| hd日本扒衣党视频播放| 日韩欧美一区二区三区免费看| 人妻互换一二三区激情视频| 草草影院地址ccyycom浮力影院37| 好男人社区视频| 久久棈精品久久久久久噜噜| 精品一区二区视频在线观看| 国产女同在线观看| 91网站网址最新| 情侣视频精品免费的国产| 久久青草免费91观看| 欲惑美妇老师泛滥春情在线播放| 啊灬啊灬啊灬快灬别进去| 天天操天天干天天透| 外国女性用一对父子精液生子引争议 | 女人被躁到高潮嗷嗷叫游戏| 亚洲成a人片毛片在线| 西西人体大胆免费视频| 国产精品亚洲精品日韩已满| eeuss影影院www在线播放| 无码人妻精品一二三区免费| 亚洲av一本岛在线播放| 欧美黑人又粗又大久久久| 国产亚洲综合色就色| a级日本理论片在线播放| 无码喷水一区二区浪潮AV| 亚洲AV永久无码精品表情包 | 特黄特色大片免费播放| 区二区三区四区免费视频| 动漫成年美女黄漫网站国产| 天天操天天干天天舔|