• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于TVM平臺的MEC卷積算法優(yōu)化

      2023-01-13 11:58:10王朝聞李遠(yuǎn)成
      關(guān)鍵詞:內(nèi)存運(yùn)算卷積

      王朝聞,蔣 林,李遠(yuǎn)成,朱 筠

      1.西安科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,西安 710600

      2.西安郵電大學(xué) 電子工程學(xué)院,西安 710121

      近年來,隨著深度學(xué)習(xí)的快速發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)[1]在計(jì)算機(jī)視覺[2]、計(jì)算機(jī)圖形學(xué)[3]等傳統(tǒng)領(lǐng)域都取得了很大的突破,并且逐漸應(yīng)用到其他領(lǐng)域,例如自動駕駛、風(fēng)險(xiǎn)評估等。卷積神經(jīng)網(wǎng)絡(luò)通常由卷積層、池化層、激活層和全連接層等網(wǎng)絡(luò)層組成[4],其中卷積層的計(jì)算性能幾乎決定整個卷積神經(jīng)網(wǎng)絡(luò)的性能。以ResNet18[5]為例其網(wǎng)絡(luò)結(jié)構(gòu)包含17個卷積層和1個全連接層。因此,針對卷積層計(jì)算速度進(jìn)行優(yōu)化具有重要意義。

      當(dāng)前,影響卷積層計(jì)算速度的主要因素有處理速度和內(nèi)存占用效率,學(xué)者們主要從這兩方面對卷積算法展開研究。在處理速度方面,主要的卷積計(jì)算方法有Im2col+GEMM[6]。Im2col+GEMM將輸入矩陣轉(zhuǎn)換成多個列向量,并重組為中間矩陣,隨后調(diào)用BLAS中高度優(yōu)化的GEMM方法進(jìn)行矩陣乘法運(yùn)算。該方法的優(yōu)點(diǎn)在于把卷積計(jì)算轉(zhuǎn)換為矩陣乘法,并利用高度優(yōu)化的GEMM方法對其進(jìn)行加速;但是,該方法產(chǎn)生的中間矩陣內(nèi)存占用效率低。為了解決這個問題,學(xué)者們在內(nèi)存占用效率方面提出了新的卷積算法。文獻(xiàn)[7]基于Im2col算法提出了卷積算法MEC(memory efficient convolution)。該算法將輸入矩陣轉(zhuǎn)換成的多個列向量按行高這一維度進(jìn)行展開后,再重組為中間矩陣,然后,將中間矩陣劃分成小矩陣同卷積核進(jìn)行矩陣乘法運(yùn)算。同Im2col相比,MEC算法大幅降低了內(nèi)存占用。但是,MEC算法因?yàn)榉侄尉仃嚨刂凡粚R[8],訪問的數(shù)據(jù)地址不連續(xù),導(dǎo)致其矩陣存儲不符合神經(jīng)網(wǎng)絡(luò)使用的以行主序進(jìn)行存儲的編程語言存儲方式,致使MEC算法存在cache命中率低,內(nèi)存訪問延時(shí)長的問題。

      針對上述問題,本文提出一種針對MEC的優(yōu)化算法。首先,該方法將MEC算法中原有的列優(yōu)先數(shù)據(jù)訪問方式改進(jìn)為行優(yōu)先訪問方式。其次,修改卷積核矩陣的數(shù)據(jù)排列方式,減少訪問數(shù)據(jù)的時(shí)間。最后,利用線程庫對算法并行加速,有效提高了運(yùn)算速度。實(shí)驗(yàn)結(jié)果表明,相較于MEC算法,本文提出的優(yōu)化算法在單個卷積層上平均獲得了50%的時(shí)間速度提升,在多層神經(jīng)網(wǎng)絡(luò)中最低獲得了57%以上的速度提升。同空間組合算法相比,最高獲得了80%的速度提升。

      1 MEC算法分析

      本文針對MEC進(jìn)行優(yōu)化,MEC算法卷積過程如圖1所示,計(jì)算過程主要分為兩步:中間矩陣轉(zhuǎn)換和矩陣乘法。卷積過程中輸入矩陣通常采用四維矩陣存儲數(shù)據(jù),即批次(batch)、通道(channel)、高度(height)和寬度(weight),分別用N、C、H、W表示。參與運(yùn)算的矩陣有輸入矩陣(input)、中間矩陣(lower)、卷積核矩陣(kernel)和輸出矩陣(output),分別用I、L、K和O表示。本章討論的MEC算法中,輸入矩陣采用二維表示,即N=1,C=1,H=1,W=7。使用二維數(shù)據(jù)可以排除其他維度干擾,更加直觀地對MEC算法進(jìn)行理解,同時(shí)分析算法中存在的不足。

      圖1 MEC算法計(jì)算過程Fig.1 Calculation process of MEC algorithm

      1.1 中間矩陣轉(zhuǎn)換過程分析

      中間矩陣轉(zhuǎn)換作為MEC算法的第一步,主要負(fù)責(zé)把原始輸入矩陣I轉(zhuǎn)換成中間矩陣L。如圖1所示,首先,讀取輸入矩陣中A=I[0∶7,0∶3]部分的每個值,并將其組織成中間矩陣L的第一行。然后,以步長S(步長為滑窗每次移動的距離,默認(rèn)步長為1)作為滑動距離,滑動窗口W至矩陣B=I[0∶7,1∶4]處,讀取矩陣B中數(shù)據(jù),組織成中間矩陣L的第二行。以此類推,完成從輸入矩陣到中間矩陣的轉(zhuǎn)換。

      如圖1所示,MEC算法在讀取輸入矩陣時(shí),采用分段讀取的方式,且每段劃分都以列為主。這種劃分方式不適應(yīng)矩陣在內(nèi)存中行優(yōu)先的存儲方式,每段數(shù)據(jù)間的地址不連續(xù),導(dǎo)致cache命中率降低,訪存延時(shí)長。

      1.2 矩陣乘法過程分析

      MEC算法第二步是矩陣乘法,將中間矩陣與卷積核矩陣相乘得到輸出矩陣。首先,把中間矩陣分成{P,Q,R,S,T}五個子矩陣,每個子矩陣的大小由(OW×(KW×KH)=5×9)決定,子矩陣之間的距離由(SH×KW=3)決定;其次,將卷積核矩陣按行展開成列向量;最后,把5個子矩陣分別與列向量相乘,例如,子矩陣P59=L[0∶5,3∶12]與卷積核相乘時(shí),得到輸出矩陣O中P行,Q與K相乘得到矩陣O的Q行,以此類推完成矩陣乘法運(yùn)算,得到輸出矩陣O。這種方法很大程度上減少了原始Im2col卷積的內(nèi)存開銷。同時(shí),根據(jù)MEC算法的特性,每次只計(jì)算輸出矩陣中的一個值,可以充分利用并行庫進(jìn)行加速。

      在矩陣乘法中,MEC算法讀取中間矩陣的方式不符合行優(yōu)先的存儲方式。并且,隨著輸入通道數(shù)IC和輸出通道數(shù)OC的增加,卷積核矩陣大小也隨之增加,如何加快卷積核矩陣的處理速度成為不可忽視的一點(diǎn)。

      綜上所述,為解決MEC算法中存在的問題,需要充分利用訪存模式中空間特征和時(shí)間特征,修改計(jì)算順序和數(shù)據(jù)在內(nèi)存中的排列方式(即數(shù)據(jù)布局),以解決訪問的數(shù)據(jù)地址不連續(xù)的問題,從而提高cache命中率,降低訪存延時(shí)。

      2 MEC算法訪存模式

      訪存模式是指算法或程序在訪問存儲器件時(shí)所體現(xiàn)出的規(guī)律,其規(guī)律主要有兩種:空間特征和時(shí)間特征。時(shí)間特征指數(shù)據(jù)使用的頻度和生命期,典型應(yīng)用是最近最少替換策略,將一段時(shí)間內(nèi)最長時(shí)間未被訪問的數(shù)據(jù)塊替換出去。空間特征指空間局部性原理,典型應(yīng)用是數(shù)據(jù)預(yù)讀取技術(shù),將所取數(shù)據(jù)及相近的數(shù)據(jù)塊一同取到緩存中。在下次計(jì)算單元需要數(shù)據(jù)時(shí),從緩存中讀取,無需從內(nèi)存中取數(shù)據(jù),從而減少訪存延時(shí)[9]。

      卷積運(yùn)算過程中所涉及的數(shù)據(jù)以矩陣形式進(jìn)行存儲,矩陣在內(nèi)存中有行主序和列主序兩種存儲方式[10],如圖2所示,行主序在存儲矩陣時(shí)按行寫入內(nèi)存,列主序存儲時(shí)按列寫入內(nèi)存。矩陣在內(nèi)存中的存儲方式由編程語言決定,C++和Python等神經(jīng)網(wǎng)絡(luò)使用的語言,其矩陣的存儲方式為行主序。優(yōu)化算法只針對矩陣存儲方式為行主序的編程語言,本文使用的編程語言為Python。

      圖2 不同設(shè)備中內(nèi)存組織形式Fig.2 Memory organization in different devices

      為解決原有算法cache命中率低等問題,本文結(jié)合訪存模式中兩種訪存特征,提出一種針對MEC算法的優(yōu)化思想,主要使用兩種方法來解決訪問數(shù)據(jù)地址不連續(xù)的問題,進(jìn)而提高cache命中率。第一種方法利用預(yù)讀取技術(shù),改變數(shù)據(jù)在內(nèi)存中的組織模式,把數(shù)據(jù)組織成計(jì)算單元可以順序使用計(jì)算的形式;第二種方法結(jié)合空間特征和時(shí)間特征,改變原有算法復(fù)雜的計(jì)算順序,將其修改成按行計(jì)算的順序。通過這兩種方法可以加快讀取速度,提升整體的計(jì)算性能。基于此優(yōu)化思想,本文將在第3章提出針對MEC的優(yōu)化算法。

      3 針對MEC的優(yōu)化算法

      為進(jìn)一步提升卷積計(jì)算性能,本文針對MEC算法,提出了一種能夠增加cache命中率,降低內(nèi)存訪問延時(shí)的優(yōu)化算法。這里,使用第2章提出的優(yōu)化思想對MEC算法進(jìn)行優(yōu)化,分成單通道和多通道兩小節(jié)對優(yōu)化算法進(jìn)行說明。對于單通道卷積部分,討論計(jì)算順序的調(diào)整方式,對多通道卷積部分,討論數(shù)據(jù)布局優(yōu)化等操作。

      3.1 單通道卷積優(yōu)化方法

      單通道卷積分為矩陣轉(zhuǎn)換和矩陣運(yùn)算兩部分,矩陣轉(zhuǎn)換部分如圖3(a)所示,本文重新設(shè)計(jì)輸入矩陣的讀取方式,將原有讀取方式改為行優(yōu)先讀取。首先,對輸入矩陣區(qū)域按行進(jìn)行劃分,依次劃分成{P,Q,R,S,T,U,V}7個行向量。然后,分別對7個行向量進(jìn)行處理。例如,對于行向量P=I[1,1∶7],采用核矩陣寬度KW=3作為滑塊寬度。具體轉(zhuǎn)換步驟如下:第一步,讀取區(qū)域PA=P(1∶3),將數(shù)據(jù)按序填充到中間矩陣P′區(qū)域A′行所示部分(P′A′)。第二步,以步長SH=1作為步幅向右滑動滑塊,得到{PA,PB,PC,PD,PE}5個子向量,分別填充到中間矩陣L中對應(yīng){P′A′,P′B′,P′C′,P′D′,P′E′}部分,完成從輸入矩陣P到中間矩陣P′的轉(zhuǎn)換。最后,向量P處理完成后,對輸入矩陣中剩余行向量進(jìn)行處理,重復(fù)上述過程得到中間矩陣L。在矩陣轉(zhuǎn)換過程中,行向量的處理過程相互獨(dú)立,沒有數(shù)據(jù)間依賴關(guān)系,可以利用加速庫進(jìn)行加速。

      圖3 優(yōu)化算法單通道計(jì)算過程Fig.3 Single channel calculation process of optimization algorithm

      矩陣運(yùn)算部分如圖3(b)所示,根據(jù)1.2節(jié)可知,對于矩陣運(yùn)算部分,原有算法讀取中間矩陣的方式比較復(fù)雜,為簡化原有算法讀取步驟,加快讀取速度,本文更改了參與矩陣運(yùn)算的順序。與修改矩陣轉(zhuǎn)換過程類似,按行讀取中間矩陣。例如,行向量A′=L[1,1∶21]是矩陣運(yùn)算讀取的第一部分,具體運(yùn)算步驟如下。首先,讀取向量A′中長度為KH×KW=9的數(shù)據(jù),將讀取的數(shù)據(jù)與卷積核向量K進(jìn)行點(diǎn)積,得到輸出矩陣O的值O11。其次,取核向量K的長度作為滑塊大小,按照步長KW×IC=3的距離向右滑動滑塊,得到的數(shù)據(jù)分別與K相乘,直至滑塊到達(dá)向量A的末尾,得到輸出矩陣O中的A″列。最后,分別對{B,C,D,E}做相同處理,對應(yīng)得到矩陣O的{B″,C″,D″,E″}列。在矩陣運(yùn)算過程中,參與矩陣運(yùn)算的各部分相互獨(dú)立,可以利用并行加速。

      3.2 多通道卷積優(yōu)化方法

      本節(jié)介紹優(yōu)化算法中輸入矩陣中間矩陣轉(zhuǎn)換過程,卷積核矩陣數(shù)據(jù)布局變化以及對卷積計(jì)算方式的修改過程。

      輸入矩陣到中間矩陣的轉(zhuǎn)換過程如圖4所示,采用IN×IH×IW×IC(NHWC)作為輸入矩陣的數(shù)據(jù)布局,多通道卷積增加批次(IN)和輸入通道(IC)兩個維度。如圖4中含有3個批次,不同顏色代表不同通道,每個批次內(nèi)采用二維方式表示三維數(shù)據(jù)(寬、高以及輸入通道)。與3.1節(jié)中間矩陣轉(zhuǎn)換類似,優(yōu)化算法將列優(yōu)先讀取方式修改為行優(yōu)先。與單通道卷積中間矩陣轉(zhuǎn)換不同的是,多通道卷積需要對批次和通道數(shù)進(jìn)行處理。優(yōu)化算法使用NHWC作為輸入矩陣的數(shù)據(jù)布局,為使讀取輸入矩陣的數(shù)據(jù)地址連續(xù),采用從內(nèi)到外的順序進(jìn)行轉(zhuǎn)換,即按照CWHN的順序?qū)斎刖仃囘M(jìn)行讀取轉(zhuǎn)換,優(yōu)先轉(zhuǎn)換通道數(shù),再依次轉(zhuǎn)換寬、高,最后轉(zhuǎn)換批次,完成從輸入矩陣到中間矩陣的轉(zhuǎn)換。

      圖4 優(yōu)化算法多通道計(jì)算過程Fig.4 Multi-channel calculation process of optimization algorithm

      與輸入矩陣相同,參與卷積運(yùn)算的卷積核矩陣同樣有4個維度,分別為寬(KW)、高(KH)、輸入通道數(shù)(IC)和輸出通道數(shù)(OC)。通常,卷積核大小為KW×KH,一個輸入矩陣對應(yīng)一套卷積核,一套卷積核內(nèi)包含IC個卷積核,一套卷積核可與輸入矩陣進(jìn)行卷積運(yùn)算得到一個單通道輸出矩陣。OC套卷積核分別與輸入矩陣卷積得到OC個輸出矩陣,即多通道輸出矩陣。與輸入矩陣(NHWC)進(jìn)行運(yùn)算的卷積核矩陣通常采用KH×KW×IC×OC(HWIO)作為數(shù)據(jù)布局,將卷積運(yùn)算轉(zhuǎn)換為矩陣乘法,利用BLAS庫中高度優(yōu)化的gemm函數(shù)進(jìn)行加速。本文使用TVM作為優(yōu)化算法的實(shí)現(xiàn)平臺,將卷積核矩陣的數(shù)據(jù)布局修改為符合MEC算法訪存模式的OC×KH×KW×IC(OHWI)布局方式。如圖4所示,依次按照輸入通道數(shù)、寬和高的順序?qū)⒁惶拙矸e核展開成行向量,分別對OC套卷積核進(jìn)行展開,得到行高為OC,列寬為IC×KW×KH的卷積核矩陣。

      最后,利用TVM內(nèi)置計(jì)算函數(shù)對原有算法運(yùn)算方式作出改進(jìn),具體運(yùn)算步驟如下:首先,將第一個批次的中間矩陣依次與卷積核矩陣的每一行相乘,得到一個批次的三通道輸出矩陣。其次,對剩余批次重復(fù)上述步驟,得到完整的結(jié)果。最后,對輸出結(jié)果進(jìn)行整理,對運(yùn)算結(jié)果進(jìn)行矩陣變換。這種運(yùn)算方式中,訪問核矩陣的順序?yàn)樾袃?yōu)先,符合算法訪存模式,加快讀取速度。同時(shí),采用分批次對矩陣進(jìn)行處理,可以利用TVM內(nèi)置的并行庫對卷積運(yùn)算進(jìn)行加速。

      3.3 優(yōu)化算法代價(jià)分析

      優(yōu)化算法在多通道卷積中通過修改了卷積核的數(shù)據(jù)布局和矩陣運(yùn)算的計(jì)算方式加快運(yùn)算速度,但是,優(yōu)化過程中存在一定程度上的不足。進(jìn)行卷積時(shí),需要將中間矩陣和卷積核矩陣經(jīng)過計(jì)算得到輸出結(jié)果,但由于輸出結(jié)果的數(shù)據(jù)布局同輸入矩陣的數(shù)據(jù)布局不匹配,需要進(jìn)行布局轉(zhuǎn)換,在優(yōu)化算法中,進(jìn)行布局轉(zhuǎn)換的方式為矩陣轉(zhuǎn)置。

      矩陣轉(zhuǎn)置過程如圖5所示,優(yōu)化算法主要對寬、高和批次3個維度進(jìn)行轉(zhuǎn)置,取N=1,W=3,H=3,C=3,不同顏色代表不同通道數(shù)。在轉(zhuǎn)置過程中,首先,依次讀取結(jié)果矩陣中各通道的第一列第一個值,排列成輸出矩陣中第一行相鄰的3個值,即圖中1、2、3號值的位置變化。其次,對各通道的第一列上的其余值進(jìn)行轉(zhuǎn)換,排列成輸出矩陣的一行。最后,對各通道的其他列依次重復(fù)上述過程,得到完整的輸出矩陣。在轉(zhuǎn)置過程中可以看出,在讀取結(jié)果矩陣時(shí),順序讀取的兩個值之間通常相隔的長度為H,由第二章提到的數(shù)據(jù)預(yù)讀取技術(shù)可知,讀取數(shù)據(jù)時(shí)會將相鄰數(shù)據(jù)存入cache中,但是讀取結(jié)果矩陣時(shí)數(shù)據(jù)跨度大,導(dǎo)致cache命中率降低,轉(zhuǎn)置時(shí)間增加,對優(yōu)化算法的計(jì)算速度造成了一定的影響,這也是算法以后需要改進(jìn)的地方。

      圖5 輸入矩陣轉(zhuǎn)置過程Fig.5 Input matrix transpose process

      4 實(shí)驗(yàn)和結(jié)果分析

      4.1 實(shí)驗(yàn)平臺

      本文使用x86架構(gòu)CPU,基于TVM[11]編譯器對MEC算法進(jìn)行優(yōu)化,通過設(shè)計(jì)多組實(shí)驗(yàn)驗(yàn)證該算法的計(jì)算性能。TVM針對多樣的硬件體系結(jié)構(gòu)與模型定義,在模型定義和后端代碼實(shí)現(xiàn)之間的轉(zhuǎn)換部分進(jìn)行了高度優(yōu)化,使模型可以更好地部署到各個硬件平臺[12]。硬件平臺CPU型號為Intel Core i5-10400CPU@2.90 GHz,支持AVX2[13]矢量指令集,可以更好地對計(jì)算進(jìn)行加速。

      4.2 測試集及實(shí)驗(yàn)方案

      4.2.1 測試集

      本文使用單個卷積層和3個多層神經(jīng)網(wǎng)絡(luò)模型對優(yōu)化算法進(jìn)行測試。對于單個卷積層,這里從當(dāng)前流行的神經(jīng)網(wǎng)絡(luò)模型中選取了11個不同規(guī)模的卷積層作為優(yōu)化算法的測試集,測試集規(guī)模如表1所示。分別對MEC算法、優(yōu)化算法以及空間組合算法(spatial pack)進(jìn)行測試。文獻(xiàn)[14]中使用了空間組合算法,采用分治的思想,將輸入矩陣的高和寬均勻分成若干份,分別對每一部分進(jìn)行卷積運(yùn)算,作為一種高效的卷積算法??臻g組合算法同優(yōu)化算法類似,對輸入矩陣進(jìn)行劃分,只需在填充(padding)時(shí)增加額外的存儲空間,減少了存儲空間占用,同時(shí)也采用修改讀取順序的方式對卷積算法進(jìn)行優(yōu)化。

      表1 測試集規(guī)模Table 1 Test sets size

      對于多層神經(jīng)網(wǎng)絡(luò),采用PyTorch官方提供的預(yù)訓(xùn)練模型,包含ResNet18、ResNet101以及DenseNet121網(wǎng)絡(luò)。分別使用MEC算法和優(yōu)化算法作為神經(jīng)網(wǎng)絡(luò)模型的卷積層算法,對3種模型進(jìn)行前向推理測試。ResNet網(wǎng)絡(luò)由何凱明提出,使用殘差學(xué)習(xí)解決了神經(jīng)網(wǎng)絡(luò)因深度過深導(dǎo)致過擬合的問題;DenseNet由劉壯提出,優(yōu)點(diǎn)在于緩解了梯度消失問題,加強(qiáng)了特征傳播,極大地減少了參數(shù)量[15]。預(yù)訓(xùn)練模型由網(wǎng)絡(luò)上公開的數(shù)據(jù)集ImageNet[16]對網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練后得到,包含完整的模型參數(shù)[17],可以直接使用預(yù)訓(xùn)練模型進(jìn)行推理測試,本文選用ImageNet中推理子集作為多層神經(jīng)網(wǎng)絡(luò)的測試集。

      4.2.2 實(shí)驗(yàn)方案

      對于單個卷積層,11個測試集采用0~1之間的隨機(jī)浮點(diǎn)數(shù)作為輸入矩陣和卷積核矩陣的數(shù)據(jù),使用TVM平臺自帶的優(yōu)化庫對MEC算法、優(yōu)化算法和空間組合算法進(jìn)行加速優(yōu)化,其中,對空間組合算法中輸入矩陣的劃分,由TVM給出最佳劃分方法。對3種算法進(jìn)行相同批次下前向計(jì)算性能測試,分別統(tǒng)計(jì)在不同測試集上的計(jì)算時(shí)間,連續(xù)測試100次取平均值。

      文獻(xiàn)[8]中的算法同樣是對MEC算法進(jìn)行優(yōu)化,稱為MFCA算法,該算法針對GPU架構(gòu),針對內(nèi)存進(jìn)行優(yōu)化,本文的算法針對CPU中x86架構(gòu),針對速度進(jìn)行優(yōu)化。因此,本文未同MFCA算法進(jìn)行對比。

      對于多層神經(jīng)網(wǎng)絡(luò),使用TVM加載預(yù)訓(xùn)練模型,從ImageNet測試集中取6張圖片分別對MEC算法和優(yōu)化算法進(jìn)行推理測試,每張圖片重復(fù)推理10次取平均值。

      4.3 實(shí)驗(yàn)結(jié)果

      4.3.1 單個卷積層時(shí)間性能比較

      對于11個測試集100組輸入的測試,優(yōu)化算法相比于MEC算法的加速效果如圖6所示,分別獲取中間矩陣轉(zhuǎn)換、中間矩陣讀取和整個卷積過程的運(yùn)行時(shí)間,圖中使用的公式如下,設(shè)MEC運(yùn)行時(shí)間為Tmec,優(yōu)化算法運(yùn)行時(shí)間為Topt,速度提升為Tspeedup,則計(jì)算公式為:

      從圖6中可以看出,優(yōu)化算法中間矩陣轉(zhuǎn)換的性能比MEC算法平均提升10%以上,其中,測試集1、3、6和7提升效果明顯優(yōu)于其他測試集,結(jié)合表1中數(shù)據(jù)規(guī)??芍谔幚磔^大規(guī)模的矩陣時(shí),MEC算法中一次所需處理的行數(shù)增多,根據(jù)程序訪存特性可知,增加了訪存時(shí)間。優(yōu)化算法采用按行讀取策略,充分利用訪存特性,使得cache命中率明顯提升,加快轉(zhuǎn)換速度。

      圖6 優(yōu)化算法中間矩陣轉(zhuǎn)換速度和讀取速度提升Fig.6 Improvement of intermediate matrix conversion and reading speed of optimization algorithm

      如表2和圖6所示,本文分別獲取每個測試用例中間矩陣的規(guī)模以及兩個算法的數(shù)據(jù)讀取時(shí)間進(jìn)行對比。由于步長的存在,把中間矩陣的規(guī)模修改成參與運(yùn)算的規(guī)模,數(shù)據(jù)讀取時(shí)間的獲取方式為單獨(dú)訪問矩陣,不進(jìn)行與核函數(shù)的乘法運(yùn)算。

      表2 中間矩陣數(shù)據(jù)規(guī)模Table 2 Data size of intermediate matrix

      由表2可知,與原有MEC算法相比,優(yōu)化算法訪問中間矩陣數(shù)據(jù)的速度明顯加快,較原有算法平均提升了20%。表中8~11測試數(shù)據(jù)中,在中間矩陣列寬不變,行寬較小時(shí),優(yōu)化算法的訪問速度提升不明顯,但隨著行寬的增加,優(yōu)化算法的訪問速度提升更加明顯,最高時(shí)訪問速度提升了40%,這符合本文對優(yōu)化算法的分析。最后,本文獲取了卷積計(jì)算的整體時(shí)間,如圖7所示。

      圖7 優(yōu)化算法總體卷積速度提升Fig.7 Improvement of overall convolution speed of optimization algorithm

      結(jié)合表1可以發(fā)現(xiàn),在輸入矩陣的寬高較小且通道數(shù)較多時(shí),優(yōu)化算法都能取得50%以上的提升。這是因?yàn)橹虚g矩陣L的行高由OW決定,列寬大小由IH×KW×IC決定。隨著通道數(shù)IC的增加,中間矩陣的列寬也會跟著增加,通常會增加到行高OW的幾十倍。再加上本文對卷積核矩陣數(shù)據(jù)的重新排列,使得優(yōu)化算法符合程序的訪存特性,增加cache命中率,從而降內(nèi)存訪問延時(shí),提高整體的計(jì)算性能。

      但是,優(yōu)化算法也有明顯不足,如圖7中1、2和圖8所示,優(yōu)化算法的速度提升不明顯,甚至有些許下降。這里獲取了優(yōu)化算法轉(zhuǎn)置所耗時(shí)間(Tt)同優(yōu)化算法整體時(shí)間的時(shí)間比,計(jì)算公式為:

      圖8 轉(zhuǎn)置時(shí)間占比Fig.8 Ratio of transpose time

      本文在3.3節(jié)提到,得到輸出矩陣之前,需要對計(jì)算得到的結(jié)果矩陣進(jìn)行轉(zhuǎn)置操作,對于較大規(guī)模矩陣,需要讀取的數(shù)據(jù)間隔較大,造成轉(zhuǎn)置時(shí)間一定程度增加,這是速度提升不明顯的主要因素。從圖7和圖8對比可以看出,轉(zhuǎn)置時(shí)間占用較大的測試序列速度提升不明顯,轉(zhuǎn)置時(shí)間占用較小的測試序列速度提升明顯,呈負(fù)相關(guān)關(guān)系,證明了轉(zhuǎn)置過程一定程度上影響了優(yōu)化算法的運(yùn)算速度。

      將優(yōu)化算法同MEC算法進(jìn)行對比之后,對空間組合算法和優(yōu)化算法的運(yùn)行時(shí)間進(jìn)行了對比,其中,Tspatial表示空間組合算法所用時(shí)間,Topt為優(yōu)化算法所用時(shí)間,計(jì)算公式如下:

      從對比結(jié)果可以看出,優(yōu)化算法整體上的運(yùn)算速度明顯優(yōu)于空間組合算法(如圖9),除測試序列6外,其余均有30%以上的速度提升。其中測試序列4~5、9~11的速度提升都在60%以上,結(jié)合表1可以看出,這些測試序列采用的高H和寬W都較小,而通道數(shù)C較大,根據(jù)第3章優(yōu)化算法介紹得知,此種情況下,中間矩陣的寬會增加,更有利于增加優(yōu)化算法的cache命中率,使得優(yōu)化算法速度提升明顯。而在1~3、6~8中,優(yōu)化算法速度提升略低,這是因?yàn)殡S著矩陣寬和高的增加,空間組合算法可以發(fā)揮分治的優(yōu)勢,將矩陣切分成合適的數(shù)量進(jìn)行卷積。最后,測試序列6出現(xiàn)了空間組合算法速度提升優(yōu)于優(yōu)化算法的現(xiàn)象,這是因?yàn)閮?yōu)化算法不適合處理寬高較大,通道數(shù)較少的矩陣,同時(shí),空間組合算法適合處理此種情況。因此,從實(shí)驗(yàn)數(shù)據(jù)可以看出,優(yōu)化算法整體上優(yōu)于空間組合算法。

      圖9 優(yōu)化算法卷積同空間組合算法速度提升Fig.9 Optimization algorithm convolution and spatial combination algorithm speed improvement

      4.3.2 多層卷積網(wǎng)絡(luò)時(shí)間性能比較

      在TVM平臺中實(shí)現(xiàn)MEC卷積算法和優(yōu)化算法,分別替換卷積層中的卷積算法為MEC和優(yōu)化算法,使用ResNet18、ResNet101和DenseNet121這3種神經(jīng)網(wǎng)絡(luò)模型作為推理測試模型的實(shí)驗(yàn)結(jié)果如圖10所示。這里設(shè)使用MEC算法作為卷積的神經(jīng)網(wǎng)絡(luò)運(yùn)算時(shí)間為Tmecnn,使用優(yōu)化算法作為卷積的神經(jīng)網(wǎng)絡(luò)運(yùn)算時(shí)間為Toptnn,則速度提升Tsunn計(jì)算公式為:

      圖10 不同網(wǎng)絡(luò)模型性能對比Fig.10 Performance comparison of different network models

      本次實(shí)驗(yàn)分別獲取不同網(wǎng)絡(luò)模型下兩種算法的時(shí)間比,如圖10所示,在ResNet18網(wǎng)絡(luò)中,相比MEC算法,優(yōu)化算法的速度提升了57%以上。在更深層的ResNet101網(wǎng)絡(luò)中,優(yōu)化算法的性能提升平均在75%以上。兩者對比可以發(fā)現(xiàn),隨著網(wǎng)絡(luò)層數(shù)加深,速度提升更明顯,這是因?yàn)镽esNet101中含有更多卷積層,每個卷積層都得到不同程度的加速,使得優(yōu)化算法對性能提升更加明顯。最后,在近幾年新興的神經(jīng)網(wǎng)絡(luò)DenseNet中,優(yōu)化算法獲得了75%的速度提升。由此可以看出,相較于使用MEC作為卷積算法的神經(jīng)網(wǎng)絡(luò)模型,使用優(yōu)化算法作為卷積算法的網(wǎng)絡(luò)模型有更加良好的性能提升。

      5 結(jié)束語

      MEC卷積算法是處理內(nèi)存占用過高的選擇之一,但是,MEC算法的運(yùn)算速度同樣重要。因此,本文提出一種針對MEC的卷積優(yōu)化算法。優(yōu)化方法采用兩種,首先,對輸入矩陣和中間矩陣的處理方式進(jìn)行優(yōu)化,將原有的訪問方式修改為行優(yōu)先訪問,使得訪問順序符合程序訪存模式。然后,本文更改了卷積核的數(shù)據(jù)布局,使用TVM封裝的計(jì)算函數(shù)對卷積的計(jì)算方式進(jìn)行優(yōu)化,修改卷積計(jì)算方式為行乘以行。此外,本文還利用TVM平臺的優(yōu)化方法對算法進(jìn)行優(yōu)化加速,達(dá)到提高卷積計(jì)算性能的目的。實(shí)驗(yàn)結(jié)果表明,優(yōu)化算法相較于MEC算法,獲得不同程度的性能加速。在測試不同規(guī)模的單層卷積時(shí)獲得了平均50%的性能提升,此外,本文將優(yōu)化算法和MEC算法集成到TVM平臺中,使用ResNet18、ResNet101和DenseNet121神經(jīng)網(wǎng)絡(luò)模型作為測試模型,分別獲得57%、75%和75%的速度提升。同時(shí),本文將優(yōu)化算法同空間組合算法進(jìn)行對比,獲得了最高80%的速度提升,進(jìn)一步驗(yàn)證了本文提出的優(yōu)化算法的有效性。

      猜你喜歡
      內(nèi)存運(yùn)算卷積
      重視運(yùn)算與推理,解決數(shù)列求和題
      基于3D-Winograd的快速卷積算法設(shè)計(jì)及FPGA實(shí)現(xiàn)
      有趣的運(yùn)算
      “春夏秋冬”的內(nèi)存
      從濾波器理解卷積
      電子制作(2019年11期)2019-07-04 00:34:38
      基于傅里葉域卷積表示的目標(biāo)跟蹤算法
      “整式的乘法與因式分解”知識歸納
      撥云去“誤”學(xué)乘除運(yùn)算
      一種基于卷積神經(jīng)網(wǎng)絡(luò)的性別識別方法
      基于內(nèi)存的地理信息訪問技術(shù)
      河西区| 富宁县| 西和县| 栾川县| 余江县| 河西区| 宜昌市| 聊城市| 若羌县| 麟游县| 滨州市| 清流县| 乐东| 景东| 巴青县| 石屏县| 财经| 高阳县| 惠来县| 宁海县| 康定县| 宁化县| 岚皋县| 宜黄县| 东乡县| 湖南省| 龙山县| 莱西市| 潜山县| 新巴尔虎右旗| 巴南区| 平南县| 正阳县| 玉山县| 克东县| 昭苏县| 罗田县| 大城县| 浏阳市| 南澳县| 天长市|