《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于脈動(dòng)陣列的卷積計(jì)算模塊硬件設(shè)計(jì)
基于脈動(dòng)陣列的卷積計(jì)算模塊硬件設(shè)計(jì)
2020年電子技術(shù)應(yīng)用第1期
王春林,譚克俊
大連海事大學(xué) 信息科學(xué)技術(shù)學(xué)院,遼寧 大連116026
摘要: 針對(duì)FPGA實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)中卷積計(jì)算的過程中,高并行度帶來長廣播、多扇入/扇出的數(shù)據(jù)通路問題,采用脈動(dòng)陣列來實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)中卷積計(jì)算模塊,將權(quán)重固定到每個(gè)處理單元中,并按照輸入和輸出特征圖的維度來設(shè)置脈動(dòng)陣列的大小,最后通過Vivado高層次綜合實(shí)現(xiàn)卷積計(jì)算模塊的硬件設(shè)計(jì)。實(shí)驗(yàn)結(jié)果表明,本設(shè)計(jì)在實(shí)現(xiàn)1級(jí)流水化時(shí)序要求的同時(shí),具有較低的資源占用和良好的擴(kuò)展性。
中圖分類號(hào): TN402;TP391.41
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.191070
中文引用格式: 王春林,譚克俊. 基于脈動(dòng)陣列的卷積計(jì)算模塊硬件設(shè)計(jì)[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)是其中最為常見的實(shí)現(xiàn)方式。目前在硬件加速方案中,主要有基于CPU、GPU以及FPGA三種主流方案。考慮到 CPU性能限制和GPU功耗高的問題,采用FPGA來實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)成為了一種可行的實(shí)現(xiàn)方式,例如文獻(xiàn)[2]在FPGA中實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)目標(biāo)檢測系統(tǒng),其檢測速度與能效均優(yōu)于CPU。采用傳統(tǒng)的Verilog HDL或者VHDL硬件描述語言實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)較為困難[3],高層次綜合(High Level Synthesis,HLS)將C/C++代碼通過特定的編譯器轉(zhuǎn)化為相應(yīng)的RTL級(jí)的代碼,降低了卷積神經(jīng)網(wǎng)絡(luò)的開發(fā)難度,減少了卷積神經(jīng)網(wǎng)絡(luò)的開發(fā)周期。

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

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

1 本文工作

1.1 脈動(dòng)陣列實(shí)現(xiàn)卷積計(jì)算模塊

    脈動(dòng)陣列(Systiloc Array)[8]是1970年KUNG H T[9]提出的一種應(yīng)用在片上多處理器的體系結(jié)構(gòu),由多個(gè)相同的、結(jié)構(gòu)簡單的計(jì)算單元(Processing Element,PE)以網(wǎng)格狀形式連接而成,具有并行性、規(guī)律性和局部通信的特征。信號(hào)處理算法如卡爾曼濾波[10]和數(shù)值線性代數(shù)算法都可以用脈動(dòng)陣列來實(shí)現(xiàn)。本文卷積計(jì)算模塊中采用的脈動(dòng)陣列實(shí)現(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)重輸入到每個(gè)PE中進(jìn)行緩存。開始計(jì)算之后,輸入緩存中的數(shù)據(jù)沿脈動(dòng)陣列的列方向進(jìn)行傳輸,PE計(jì)算的結(jié)果沿脈動(dòng)陣列行方向進(jìn)行傳輸。非第0列的PE按照公式(1)進(jìn)行計(jì)算:

     wdz5-gs1.gif

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

    wdz5-gs2.gif

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

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

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

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

wdz5-t2.gif

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

wdz5-t3.gif

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

wdz5-t4.gif

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

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

2 實(shí)驗(yàn)結(jié)果與分析

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

wdz5-t5.gif

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

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

wdz5-t6.gif

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

wdz5-b1.gif

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

wdz5-b2.gif

3 結(jié)論

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

參考文獻(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è)計(jì)與實(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] 王陽,陶華敏,肖山竹,等.基于脈動(dòng)陣列的矩陣乘法器硬件加速技術(shù)研究[J].微電子學(xué)與計(jì)算機(jī),2015,32(11):120-124.



作者信息:

王春林,譚克俊

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。