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

        ?

        多數(shù)據(jù)流并行卷積運算加速引擎研究與設(shè)計

        2020-12-28 06:38:22馬佳利朱智強戴樂育郭松輝向建安
        計算機工程與設(shè)計 2020年12期
        關(guān)鍵詞:引擎方法設(shè)計

        馬佳利,朱智強,戴樂育,郭松輝,向建安

        (1.信息工程大學(xué) 密碼工程學(xué)院,河南 鄭州 450001;2.95010部隊,廣東 汕頭 515000)

        0 引 言

        計算資源是卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)[1-3]得到發(fā)展和應(yīng)用的基礎(chǔ)。但是,隨著研究的不斷深入,CNN在其分類精度不斷提升的同時還引進了一些問題,網(wǎng)絡(luò)的拓撲結(jié)構(gòu)日趨復(fù)雜,算法的運算量和參數(shù)量也有所增加,這些規(guī)模較大的模型正變得難以處理[4]。與此同時,半導(dǎo)體器件的發(fā)展卻逐漸變慢,傳統(tǒng)的CPU運算能力的提升速度跟不上神經(jīng)網(wǎng)絡(luò)參數(shù)膨脹的速度。為了更好地應(yīng)用CNN,需要性能更佳的加速器件。

        使用GPU進行CNN的運算是目前廣泛采用的一種加速方法。GPU當中存在大量并行計算資源,將CNN中的各部分運算適配到這些計算核中并行處理,可以實現(xiàn)運算加速。但是,GPU作為一種通用處理器,并不是為卷積神經(jīng)網(wǎng)絡(luò)專門設(shè)計的,因此沒有考慮到當前CNN運算過程中的一些特性,例如低精度運算和稀疏性[5],這將導(dǎo)致運算加速的不充分。

        為進一步提高CNN的運算速度,更好的方法是定制專用加速器。這種方法基本思想是讓器件“適應(yīng)”CNN,因此需要根據(jù)CNN各部分的運算特點,設(shè)計專門的電路,以完成網(wǎng)絡(luò)各部分的運算與控制??紤]到卷積運算通常占CNN運算總量的90%以上[6],有效的卷積加速方案顯著影響硬件CNN加速器的性能,需要重點研究卷積運算的加速。本文通過分析卷積運算的特點和運算中數(shù)據(jù)傳輸?shù)倪^程,設(shè)計了多數(shù)據(jù)流并行卷積運算加速引擎,與已有方案相比,實現(xiàn)了運算速度的提升和邏輯資源的減少。

        1 卷積運算硬件加速研究

        CNN的結(jié)構(gòu)主要包括卷積層、池化層和全連接層。其中卷積層是CNN中特有的運算層,是網(wǎng)絡(luò)具有良好分類效果的基礎(chǔ),還是網(wǎng)絡(luò)運算中耗時最多的部分。卷積層的運算包括卷積運算和激活函數(shù)運算。卷積運算涉及多層嵌套循環(huán),運算復(fù)雜且耗時多,是卷積層最重要的環(huán)節(jié);激活函數(shù)當前大多使用ReLU函數(shù),實現(xiàn)較為簡單。因此對CNN加速器研究的重點是卷積運算的加速,需要對卷積運算進行研究分析。

        卷積運算的計算方式和偽代碼表示如圖1所示,卷積核在輸入特征圖上從左向右、從上到下按照設(shè)定的步長S進行滑動,每次滑動完成一次Nkx×Nky乘累加運算,得到的結(jié)果作為輸出特征圖的一個像素值??梢钥吹?,卷積運算中存在大量并行運算,如何利用并行性是實現(xiàn)運算加速的重點。由于當前主流的CNN中存在大量步長為一的3×3卷積運算,本文針對S=1,Nkx=3,Nky=3的卷積運算進行加速。

        圖1 卷積運算計算方式及偽代碼表示

        目前,卷積運算的硬件加速方法存在兩種思路,一種是運算轉(zhuǎn)換,一種是流水線卷積。

        運算轉(zhuǎn)換的目的是將卷積運算轉(zhuǎn)換為適合硬件實現(xiàn)的或算法復(fù)雜度較低的其它運算。最常見的運算轉(zhuǎn)換方法是將卷積運算轉(zhuǎn)換為矩陣乘法[7],矩陣乘法的硬件實現(xiàn)方式簡單,有利于簡化電路設(shè)計。除此之外,一些研究團隊從降低算法復(fù)雜度的角度出發(fā),提出了快速傅里葉變換[8]和Winograd轉(zhuǎn)換[9]的方法,在特定的卷積核尺寸情況下,這兩種轉(zhuǎn)換可以減少計算量。但是,運算轉(zhuǎn)換的方法需要設(shè)計專門的轉(zhuǎn)換電路,消耗了更多的邏輯資源,而且在運算過程中還需要消耗一定時間進行轉(zhuǎn)換。

        根據(jù)卷積運算特有的運算模式,一些研究學(xué)者提出了流水線并行加速方法[10]。這種方法通過在電路中設(shè)計一組移位寄存器,構(gòu)造了卷積運算的滑動窗口。寄存器中的值每更新一次相當于滑動窗口向右移動一次,取滑動窗口的數(shù)據(jù)與卷積核數(shù)據(jù)進行乘累加運算,得到卷積運算的結(jié)果。流水線并行加速方法如圖2所示。

        圖2 流水線并行加速方法

        流水線并行加速方法充分考慮了卷積運算特點,設(shè)計了卷積運算專用電路,每個時鐘周期完成9次乘法運算,運算效率高;此外,這種方法數(shù)據(jù)路由方式簡單,只需將輸入特征圖的值逐行依次輸入到移位寄存器中即可,簡化了控制電路的設(shè)計;與運算轉(zhuǎn)換方法相比,這種方法不需要設(shè)計相應(yīng)的轉(zhuǎn)換電路,也不存在進行數(shù)據(jù)格式轉(zhuǎn)換的時間。但是,這種方法仍存在一些不足,主要包括3個方面:

        (1)電路設(shè)計中需要大量寄存器用于構(gòu)造滑動窗口,但其中大部分寄存器沒有參與運算;

        (2)為了充滿流水線,電路運行過程中需要進行較長時間的數(shù)據(jù)輸入,期間無法進行運算;

        (3)這種方法只對固定尺寸的輸入特征圖有加速效果,當尺寸大小發(fā)生改變時,輸出異常。

        針對上述流水線并行加速方法中存在的問題,本文提出了一種多數(shù)據(jù)流并行卷積運算方法,并設(shè)計了相應(yīng)的加速引擎。在FPGA中進行設(shè)計驗證,通過對比實驗得出,多數(shù)據(jù)流并行卷積運算加速引擎采用多數(shù)據(jù)流并行輸入的方法有效減少了設(shè)計所需的寄存器數(shù)量,提高了卷積運算的速度,得到了良好的應(yīng)用效果。

        2 加速引擎研究與設(shè)計

        2.1 多數(shù)據(jù)流并行卷積運算方法

        流水線并行加速方法的設(shè)計中需要大量寄存器,用來存儲已經(jīng)輸入但還沒有參與運算的像素值,導(dǎo)致大量寄存器資源的浪費以及充滿流水線帶來的時延。為了解決這種方法帶來的問題,本文提出了一種多數(shù)據(jù)流并行卷積運算方法,將輸入特征圖的3行數(shù)據(jù)同時輸入,輸入數(shù)據(jù)即為參與運算的數(shù)據(jù),減少了用于存儲尚未參與運算的像素值所需寄存器的數(shù)量,同時加快了從數(shù)據(jù)輸入到開始運算的過程。這種方法的運算如圖3所示。

        圖3 多數(shù)據(jù)流卷積運算

        多數(shù)據(jù)流并行卷積運算方法中數(shù)據(jù)流一共包括3條,分別來自輸入特征圖前3行,按照由左至右、由上至下的順序依次輸入。輸入的像素值將會存儲在3組長度為3的移位寄存器中,構(gòu)成卷積運算中的滑動窗口。當移位寄存器被充滿后開始進行運算,取滑動窗口數(shù)據(jù)與卷積核數(shù)據(jù)進行乘累加運算,得到卷積運算的一個輸出。

        多數(shù)據(jù)流并行卷積運算方法中輸入數(shù)據(jù)即為直接參與運算的數(shù)據(jù),不需要額外的寄存器存儲等待運算的數(shù)據(jù),因此可以顯著減少設(shè)計中所需寄存器數(shù)量。數(shù)據(jù)流開始輸入到運算開始只需要充滿長度為3的移位寄存器,卷積運算從數(shù)據(jù)輸入到運算結(jié)束所需的時間有所減少。此外,多數(shù)據(jù)流并行卷積運算方法相比流水線并行加速的方法更具靈活性,對于輸入特征圖的尺寸沒有限制,對于任意3×3卷積運算均可以實現(xiàn)加速,因此在CNN中不同卷積層可以實現(xiàn)復(fù)用,有益于提高CNN加速器的整體性能。

        2.2 加速引擎電路設(shè)計

        基于上述方法,本節(jié)設(shè)計了多數(shù)據(jù)流并行卷積運算加速引擎。加速引擎共包括3部分,數(shù)據(jù)流輸入電路、運算電路和輸出控制電路。考慮卷積神經(jīng)網(wǎng)絡(luò)精度需要以及邏輯資源的限制,像素值位寬選取為16位,權(quán)重值位寬選取為8位。加速引擎整體框架如圖4所示。

        圖4 加速引擎整體框架

        2.2.1 數(shù)據(jù)流輸入電路設(shè)計

        數(shù)據(jù)流輸入電路的功能是將輸入特征圖的像素值傳輸?shù)竭\算單元中。像素值數(shù)據(jù)存儲在RAM中,由于RAM只有一個輸出端口,不能實現(xiàn)輸入特征圖3行像素值同時輸出。本文在輸入電路部分設(shè)計了一個數(shù)據(jù)引導(dǎo)控制器,并通過sel[1∶0]信號對電路進行控制,實現(xiàn)了多個數(shù)據(jù)流同時輸出的功能。數(shù)據(jù)流輸入部分的電路設(shè)計如圖5所示。

        圖5 數(shù)據(jù)流輸入電路

        數(shù)據(jù)流輸入電路的輸入信號為基地址信息address[9∶0]和控制信號sel[1∶0],它們經(jīng)過一個地址譯碼電路得到RAM的實際讀地址,用于輸出不同行的像素值。實際上,sel[1∶0]信號為00時輸出的是第一行的數(shù)據(jù),此時讀地址即為基地址;sel[1∶0]信號為01時輸出第二行的數(shù)據(jù),讀地址為基地址加上存儲一整行像素值所需要的地址空間;sel[1∶0]信號為10時輸出第三行的數(shù)據(jù),讀地址為基地址加上存儲兩行像素值所需要的地址空間;sel[1∶0]信號為11時,RAM不輸出,讀使能信號rd置為零。

        數(shù)據(jù)引導(dǎo)控制器的作用是將RAM輸出的不同行數(shù)據(jù)傳輸?shù)秸_的位置,它同樣受到sel[1∶0]信號的控制,將數(shù)據(jù)路由到3個不同的FIFO中。具體說來,sel[1∶0]信號取00、01和10時,分別對應(yīng)于輸出到FIFO1、FIFO2、FIFO3;sel[1∶0]信號取11時,數(shù)據(jù)引導(dǎo)控制器不輸出。數(shù)據(jù)引導(dǎo)控制器4種狀態(tài)交替出現(xiàn),設(shè)定讀位寬為64位(4個像素值的位寬),則RAM根據(jù)地址每次讀取連續(xù)4個像素值,就可以實現(xiàn)各個FIFO平均每個周期寫入一個像素值。

        3個FIFO分別接收來自數(shù)據(jù)引導(dǎo)控制器3行像素值,由于3行數(shù)據(jù)需要同時輸出,因此要判斷3個FIFO均為非空才能開始輸出,F(xiàn)IFO的讀信號由empty信號控制,如圖6所示。FIFO的讀寫位寬設(shè)置為16位,與像素值位寬相等。在電路運行過程中,F(xiàn)IFO中最多可能存儲7個像素值,即FIFO1在其開始接受數(shù)據(jù)后第5個時鐘周期,為了保證FIFO不溢出,F(xiàn)IFO的深度設(shè)置為8。FIFO開始接收數(shù)據(jù)之后,其中至少存在一個像素值,empty信號一直為0,F(xiàn)IFO不斷輸出數(shù)據(jù),在電路運行過程中不存在等待時間。

        圖6 FIFO輸出控制電路

        2.2.2 運算電路與輸出控制電路設(shè)計

        運算電路接收來自數(shù)據(jù)流輸入電路的3行像素值,并將其存儲在3組移位寄存器中,當這些寄存器都充滿數(shù)據(jù),開始進行運算。取移位寄存器的數(shù)據(jù)與已經(jīng)讀取的卷積核數(shù)據(jù)進行乘累加運算,得到卷積運算輸出。運算電路的整體結(jié)構(gòu)如圖7所示。

        圖7 卷積運算電路

        值得注意的是,卷積窗口在移動到輸入特征圖行尾時會產(chǎn)生跨行輸入,如圖8所示,其中陰影部分表示卷積窗口的位置??缧衅陂g得到的運算結(jié)果需要忽略。

        圖8 卷積窗口跨行

        本文在運算電路部分設(shè)計了一個輸出控制電路,用于屏蔽卷積窗口跨行時產(chǎn)生的輸出,當卷積窗口跨行時控制運算單元的輸出結(jié)果不寫到RAM中,輸出屏蔽模塊電路如圖9所示。

        圖9 輸出屏蔽電路

        輸出屏蔽電路由計數(shù)器和比較器組成,當運算單元開始輸出時計數(shù)器開始計數(shù),之后每輸出一個結(jié)果計數(shù)器值加一,當計數(shù)器值為輸入特征圖的行素數(shù)減二時,卷積窗口發(fā)生跨行,此時屏蔽運算單元的輸出結(jié)果;當計數(shù)器值為輸入特征圖的行素數(shù)時,卷積窗口跨行結(jié)束,不再屏蔽輸出,同時計數(shù)器值清零,重新開始計數(shù)。

        3 實驗驗證與分析

        為了驗證設(shè)計的性能,實驗使用FPGA實現(xiàn)多數(shù)據(jù)流并行卷積運算加速引擎,以Altera公司的Stratix IV系列EP4SGX70DF29C3 FPGA芯片作為主要硬件環(huán)境,在Qua-rtus II下完成設(shè)計的仿真和分析,以此來驗證本設(shè)計的正確性與高效性。

        3.1 功能仿真

        為驗證所設(shè)計的加速引擎功能正確,利用ModelSim軟件進行功能仿真,設(shè)置一組便于觀測的數(shù)據(jù),如圖10所示。

        圖10 輸入特征圖數(shù)據(jù)(左)和卷積核數(shù)據(jù)(右)

        對于這一組數(shù)據(jù),仿真波形如圖11所示。其中A1、A2、A3分別代表數(shù)據(jù)流輸入電路生成的3行像素值,與輸入特征圖前3行的輸入一致;add_temp5 代表經(jīng)過乘累加運算得到的結(jié)果,包括滑動窗口跨行時產(chǎn)生結(jié)果;result代表卷積運算的結(jié)果,屏蔽了跨行時的輸出結(jié)果。通過仿真波形圖,可以得到本文設(shè)計的卷積運算加速引擎運行正確。

        圖11 仿真波形

        3.2 性能分析

        為了更好地描述多數(shù)據(jù)流并行卷積運算加速引擎的性能,本文與已有方案設(shè)計[10]進行了對比實驗,通過控制變量的方法,得到本設(shè)計在相同類型卷積運算中的資源使用情況以及運算速度。實驗中使用的輸入特征圖尺寸為32×32。

        在資源使用方面,在Quartus II開發(fā)平臺上完成加速引擎的設(shè)計,得到資源消耗情況見表1。

        表1 資源使用情況

        由表1可以看出多數(shù)據(jù)流并行卷積運算加速引擎的設(shè)計所消耗邏輯資源數(shù)較少,因此在此FPGA中最多可以使用5個加速引擎同時對卷積運算進行加速,提高運算的并行度。與文獻[10]中的設(shè)計相比,該設(shè)計所需寄存器數(shù)量減少了30.6%,查找表數(shù)減少了10.3%,達到了節(jié)約了邏輯資源的效果。

        在運算速度方面,實驗中設(shè)置了與文獻[10]中設(shè)計相同的時鐘頻率(50 MHz),得到完成相同的運算(卷積運算+激活函數(shù)+池化運算)所需時間。由于本文僅對卷積運算設(shè)計了加速引擎,為達到控制變量的效果,完成全部運算的時間等于本設(shè)計中完成卷積運算的時間加上設(shè)計文獻[10]中完成激活函數(shù)以及池化運算所需時間。得到不同加速方案完成同一運算所需時間,見表2。

        表2 電路運行速度

        由表2可以看出,與CPU或GPU解決方案相比,設(shè)計專用加速器的方法能夠顯著提高CNN的運算速度。與流水線并行加速方案相比,本設(shè)計由于縮短數(shù)據(jù)流輸入所需時間,整體運算速度提高了7.37%。

        4 結(jié)束語

        CNN的運算過程中卷積運算耗時最長,為提高CNN的運行效率,需要對卷積運算進行加速。本文分析卷積運算的運算模式和數(shù)據(jù)路由方式,提出了一種多數(shù)據(jù)流卷積運算方法,并基于這種方法設(shè)計了加速引擎。在FPGA上完成了該加速引擎的設(shè)計,通過功能仿真驗證該設(shè)計的正確性,仿真波形圖表明運算輸出正確。與已有設(shè)計進行了對比實驗,對于相同形式的卷積運算,該設(shè)計需要的寄存器資源減少了30.6%,對于相同的運算量,速度提高了7.37%,該加速引擎的設(shè)計能夠有效地加速卷積運算。

        猜你喜歡
        引擎方法設(shè)計
        瞞天過?!律O(shè)計萌到家
        藍谷: “涉藍”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        設(shè)計秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        可能是方法不對
        用對方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        捕魚
        基于Cocos2d引擎的PuzzleGame開發(fā)
        国产国拍亚洲精品午夜不卡17| 特级做a爰片毛片免费看| 日韩十八禁在线观看视频| 亚洲天堂一二三四区在线 | 天堂а√在线最新版中文| 一国产区在线观看| 白白色免费视频一区二区| 中国老太老肥熟女视频| 午夜视频手机在线免费观看| 李白姓白白又白类似的套路 | 成人区人妻精品一区二区三区| 国产午夜在线视频观看| 无套中出丰满人妻无码| 无码乱人伦一区二区亚洲一 | 国产精品久久久久久久y| 国产精品久久中文字幕亚洲| 国产午夜精品视频观看| 国产一品二品三品精品在线| 国内精品久久久久久久97牛牛| 亚洲精品久久久久avwww潮水| 亚洲人成77777在线播放网站| 私人毛片免费高清影视院| 久久综合精品国产丝袜长腿| 草莓视频一区二区精品| 亚洲大尺度动作在线观看一区| 亚洲精品国产主播一区二区| 黄网站a毛片免费观看久久| 亚洲精品第一页在线观看 | 少妇人妻精品一区二区三区视 | 99精品国产一区二区三区不卡 | 国产成人综合一区二区三区| 亚洲日本在线va中文字幕| 精品国产色哟av一区二区三区| 蜜桃视频一区二区三区四| 精品亚洲a∨无码一区二区三区| 亚洲女同一区二区| 亚洲av日韩av综合| 精品一区二区av天堂| 国产成年女人特黄特色毛片免| 日本免费一区二区精品| 国产午夜免费高清久久影院|