国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

申威26010 眾核處理器上Winograd 卷積算法的研究與優(yōu)化

2024-04-29 05:35:42
關(guān)鍵詞:寄存器指令處理器

武 錚 金 旭 安 虹

(中國(guó)科學(xué)技術(shù)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 合肥 230026)

(zhengwu@mail.ustc.edu.cn)

隨著深度學(xué)習(xí)的快速發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNNs)作為其最成熟的網(wǎng)絡(luò)模型之一,被廣泛應(yīng)用于計(jì)算機(jī)視覺(jué)[1]、語(yǔ)音識(shí)別[2]、自動(dòng)駕駛[3]、智能醫(yī)療健康[4]等領(lǐng)域,以獲取更高的產(chǎn)業(yè)效率和更好的用戶(hù)體驗(yàn).而當(dāng)前CNNs 高準(zhǔn)確率的背后是巨大的計(jì)算代價(jià),隨著數(shù)據(jù)集變大、網(wǎng)絡(luò)參數(shù)變多以及模型結(jié)構(gòu)變得更加的復(fù)雜,CNNs 對(duì)運(yùn)行效率的要求越來(lái)越高.對(duì)于整個(gè)CNNs 來(lái)說(shuō),90%以上的計(jì)算量都集中在卷積層中[5],這也使得眾核處理器上高性能并行卷積算法的研究成為了當(dāng)前學(xué)術(shù)界和工業(yè)界的熱門(mén)話題之一.

當(dāng)前最受歡迎的卷積算法有4 種[6],分別是直接卷積算法、GEMM 卷積算法、FFT 卷積算法和Winograd卷積算法.直接卷積算法是基于7 層循環(huán)做卷積,雖然實(shí)現(xiàn)簡(jiǎn)單,但是因?yàn)閿?shù)據(jù)局部性差而導(dǎo)致性能不高.GEMM 卷積算法的核心是高效的矩陣乘實(shí)現(xiàn),因?yàn)樵S多硬件平臺(tái)上有可以直接使用的高效矩陣乘庫(kù),所以GEMM 卷積算法成為了加速卷積計(jì)算算法中非常受歡迎的算法,該算法可以分為顯式的GEMM 卷積算法[7]和隱式的GEMM 卷積算法[8].相比于直接卷積算法,GEMM 卷積算法并不會(huì)改變整體的計(jì)算量,只是將離散的計(jì)算操作集中并連續(xù)執(zhí)行,從而提高數(shù)據(jù)的局部性以實(shí)現(xiàn)卷積的高效執(zhí)行.而FFT 卷積算法[9]和Winograd 卷積算法[10]則不同,兩者都是通過(guò)將輸入數(shù)據(jù)和卷積核數(shù)據(jù)線性變換,然后進(jìn)行對(duì)應(yīng)位相乘,中間結(jié)果再進(jìn)行逆線性變換得到最終的輸出數(shù)據(jù).通過(guò)這種“變換—運(yùn)算—逆變換”的過(guò)程,大大降低了卷積的計(jì)算復(fù)雜度.FFT 卷積算法將直接卷積算法的計(jì)算復(fù)雜度從O(OH2×FH2)降到了O(OH2×logOH)[6],Winograd 卷積算法則進(jìn)一步將卷積的計(jì)算復(fù)雜度降到了O((OH+FH-1)2)[10].

Winograd 卷積算法因其較低的計(jì)算復(fù)雜度,受到了廣泛的關(guān)注與研究.Park 等人[11]針對(duì)卷積中大量的零權(quán)重和Winograd 變換中額外的加運(yùn)算限制,提出了ZeroSkip 硬件機(jī)制和AddOpt 數(shù)據(jù)重用優(yōu)化,增強(qiáng)后的算法能夠取得51.8%的性能提升.Jia 等人[12]在?ntel Xeon Phi 上進(jìn)行了任意卷積核維度的Wingorad卷積算法的優(yōu)化與實(shí)現(xiàn),對(duì)比最優(yōu)的GPU 實(shí)現(xiàn),在2D CNNs 上取得了旗鼓相當(dāng)?shù)男阅?,?D CNNs 上性能更佳.武錚等人[13]利用?ntel KNL 的MCDRAM、多Memory/SNC 模式等微架構(gòu)特性?xún)?yōu)化Winograd 卷積算法實(shí)現(xiàn).測(cè)試VGG16,對(duì)比MKL-DNN 有2 倍多的性能加速.Mazaheri 等人[14]提出了一種基于符號(hào)計(jì)算的Winograd 卷積算法,利用元編程和自動(dòng)調(diào)諧引入了能夠?yàn)镚PU 自動(dòng)生成高效可移植Wingorad 卷積實(shí)現(xiàn)的系統(tǒng).Jia 等人[15]提出了一種基于MegaKernel的Winograd 卷積實(shí)現(xiàn),通過(guò)映射算法將不同的計(jì)算任務(wù)分配給GPU 線程塊,并構(gòu)建1 個(gè)按照依賴(lài)關(guān)系來(lái)獲取和執(zhí)行任務(wù)的調(diào)度器.結(jié)果表明,與cuDNN 的2 種Winograd 卷積實(shí)現(xiàn)相比,基于MegaKernel 的Winograd 卷積實(shí)現(xiàn)有1.25 倍和1.7 倍的性能加速.Castro 等人[16]通過(guò)匯編代碼實(shí)現(xiàn)性能熱點(diǎn)部分的方法,提出了一種優(yōu)化的Wingorad 卷積算法OpenCNN,相比于cuDNN 的Winograd 卷積實(shí)現(xiàn),在Turing RTX 2080Ti 和Ampere RTX 3090 上分別加速了1.76 倍和1.85 倍.王慶林等人[17]在融合數(shù)據(jù)scatter 和矩陣乘數(shù)據(jù)打包的基礎(chǔ)上,針對(duì)飛騰多核處理器設(shè)計(jì)了一種不依賴(lài)矩陣乘庫(kù)函數(shù)的Winograd 卷積實(shí)現(xiàn),使得Mxnet 中VGG16 的前向計(jì)算獲得了3.01~6.79 倍的性能加速.總的來(lái)說(shuō),近些年Winograd 卷積算法在通用處理器?ntel Xeon/Xeon Phi 和NV?D?A GPU 上得到了快速發(fā)展.與此同時(shí),許多其他硬件平臺(tái)的Winograd卷積加速也在不斷吸引著研究人員投身其中,如國(guó)產(chǎn)多核處理器[17]、ARM CPU[18]、FPGA[19]等.

申威26010 眾核處理器作為世界一流超算系統(tǒng)“神威·太湖之光”的核心算力來(lái)源,其低功耗高性能的特性使得其在人工智能領(lǐng)域擁有巨大潛力,8×8的從核陣列、軟件控制的存儲(chǔ)器層次結(jié)構(gòu)、硬件支持的寄存器通信、從核的雙流水指令運(yùn)行等獨(dú)特的架構(gòu)特征既給了研究人員充足的可控空間,又提出了巨大的技術(shù)挑戰(zhàn).然而,該處理器上有關(guān)卷積算法的研究一直處于初級(jí)階段,僅有的一些研究工作[5,8,20]也只是針對(duì)GEMM 卷積算法在該處理器上的高效并行實(shí)現(xiàn).

綜上所述,為了進(jìn)一步探索申威26010 處理器上卷積算法的潛力,本文詳細(xì)討論了單精度Winograd 卷積算法在該處理器上的高性能并行設(shè)計(jì),主要貢獻(xiàn)有3 點(diǎn):

1)提出了一種并行卷積算法—融合Winograd卷積算法,并為該算法設(shè)計(jì)了匹配的定制矩陣乘,使得該算法避免了傳統(tǒng)Winograd 卷積算法對(duì)官方GEMM庫(kù)接口的依賴(lài).

2)提出的融合Winograd 卷積算法具有可視的執(zhí)行過(guò)程,能夠結(jié)合申威處理器典型架構(gòu)特征進(jìn)行更細(xì)粒度的計(jì)算訪存優(yōu)化.同時(shí),通過(guò)設(shè)計(jì)合并的Winograd 變換模式、DMA 雙緩沖、片上存儲(chǔ)的強(qiáng)化使用、輸出數(shù)據(jù)塊的彈性處理以及指令重排等優(yōu)化方案,在提升算法性能的同時(shí),也為未來(lái)處理器上的并行研究工作提供了有意義的參考借鑒.

3)從優(yōu)化效果、卷積性能和卷積神經(jīng)網(wǎng)絡(luò)性能3 個(gè)方面進(jìn)行了實(shí)驗(yàn).實(shí)驗(yàn)結(jié)果表明,在VGG 網(wǎng)絡(luò)模型的測(cè)試中,融合Winograd 卷積算法性能高達(dá)傳統(tǒng)Winograd 卷積算法性能的7.8 倍.通過(guò)對(duì)典型CNNs中常見(jiàn)卷積的收集測(cè)試,融合Winograd 卷積算法最高可以發(fā)揮申威處理器峰值性能的116.21%,平均可以達(dá)到93.14%.同時(shí),通過(guò)測(cè)試對(duì)比定制矩陣乘和該處理器的通用GEMM,表明定制矩陣乘更有利于融合Winograd 卷積算法性能的發(fā)揮.

1 相關(guān)背景

1.1 Winograd 卷積算法

CNNs 主要包括卷積層、下采樣層和全連接層等,其中卷積層和下采樣層進(jìn)行特征提取,全連接層在提取的最終特征上進(jìn)行識(shí)別.綜合來(lái)看,卷積層是CNNs 的關(guān)鍵動(dòng)力,也是整個(gè)網(wǎng)絡(luò)執(zhí)行過(guò)程中最耗時(shí)的部分.考慮到卷積層的本質(zhì)是卷積運(yùn)算,因而,如何高效地設(shè)計(jì)卷積算法已經(jīng)成為了一個(gè)熱門(mén)研究話題.本文選擇計(jì)算復(fù)雜度最低的Winograd 卷積算法作為研究對(duì)象,主要研究工作為該算法在國(guó)產(chǎn)申威26010 眾核處理器上的高效并行.

對(duì)于通常的卷積運(yùn)算,可以將輸入數(shù)據(jù)標(biāo)記為in[B][IC][IH][IW],表示B個(gè)IC通道的樣本,每個(gè)通道可以看作一個(gè)大小為IH×IW的輸入特征映射;將卷積核數(shù)據(jù)標(biāo)記為f tl[OC][IC][FH][FW],表示OC組卷積核,每組IC個(gè)卷積核中每個(gè)卷積核的高度和寬度分別為FH和FW;將輸出數(shù)據(jù)標(biāo)記為out[B][OC][OH][OW],表示B個(gè)OC通道的樣本中每個(gè)通道可以看作一個(gè)大小為OH×OW的輸出特征映射.除此之外,不同的填充大小和不同的跨步大小相互組合形成了不同的卷積形式,可以把高和寬的填充大小分別標(biāo)記為padH和padW,類(lèi)似地,高和寬的跨步大小則為stdH和stdW.卷積的執(zhí)行過(guò)程為IC個(gè)輸入特征映射和IC個(gè)卷積核一一對(duì)應(yīng)卷積,然后累加IC個(gè)局部卷積結(jié)果,從而得到一個(gè)輸出特征映射,因此一個(gè)完整的卷積需要OC×IC個(gè)卷積核.上述卷積過(guò)程可以簡(jiǎn)化為式(1)中關(guān)于in,flt,out的張量乘法和累加.

其中 0 ≤b<B,0 ≤oc<OC,0 ≤oh<OH,0 ≤ow<OW.

Winograd 卷積起源于有限脈沖響應(yīng)(finite impulse response,F?R)濾波的最小濾波算法[10],該最小濾波算法由r拍的F?R 濾波器生成m個(gè)輸出,也就是F(m,r).此時(shí),算法運(yùn)算需要 μ(F(m,r))=m+r-1次乘法操作.對(duì)于1 維的Winograd 最小濾波算法可以表示為矩陣的形式:

通過(guò)嵌套1 維的Winograd 最小濾波算法可以得到2 維的Wingorad 最小濾波算法F(m×m,r×r):

其中x表示輸入,w表示過(guò)濾器,y表示輸出;AT,G,BT表示該算法的系數(shù)矩陣;⊙表示矩陣的對(duì)應(yīng)位相乘,即Hadamard 乘積.如果把x替換為卷積中的輸入數(shù)據(jù)in,w替換為卷積中的卷積核數(shù)據(jù)flt,y替換為卷積中的輸出數(shù)據(jù)out,參考文獻(xiàn)[10]則可以得到Winograd 卷積算法,如算法1 所示.

算法1.Winograd 卷積算法.

對(duì)于Wingorad 卷積算法,系數(shù)矩陣AT,G,BT是由m和r決定的,以F(2×2,3×3)為例,此時(shí)有

1.2 申威26010 眾核處理器

申威26010 眾核處理器[21-22]是由上海高性能集成電路設(shè)計(jì)中心自主研發(fā)的一款國(guó)產(chǎn)異構(gòu)眾核處理器,支持64 b 自主神威指令級(jí)系統(tǒng),采用分布式共享存儲(chǔ)和片上計(jì)算陣列.如圖1 所示,該處理器單芯片由4 個(gè)等價(jià)的核組(core group,CG)構(gòu)成,核組間通過(guò)片上網(wǎng)絡(luò)(network on chip,NoC)互連.每個(gè)核組由1個(gè)主核(management processing element,MPE)和64 個(gè)從核(computing processing element,CPE)組成,共計(jì)260 個(gè)計(jì)算核心.每個(gè)核組私有1 個(gè)4 路128 b 的DDR3主存控制器(memory controller,MC)和1 個(gè)協(xié)議處理單元(protocol processing unit,PPU),并通過(guò)MC 直連1 塊8 GB 的DDR3 主存.

Fig.1 The architecture of ShenWei-26010 processor圖1 申威26010 的處理器架構(gòu)

主核和從核的工作頻率都是1.45 GHz,兩者都支持256 b 的浮點(diǎn)向量乘加指令,不同的是主核有2 條浮點(diǎn)運(yùn)算流水,從核僅有1 條浮點(diǎn)運(yùn)算流水.同時(shí),雙精度數(shù)據(jù)運(yùn)算和單精度數(shù)據(jù)運(yùn)算共用雙精度浮點(diǎn)運(yùn)算單元的微體系結(jié)構(gòu)特征,使得該處理器上浮點(diǎn)數(shù)據(jù)的向量長(zhǎng)度都為4.基于此,單核組從核陣列的理論單精度浮點(diǎn)峰值是742.4 GFLOPS,主核是23.2 GFLOPS.其中計(jì)算性能約97%來(lái)源于從核陣列,可見(jiàn)在該處理器上進(jìn)行性能優(yōu)化最為關(guān)鍵的任務(wù)就是如何高效地組織利用從核陣列的各種資源,以充分發(fā)揮從核陣列的計(jì)算性能.每個(gè)主核擁有2 級(jí)私有緩存,包括1 個(gè)32 KB 的L1 指令緩存、1 個(gè)32 KB 的L1數(shù)據(jù)緩存以及1 個(gè)256 KB 的L2 緩存.每個(gè)從核都有1 個(gè)16 KB 的L1 指令緩存和1 個(gè)64 KB 本地設(shè)備內(nèi)存(local device memory,LDM).從核陣列上的64 個(gè)從核共享一個(gè)大小為64 KB 的直接映射的L2 指令緩存.

該處理器為了盡可能緩解片外訪存的壓力,提供了2 個(gè)核心技術(shù).一個(gè)是不同的主從核間的數(shù)據(jù)訪問(wèn)方式:1)gld/gst 離散訪主存,即是從核直接對(duì)主存進(jìn)行讀寫(xiě)操作,這種方式的好處是簡(jiǎn)單易用,缺陷就是速度很慢,訪存延遲高達(dá)278 個(gè)時(shí)鐘周期;2)DMA(direct memory access)批量式訪主存,即是從核先通過(guò)DMA 操作將主存數(shù)據(jù)提取到LDM,然后再對(duì)LDM 內(nèi)的數(shù)據(jù)進(jìn)行相關(guān)操作,整個(gè)過(guò)程的訪存延遲較低,大約29 個(gè)時(shí)鐘周期.其中,DMA 支持多種訪存模式,應(yīng)用最為廣泛的有PE_MODE,ROW_MODE,BROW_MODE.另一個(gè)是寄存器通信實(shí)現(xiàn)同一核組內(nèi)64 個(gè)從核的片上數(shù)據(jù)共享,為了有效支持這一機(jī)制,每個(gè)從核上配備了發(fā)送緩沖區(qū)、行接收緩沖區(qū)和列接收緩沖區(qū),發(fā)送緩沖區(qū)可以緩沖6 個(gè)寄存器消息,2 個(gè)接收緩沖區(qū)可以分別緩沖4 個(gè)寄存器消息.寄存器通信機(jī)制需要注意3 點(diǎn):1)通信時(shí)數(shù)據(jù)的大小固定為256 b;2)行和列都不同的2 個(gè)從核之間不能直接進(jìn)行通信,需要借助同行或者同列上的從核作為中間轉(zhuǎn)折點(diǎn);3)通信的過(guò)程是匿名的,當(dāng)多個(gè)從核發(fā)送消息到某個(gè)從核時(shí),該從核基于先到先得的策略接收消息.Benchmarking[23]顯示每個(gè)從核陣列上寄存器通信的帶寬在P2P 模式和廣播模式下分別可以達(dá)到637.25 GBps 和1 115.25 GBps.

申威26010 處理器每個(gè)從核支持2 條硬件流水線P0 和P1.其中,P0 支持浮點(diǎn)和整數(shù)的標(biāo)量/向量操作,P1 支持?jǐn)?shù)據(jù)遷移、比較、跳轉(zhuǎn)和整數(shù)標(biāo)量操作.2條流水線共享1 個(gè)指令解碼器(instruction decoder,?D)和1 個(gè)指令隊(duì)列,每個(gè)時(shí)鐘周期?D 對(duì)隊(duì)列中前2 條指令進(jìn)行檢測(cè),當(dāng)滿(mǎn)足3 種情況時(shí)2 條指令可以同時(shí)被加載到2 條流水中:1)2 條指令同已發(fā)射未完成的指令不存在沖突;2)2 條指令間不存在寫(xiě)后讀和寫(xiě)后寫(xiě)沖突;3)2 條指令可以分別被2 條流水處理.不難看出,如何混合交差程序中2 種類(lèi)型的指令,使P0和P1 能夠并行運(yùn)行,對(duì)于該處理器性能的發(fā)揮起著重要的作用.

2 Winograd 卷積算法的并行優(yōu)化

首先介紹提出的并行Winograd 卷積算法的整體設(shè)計(jì)思路.然后以F(2×2,3×3)為例,結(jié)合申威26010處理器架構(gòu)特征,詳細(xì)闡述該算法的各種計(jì)算和訪存的優(yōu)化方案.最后,對(duì)研究工作的通用性進(jìn)行了分析,以期望能夠?qū)ζ渌姾颂幚砥魃暇矸e研究提供有益的參考借鑒.

2.1 融合Winograd 卷積算法

如算法1 所示,Winograd 卷積算法的基本運(yùn)算流程可以分為4 個(gè)部分:

現(xiàn)代處理器存在的普遍問(wèn)題就是訪存速度無(wú)法跟上計(jì)算能力,申威26010 處理器在這方面尤為嚴(yán)重,其每字節(jié)浮點(diǎn)計(jì)算率高達(dá)33.84[23].而通用處理器?ntel KNL 7290 和NV?D?A Tesla V100 分別為7.05[24]和7.78[25],可見(jiàn)申威26010 處理器每字節(jié)的片外主存數(shù)據(jù)訪問(wèn)需要匹配遠(yuǎn)高于通用處理器的計(jì)算量.對(duì)于許多工作來(lái)說(shuō),要想充分發(fā)揮該處理器的性能,訪存受限無(wú)疑是一個(gè)巨大的挑戰(zhàn).在上述Winograd 卷積算法的基本運(yùn)算流程中,scatter 和gather 過(guò)程中的維度變化都是大量的離散訪存操作,這將造成難以忍受的高額訪存開(kāi)銷(xiāo).為了解決上述問(wèn)題,設(shè)置了新的數(shù)據(jù)格式—in[IH][IW][IC][B],flt[FH][FW][IC][OC],out[OH][OW][OC][B].這些數(shù)據(jù)格式的核心便是通過(guò)直接使用卷積過(guò)程中天然的矩陣乘關(guān)系(對(duì)應(yīng)矩陣乘參數(shù)M,N,K分別為OC,B,IC),在避 免scatter 和gather 過(guò)程中的維度變化造成的高額訪存開(kāi)銷(xiāo)的同時(shí),也省去了存儲(chǔ)中間數(shù)據(jù)而需要的額外內(nèi)存資源.另一方面,將矩陣乘關(guān)系放到低維度中可以盡可能地提高整個(gè)算法執(zhí)行過(guò)程中訪存的連續(xù)性.

如圖2(a)所示,Winograd 卷積最直接的實(shí)現(xiàn)方法就是在步驟3 中調(diào)用官方GEMM 庫(kù)接口,而步驟1、步驟2 和步驟4 利用從核陣列并行執(zhí)行Winograd 變換和Winograd 逆變換,這是一種傳統(tǒng)的Winograd 卷積算法.該算法的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單方便,缺點(diǎn)是中間數(shù)據(jù)需要消耗大量片外存儲(chǔ)資源,極低的數(shù)據(jù)重用導(dǎo)致頻繁的片外訪存,高額的訪存開(kāi)銷(xiāo)導(dǎo)致即便有著高性能的GEMM 庫(kù)接口也難以實(shí)現(xiàn)卷積的高效運(yùn)行.

Fig.2 Basic framework of the fused Winograd convolution algorithm圖2 融合Wingorad 卷積算法的基本框架

為了充分挖掘Winograd 卷積算法在申威26010處理器上的潛力,本文提出了一種不依賴(lài)官方GEMM庫(kù)接口的算法.該算法能夠?qū)⒃惊?dú)立執(zhí)行的Winograd變換、核心運(yùn)算和Winograd 逆變換融合到一起,以充分發(fā)揮Winograd 卷積算法本身潛在的數(shù)據(jù)重用,從而盡可能降低訪存對(duì)算法執(zhí)行效率的影響,將其稱(chēng)之為“融合Winograd 卷積算法”.如圖2(b)所示,將原卷積數(shù)據(jù)中的最后2 維看成1 個(gè)元素,那么in,flt,out則分別可以看成IH×IW,FH×FW,OH×OW的2維數(shù)組,且三者的單元素大小分別為IC×B,IC×OC,OC×B.在融合Winograd 算法中,步驟1 是通過(guò)DMA讀取主存上r×r的卷積核數(shù)據(jù)塊fltTileM到LDM 空間中的fltTileL,再通過(guò)Winograd 變換得到 α×α的步驟2 與步驟1 類(lèi)似,先是讀取 α×α的輸入數(shù)據(jù)塊inTileM到LDM 空間中的inTileL,然后通過(guò)Winograd 變換得到 α×α 的為了能夠更好地適應(yīng)融合Winograd 卷積算法中核心運(yùn)算的實(shí)際情況,定制了高效的矩陣乘實(shí)現(xiàn),并提供了便于該算法調(diào)用的從核函數(shù)接口wgdGEMM.步驟3 則是通過(guò)一一對(duì)應(yīng)的方式調(diào)用 α×α 次的wgdGEMM,從而得到α×α的步驟4 執(zhí)行Winograd 逆變換得到outTileL,并DMA 寫(xiě)回到主存中的對(duì)應(yīng)位置outTileM.考慮整個(gè)過(guò)程中fltTileM是固定的,而inTileM和outTileM則是通過(guò)移動(dòng)滑窗獲取的,所以fltTileM將會(huì)被反復(fù)使用次.為了最大化fltTileM的時(shí)間局部性,設(shè)計(jì)算法僅且只執(zhí)行1 次步驟1,并將變換后的結(jié)果長(zhǎng)期駐留在片上存儲(chǔ)LDM 中,直到卷積結(jié)束.步驟2、步驟3和步驟4則會(huì)隨著滑窗的移動(dòng)獲取不同的inTileM和outTileM,繼而執(zhí)行次得到最終的輸出數(shù)據(jù)out.

2.2 算法優(yōu)化方案

后續(xù)內(nèi)容將以F(2×2,3×3)為例進(jìn)行詳細(xì)闡述,即m=2,r=3,α=4.在2.1 節(jié)融合Winograd 卷積算法的基礎(chǔ)上,結(jié)合申威26010 處理器的架構(gòu)特征以及卷積運(yùn)算的實(shí)際情況,進(jìn)一步探索細(xì)粒度的訪存和計(jì)算的優(yōu)化方案.

2.2.1 合并的Winograd 變換模式

考慮到申威26010 處理器在進(jìn)行矩陣乘的計(jì)算kernel 設(shè)計(jì)時(shí),需要進(jìn)行向量加載和寄存器通信.而該處理器僅支持雙精度數(shù)據(jù)情況下單條指令完成向量加載和寄存器通信.如果是單精度數(shù)據(jù)的話,則需要分2 條指令進(jìn)行,且這2 條指令之間存在寫(xiě)后讀關(guān)系,將極大地降低計(jì)算kernel 的指令級(jí)并行度.因此,選擇在片上存儲(chǔ)LDM 中提前進(jìn)行單精度數(shù)據(jù)和雙精度數(shù)據(jù)的類(lèi)型轉(zhuǎn)換,從而保證送入wgdGEMM中的源數(shù)據(jù)都是雙精度數(shù)據(jù),以最大化卷積算法的指令級(jí)并行度.為此,可以設(shè)置融合Winograd 卷積算法中inTileL,fltTileL,outTileL用于存儲(chǔ)LDM 上的單精度數(shù)據(jù),則用于存儲(chǔ)LDM 上的雙精度數(shù)據(jù).此時(shí),對(duì)于輸入數(shù)據(jù)塊和卷積核數(shù)據(jù)塊的Winograd 變換,以及輸出數(shù)據(jù)塊的Winograd 逆變換可以表示為:

在F(2×2,3×3) 中,BT,G,AT為確定的常數(shù)矩陣,具體值可以參見(jiàn)1.1 節(jié).此時(shí),i nTileL的維度為4 ×4×IC×B,可以將其簡(jiǎn)單視為 16×IC×B.相應(yīng)的,維度也可以表示為 16×IC×B.那么對(duì)于輸入數(shù)據(jù)塊的Winograd 變換直觀上可以分為二次矩陣乘運(yùn)算,稱(chēng)之為“分離的Winograd 變換模式”,如圖3 所示.其中i=0,1,…,IC×B-1,整個(gè)過(guò)程需要 224×IC×B次浮點(diǎn)運(yùn)算.這種Winograd 變換方式雖然簡(jiǎn)單直觀,但是不僅浮點(diǎn)運(yùn)算量大,而且中間數(shù)據(jù)tmp會(huì)增大片上存儲(chǔ)資源LDM 的開(kāi)銷(xiāo),如果引入向量化則更會(huì)使這種額外的LDM 開(kāi)銷(xiāo)成倍增加.

Fig.3 Separated Winograd-transformed mode圖3 分離的Winograd 變換模式

為了解決上述問(wèn)題,設(shè)計(jì)了合并的Winograd 變換模式,通過(guò)將BTinTileLB的二次矩陣乘運(yùn)算合并到一次,直接獲取中每個(gè)元素關(guān)于inTileL中16個(gè)元素的線性關(guān)系,結(jié)果如圖4 所示.

Fig.4 Merged Winograd-transformed mode圖4 合并的Winograd 變換模式

通過(guò)合并的Winograd 變換模式,將浮點(diǎn)運(yùn)算次數(shù)降低到了 48×IC×B,僅為原計(jì)算量的21.4%.同時(shí),消除了中間數(shù)據(jù)帶來(lái)的額外LDM 開(kāi)銷(xiāo),使得向量化的使用不再受限制.因?yàn)樯晖?6010 處理器的浮點(diǎn)向量長(zhǎng)度為4,如果在合并的Winograd 變換模式中加入向量化,計(jì)算量將進(jìn)一步降低至原計(jì)算量的5.35%.

類(lèi)似地,對(duì)于fltTileL和通過(guò)合并的Winograd 變換模式,整個(gè)變換過(guò)程中計(jì)算量降為原計(jì)算量的11.43%;對(duì)于outTileL和通過(guò)合并的Winograd 變換模式,整個(gè)變換過(guò)程中計(jì)算量降為原計(jì)算量的9.52%.

2.2.2 DMA 雙緩沖

申威26010 處理器支持異步的DMA 訪存,因此有可能通過(guò)精心設(shè)計(jì)算法,從而盡可能地將DMA 訪存開(kāi)銷(xiāo)分?jǐn)偟胶诵倪\(yùn)算上,緩解該處理器的片外訪存壓力,提高并行算法性能.

算法2.基于DMA 雙緩沖的融合Winograd 卷積算法.

如算法2 所示,DMA 雙緩沖的核心思想是通過(guò)預(yù)先執(zhí)行1 次循環(huán)的DMA 操作,以消耗部分雙倍的LDM 片上存儲(chǔ)為代價(jià),使得相鄰2 次循環(huán)間的DMA操作和核心運(yùn)算能夠無(wú)依賴(lài)并行,從而掩藏掉部分訪存時(shí)間.其中,ldst表示存儲(chǔ)DMA 操作所需數(shù)據(jù)的LDM 空間,cmpt表示存儲(chǔ)當(dāng)前核心運(yùn)算所需數(shù)據(jù)的LDM 空間.其中fltTileL用于DMA 讀取卷積核數(shù)據(jù)塊,并將fltTileL在Winograd 變換后的數(shù)據(jù)以雙精度的形式放入考慮到Winograd 卷積中卷積核數(shù)據(jù)的反復(fù)使用,中數(shù)據(jù)將會(huì)常駐LDM 空間,直至卷積結(jié)束.同時(shí),設(shè)置i nTileL[cmpt]和inTileL[ldst]用于雙緩沖輸入數(shù)據(jù)塊inTileM的DMA 讀取,設(shè)置outTileL[cmpt]和outTileL[ldst]用于雙緩沖輸出數(shù)據(jù)塊outTileM的DMA 寫(xiě)回.相應(yīng)地,分配和用于存儲(chǔ)當(dāng)前核心運(yùn)算所需要的對(duì)應(yīng)雙精度數(shù)據(jù).在算法2 中,實(shí)現(xiàn)了下一次inTileM的DMA讀取和上一次outTileM的DMA 寫(xiě)回同當(dāng)前核心運(yùn)算的并行執(zhí)行,理論最優(yōu)情況下將會(huì)實(shí)現(xiàn)大約2 倍的性能提升.

2.2.3 片上存儲(chǔ)的強(qiáng)化使用

申威26010 處理器提供了用戶(hù)可控的片上存儲(chǔ)LDM,但是單個(gè)從核的LDM 僅有64 KB,有限的LDM容量要求研究人員不得不精心設(shè)計(jì)算法,以盡可能提高片上存儲(chǔ)資源的使用效率.在算法2 中,雙緩沖雖然能夠很好地實(shí)現(xiàn)核心運(yùn)算和DMA 訪存的并行,但是也會(huì)使部分使用中的LDM 空間翻倍,同時(shí)考慮到存儲(chǔ)雙精度數(shù)據(jù)帶來(lái)的額外LDM 消耗,這些都給本就有限的LDM 帶來(lái)了巨大壓力.為了緩解算法2中片上存儲(chǔ)的使用壓力,設(shè)計(jì)了2 種優(yōu)化方案:展開(kāi)的LDM 強(qiáng)化使用和交錯(cuò)的LDM 強(qiáng)化使用.兩者都是從算法設(shè)計(jì)的角度,通過(guò)重新組織算法的執(zhí)行流程,尋找能夠節(jié)省的LDM 空間.

假設(shè)B=IC=OC,如圖5 所示,算法2 中初始使用的LDM 空間大小為580B2字節(jié).在展開(kāi)的LDM 強(qiáng)化使用中,將核心運(yùn)算的整體展開(kāi)并拆分成16 次獨(dú)立的wgdGEMM,依次標(biāo)識(shí)為wgdGEMM[0]~[15].同時(shí),結(jié)合2.2.1 節(jié)中合并的Winograd 變換模式下的線性關(guān)系,如式(5)所示.

Fig.5 Unfolding LDM enhanced usage圖5 展開(kāi)的LDM 強(qiáng)化使用

Fig.6 ?nterleaving LDM enhanced usage圖6 交錯(cuò)的LDM 強(qiáng)化使用

2.2.4 輸出數(shù)據(jù)塊的彈性處理

在融合Winograd 算法的優(yōu)化中,都是以單個(gè)輸出數(shù)據(jù)塊為計(jì)算粒度設(shè)計(jì)算法,對(duì)于片上存儲(chǔ)LDM的使用由B,IC,OC決定.但是并非任何情況下LDM都能夠得到充分使用,當(dāng)B,IC,OC三者較小時(shí),會(huì)出現(xiàn)大量LDM 空間閑置的情況.針對(duì)上述問(wèn)題,設(shè)計(jì)了輸出數(shù)據(jù)塊的彈性處理方案:通過(guò)增大算法基于輸出數(shù)據(jù)塊的計(jì)算粒度,使閑置的LDM 空間能夠被使用起來(lái),從而進(jìn)一步探索融合Winograd 算法中潛在的數(shù)據(jù)局部性.

在進(jìn)行Winograd 卷積時(shí),移動(dòng)輸入數(shù)據(jù)的滑窗獲取輸入數(shù)據(jù)塊時(shí),2 個(gè)相鄰的輸入數(shù)據(jù)塊之間會(huì)產(chǎn)生r-1的重疊.因此,對(duì)于以單個(gè)輸出數(shù)據(jù)塊為計(jì)算粒度的融合Winograd 算法,輸入數(shù)據(jù)會(huì)出現(xiàn)反復(fù)被讀取的情況.如圖7 所示的卷積中,對(duì)于優(yōu)化前的算法,輸入數(shù)據(jù)將會(huì)被平均反復(fù)讀取2.56 次.通過(guò)引入輸出數(shù)據(jù)塊的彈性處理,假設(shè)算法的計(jì)算粒度由單個(gè)輸出數(shù)據(jù)塊變?yōu)? 個(gè)輸出數(shù)據(jù)塊,那么每次只需要讀取 4×6的inTileM相當(dāng)于之前讀取2 次 4×4的inTileM.因此,優(yōu)化后的算法中輸入數(shù)據(jù)的平均反復(fù)讀取降為了1.92 次,相應(yīng)地,輸入數(shù)據(jù)的訪存開(kāi)銷(xiāo)降低了25%.在不考慮LDM容量的情況下,可以設(shè)置單次計(jì)算輸出數(shù)據(jù)塊的數(shù)量為,此時(shí)將完全消除輸入數(shù)據(jù)的不必要訪存,使其訪存局部性達(dá)到最大.

Fig.7 Processing two output data blocks in a single run圖7 單次處理2 個(gè)輸出數(shù)據(jù)塊

2.2.5 定制的矩陣乘

融合Winograd 卷積算法相比傳統(tǒng)Winograd 卷積算法的一大優(yōu)勢(shì)就在于其不依賴(lài)于GEMM 庫(kù)接口,這使得整個(gè)Winograd 卷積的執(zhí)行過(guò)程不再是透明的,從而讓更細(xì)粒度的計(jì)算訪存優(yōu)化成為可能.為此,參考申威26010 處理器上的通用GEMM[26],定制了匹配該算法的矩陣乘實(shí)現(xiàn).為了方便后續(xù)說(shuō)明,將算法中的卷積參數(shù)映射到對(duì)應(yīng)的矩陣乘參數(shù).其中,矩陣A,B,C分別對(duì)應(yīng)每次DMA 訪存的fltTileM,inTileM,outTileM數(shù)據(jù)塊,矩陣乘參數(shù)M,N,K分別對(duì)應(yīng)卷積中的OC,B,IC.

如圖8 所示,整個(gè)定制矩陣乘實(shí)現(xiàn)可以分為2 部分:一部分為原始矩陣數(shù)據(jù)到單核組的任務(wù)映射;一部分為融合Winograd 卷積算法執(zhí)行過(guò)程中調(diào)用的wgdGEMM.首先,前者由Winograd 變換、Winograd逆變換和核組級(jí)分塊構(gòu)成,對(duì)于Winograd 變換和Winograd 逆變換過(guò)程,在2.1 節(jié)中已經(jīng)進(jìn)行了詳細(xì)的介紹,而核組級(jí)分塊直接采用文獻(xiàn)[26]中的分塊原理,詳細(xì)過(guò)程可以參考文獻(xiàn)[26]中的研究工作.其次,需要注意Winograd 轉(zhuǎn)換和Winograd 逆變換的線程級(jí)并行同wgdGEMM的線程級(jí)并行間是相對(duì)應(yīng)的.以fltTileM為例,其在wgdGEMM中的對(duì)應(yīng)矩陣A在進(jìn)行線程級(jí)任務(wù)劃分時(shí),是通過(guò)對(duì)Kcg×Mcg矩陣塊進(jìn)行 8×8網(wǎng)格劃分從而實(shí)現(xiàn)單個(gè)從核的任務(wù)映射.同理,fltTileM也將通過(guò)對(duì) 3×3個(gè)ICcg×OCcg(ICcg=Kcg,OCcg=Mcg)數(shù)據(jù)塊的 8×8網(wǎng)格劃分以實(shí)現(xiàn)卷積核的Winograd 變換過(guò)程的線程級(jí)并行.類(lèi)似地,inTileM需要通對(duì) 4×4個(gè)ICcg×Bcg(ICcg=Kcg,Bcg=Ncg)數(shù)據(jù)塊的 8×8網(wǎng)格劃分以實(shí)現(xiàn)輸入的Winograd 變換過(guò)程的線程級(jí)并行,outTileM需要通過(guò)對(duì) 2×2個(gè)OCcg×Bcg(OCcg=Mcg,Bcg=Ncg)數(shù)據(jù)塊的 8×8網(wǎng)格劃分以實(shí)現(xiàn)輸出的Winograd 逆變換過(guò)程的線程級(jí)并行.最后,將結(jié)合融合Winograd 卷積算法中矩陣乘與文獻(xiàn)[26]的2 點(diǎn)關(guān)鍵不同之處對(duì)wgdGEMM的實(shí)現(xiàn)進(jìn)行詳細(xì)介紹:1)不同一.矩陣乘不再是非轉(zhuǎn)置的矩陣乘,而是矩陣A轉(zhuǎn)置的矩陣乘;2)不同二.M,N,K通常情況下小于1 000[27].

Fig.8 Customized matrix multiplication implementation圖8 定制的矩陣乘實(shí)現(xiàn)

將16 個(gè)wgdGEMM綁定到一起作為融合Winograd卷積算法的單位計(jì)算粒度.其中,單個(gè)wgdGEMM可以分為3 個(gè)層次,分別為核組級(jí)矩陣乘、線程級(jí)矩陣乘和寄存器級(jí)矩陣乘.對(duì)于核組級(jí)矩陣乘,Acg,Bcg,Ccg分別對(duì)應(yīng)算法中存儲(chǔ)雙精度數(shù)據(jù)的LDM 緩沖區(qū)當(dāng)LDM 空間足夠的情況下,Mcg,Ncg,Kcg分別與M,N,K相等.然后,基于單個(gè)核組上的 8×8從核陣列,對(duì)Acg,Bcg,Ccg進(jìn)行 8×8網(wǎng)格形式的線程級(jí)分塊,從而將單核組的矩陣乘映射到單線程的矩陣乘.為了滿(mǎn)足Cth的計(jì)算需求,需要通過(guò)廣播-廣播的寄存器通信方案[26],分別對(duì)Ath和Bth進(jìn)行廣播.在對(duì)從核進(jìn)行Ath,Bth,Cth數(shù)據(jù)分配時(shí),考慮到“不同一”,定制矩陣乘不再采用單一的行對(duì)行映射,而是按照行對(duì)行映射的方式為每個(gè)從核分配Bth和Cth,按照行對(duì)列映射的方式為每個(gè)從核分配Ath.由此,可得第i行第j列的從核將分配到Acg[j][i],Bcg[i][j],Ccg[i][j].通過(guò)這種混合映射方法,使得在廣播-廣播的寄存器通信中,分別對(duì)Ath進(jìn)行行廣播,對(duì)Bth進(jìn)行列廣播,從而使得每個(gè)從核上寄存器通信緩沖區(qū)資源能夠得到充分利用.為了能夠盡可能發(fā)揮wgdGEMM的指令級(jí)并行效率,通過(guò)寄存器級(jí)分塊進(jìn)一步將線程級(jí)矩陣乘劃分為更細(xì)粒度的寄存器級(jí)矩陣乘,從而方便最底層核心指令序列的手動(dòng)重排.考慮到“不同一”中可以先對(duì)Ath進(jìn)行轉(zhuǎn)置,將其維度從Kth×Mth變?yōu)镸th×Kth,再直接運(yùn)用文獻(xiàn)[26]中的方法.但是我們更希望能夠避免這一轉(zhuǎn)置帶來(lái)的額外訪存開(kāi)銷(xiāo),為此,基于申威26010 處理器單精度向量長(zhǎng)度為4 這一特性,設(shè)計(jì)了如圖8 所示的寄存器級(jí)矩陣乘映射方案:1)通過(guò)vldd 指令依次裝入Cth中元素,每次4 個(gè)元素,得到一個(gè)VCrg[Mrg][Nrg/4]的向量數(shù)組;2)通過(guò)ldder 指令依次裝入Ath的單個(gè)元素進(jìn)行向量擴(kuò)展,得到一個(gè)VArg[Krg][Mrg]的向量數(shù)組,并行廣播;3)通過(guò)vldc 指令依次裝入Bth中元素,每次4 個(gè)元素,得到一個(gè)VBrg[Krg][Nrg/4]的向量數(shù)組,并列廣播;4)通過(guò)vmad 指令對(duì)VArg和VBrg的所有向量數(shù)據(jù)進(jìn)行全相連的乘法運(yùn)算,并同VCrg中對(duì)應(yīng)向量元素進(jìn)行累加運(yùn)算5)通過(guò)vstd 指令將計(jì)算結(jié)果寫(xiě)入Cth的對(duì)應(yīng)位置.其中,每執(zhí)行一次方案1和方案5,相應(yīng)的方案2~4將會(huì)被執(zhí)行次,不難看出方案2~4 組成了寄存器級(jí)矩陣乘的核心指令序列.為了保證寄存器級(jí)矩陣乘的運(yùn)算效率,取Krg=1使得累加運(yùn)算過(guò)程不存在數(shù)據(jù)依賴(lài).同時(shí),考慮到申威26010 處理器除去零寄存器和棧指針(stack pointer,SP)寄存器能夠自由使用的向量寄存器數(shù)為30,所以有

再考慮整個(gè)線程級(jí)矩陣乘的計(jì)算訪存比,所以有

在保證涉及到的每個(gè)向量元素能夠匹配1 個(gè)獨(dú)立向量寄存器的情況下,為了最大化計(jì)算訪存比,減少不必要的訪存開(kāi)銷(xiāo),結(jié)合式(6)(7),可得因此,對(duì)于寄存器級(jí)矩陣乘,分配4 個(gè)向量寄存器存儲(chǔ)VArg、4 個(gè)向量寄存器存儲(chǔ)VBrg和16 個(gè)向量寄存器存儲(chǔ)VCrg.

申威26010 處理器每個(gè)從核支持2 條不同的流水線P0 和P1,其中P0 支持浮點(diǎn)和整數(shù)的標(biāo)量/向量操作,而P1 支持?jǐn)?shù)據(jù)遷移、比較、跳轉(zhuǎn)和整數(shù)標(biāo)量操作.為了能夠獲得高性能的wgdGEMM,可以通過(guò)手寫(xiě)匯編保證寄存器級(jí)矩陣乘核心指令序列盡可能精簡(jiǎn),同時(shí)手動(dòng)重排指令序列以充分發(fā)揮從核的雙流水指令運(yùn)行機(jī)制.通過(guò)對(duì)上述寄存器級(jí)矩陣乘的描述,可以得到理想情況下向量寄存器的分配.其中,4個(gè)向量寄存器用于載入VArg數(shù)據(jù),標(biāo)記為AR0~AR3;4 個(gè)向量寄存器用于載入VBrg數(shù)據(jù),標(biāo)記為BR0~BR3;16 個(gè)向量寄存器用于存儲(chǔ)VCrg數(shù)據(jù),標(biāo)記為CR00~CR33.由此,可以得出寄存器級(jí)矩陣乘最內(nèi)層循環(huán)核心指令序列如圖9(a)左側(cè)所示,執(zhí)行時(shí)間為25 個(gè)時(shí)鐘周期,此時(shí)整個(gè)執(zhí)行過(guò)程幾乎處于單流水狀態(tài).為了能夠真正啟動(dòng)從核的雙流水模式,對(duì)初始指令序列手動(dòng)重排,重排后如圖9(a)右側(cè)所示.在最內(nèi)層循環(huán)開(kāi)始前,首先預(yù)取第1 次計(jì)算所需的AR0,AR1,BR0,BR1,然后在最內(nèi)層循環(huán)指令序列中實(shí)現(xiàn)當(dāng)前循環(huán)的計(jì)算前部分和訪存后部分的雙流水,以及當(dāng)前循環(huán)的計(jì)算后部分和下一輪循環(huán)的訪存前部分的雙流水,最終優(yōu)化后的指令序列的執(zhí)行時(shí)間為16 個(gè)時(shí)鐘周期,性能提升約56.25%.此時(shí),雖然從核雙流水的性能得以充分發(fā)揮,但是Mrg=4且Nrg=16,卻要求矩陣乘中M是32 的倍數(shù)且N是128 的倍數(shù).雖然當(dāng)M和N不滿(mǎn)足此要求時(shí)可以使用填充的方式先滿(mǎn)足倍數(shù)要求再進(jìn)行運(yùn)算,但是考慮到“不同二”,這種開(kāi)銷(xiāo)往往是不可忽視的.例如,當(dāng)M=64,N=64,K=128時(shí),依照?qǐng)D9(a)中實(shí)現(xiàn),需要額外1 倍的計(jì)算和訪存,這些不必要的計(jì)算和訪存將極大地降低算法的性能.

Fig.9 ?nstruction reordering圖9 指令重排

為了盡可能緩解這一問(wèn)題,依照Mrg=4且Nrg=16 時(shí)指令重排的思想,對(duì)Mrg∈{1,2,3,4}和Nrg∈{4,8,12,16}組成的16 種情況中余下的15 種情況的實(shí)現(xiàn)分別進(jìn)行了指令重排,如圖9(b)所示Mrg=4且Nrg=8時(shí)的情況.為了配合這一實(shí)現(xiàn),將Mth分為2 部分[0,Mthmod(Mth,4)) 和[Mth-mod(Mth,4),Mth).類(lèi)似地,Nth也 被分為 [0,Nth-mod(Nth,16)) 和 [Nth-mod(Nth,16),Nth).通過(guò)Mth的2 部分和Nth的2 部分的一一對(duì)應(yīng)關(guān)系可以將寄存器級(jí)矩陣乘分為4 個(gè)部分.此時(shí),對(duì)于M=64,N=64,K=128的情況則可以直接運(yùn)算,不需要任何多余的計(jì)算和訪存開(kāi)銷(xiāo).

2.3 通用性分析

本文研究工作雖然是面向國(guó)產(chǎn)申威26010 處理器探索并行卷積算法的高性能實(shí)現(xiàn),但是仍然對(duì)其他眾核處理器硬件平臺(tái)具有一定的借鑒意義.如2.1節(jié)中Winograd 變換、核心運(yùn)算和Winograd 逆變換融合執(zhí)行以盡可能減少分離執(zhí)行造成的高額訪存開(kāi)銷(xiāo)的思想,2.2.1 節(jié)中合并Winograd 變換過(guò)程并向量化以避免存儲(chǔ)中間數(shù)據(jù)帶來(lái)的額外片上存儲(chǔ)資源的開(kāi)銷(xiāo)并降低變換過(guò)程中的計(jì)算量,以及2.2.4 節(jié)中彈性處理輸出數(shù)據(jù)塊的數(shù)量以充分利用片上存儲(chǔ)資源,這些優(yōu)化方案都是脫離硬件平臺(tái)特征的,可以直接應(yīng)用于其他眾核處理器.除此之外,其他的優(yōu)化方案,比如DMA 雙緩沖、片上存儲(chǔ)的強(qiáng)化使用、定制矩陣乘實(shí)現(xiàn)這些工作則是同申威26010 處理器架構(gòu)特征緊密聯(lián)系的,雖然無(wú)法直接應(yīng)用于其他眾核處理器平臺(tái),但是對(duì)于某些類(lèi)似架構(gòu)特征的硬件平臺(tái)仍然可以提供一些參考價(jià)值.

如上所述,Winograd 融合卷積算法可以分為與架構(gòu)無(wú)關(guān)的優(yōu)化方案和與架構(gòu)相關(guān)的優(yōu)化方案2 個(gè)部分,對(duì)于新一代的申威26010Pro 處理器[28-29],主要關(guān)注于架構(gòu)相關(guān)的優(yōu)化方案的適用性.而架構(gòu)相關(guān)的優(yōu)化方案主要是DMA 雙緩沖、片上存儲(chǔ)的強(qiáng)化使用、定制矩陣乘實(shí)現(xiàn),其中申威26010Pro 處理器對(duì)于DMA 雙緩沖是依舊支持的;片上存儲(chǔ)LDM 則由原來(lái)的64 KB 增加到了256 KB,更多的片上存儲(chǔ)資源更有利于降低主存的訪問(wèn)頻率;定制矩陣乘的實(shí)現(xiàn)中,最大變化來(lái)自于寄存器通信機(jī)制的取消和S?MD 指令向量長(zhǎng)度的增加,但是仍然具備對(duì)單核組從核間的數(shù)據(jù)通信的支持,也就是新的RMA(remote memory access),向量長(zhǎng)度的增加則更有利于浮點(diǎn)性能的發(fā)揮.因此,綜合上述分析不難看出,融合Winograd 卷積算法對(duì)于申威26010Pro 處理器同樣適用.

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

申威26010 處理器的配置如表1 所示.

Table 1 Configure Parameters for ShenWei-26010 Processor表1 申威 26010 處理器配置參數(shù)

本次實(shí)驗(yàn)全部在申威26010 處理器單核組上進(jìn)行,因?yàn)榭绮煌私M的并行通常由更高編程級(jí)別的用戶(hù)自己處理[26,30].實(shí)驗(yàn)中將本文提出的不依賴(lài)官方GEMM 庫(kù)接口的融合Winograd 卷積算法標(biāo)記為fusedWgdConv,類(lèi)似地,將依賴(lài)官方GEMM 庫(kù)接口的傳統(tǒng)Winograd 卷積算法作為基準(zhǔn)測(cè)試對(duì)象,并標(biāo)記為simpleWgdConv.從4 個(gè)不同的角度設(shè)計(jì)實(shí)驗(yàn),從而充分展示研究工作的成果和價(jià)值.1)通過(guò)對(duì)不同優(yōu)化方案的累加設(shè)計(jì)實(shí)驗(yàn),測(cè)試各個(gè)優(yōu)化方案的效果;2)抽取典型卷積神經(jīng)網(wǎng)絡(luò)模型AlexNet,GoogleNet,ResNet,VGG 中的常見(jiàn)卷積層,測(cè)試評(píng)估fusedWgdConv在實(shí)際應(yīng)用場(chǎng)景中的性能;3)基于fusedWgdConv,在深度學(xué)習(xí)框架Caffe 中測(cè)試不同批大小下VGG 網(wǎng)絡(luò)模型的卷積性能提升.4)對(duì)fusedWgdConv 調(diào)用的wgdGEMM的效果進(jìn)行了測(cè)試.為了保證測(cè)試結(jié)果的精確性,所有測(cè)試均迭代10 次,去掉1 個(gè)最優(yōu)值和1個(gè)最差值,取剩余8 個(gè)測(cè)試結(jié)果的平均值.

3.1 優(yōu)化效果測(cè)試

選取VGG 中的卷積作為測(cè)試實(shí)例,并以simpleWgd-Conv 作為測(cè)試基準(zhǔn),測(cè)試并記錄fusedWgdConv 在不同優(yōu)化方案累加下相比于simpleWgdConv 的性能加速.

通過(guò)對(duì)不同優(yōu)化方法的累加,可以得到7 個(gè)版本的fusedWgdConv,分別為:1)?N?T,融合Winograd 變換、核心運(yùn)算和Winograd 逆變換的執(zhí)行過(guò)程,初步實(shí)現(xiàn)fusedWgdConv;2)MERGE,在?N?T 版本的基礎(chǔ)上引入合并的Winograd 變換模式;3)DB_?N,在MERGE版本的基礎(chǔ)上,雙緩沖實(shí)現(xiàn)in的DMA 訪存和核心運(yùn)算的并行;4)DB_OUT,在DB_?N 版本的基礎(chǔ)上,雙緩沖實(shí)現(xiàn)out的DMA 訪存和核心運(yùn)算的并行;5)LDM_OPT,在DB_OUT 的基礎(chǔ)上,引入展開(kāi)的LDM 強(qiáng)化使用和交錯(cuò)的LDM 強(qiáng)化使用,緩解有限片上存儲(chǔ)資源的使用壓力,降低算法的片外訪存開(kāi)銷(xiāo);6)MULT?_OUT,在LDM_OPT 的基礎(chǔ)上,考慮小規(guī)模卷積時(shí)LDM 大量閑置的情況,引入輸出數(shù)據(jù)塊的彈性處理機(jī)制,使得任何情況下算法都能充分利用片上存儲(chǔ)資源;7)ADD_F43,通過(guò)添加F(4×4,3×3)的實(shí)現(xiàn),探索不同輸出數(shù)據(jù)塊大小的影響.

如圖10 所示,初步實(shí)現(xiàn)了fusedWgdConv 的?N?T版本相比simpleWgdConv 有67%的性能提升,可見(jiàn)?N?T 的基本設(shè)計(jì)思路能夠明顯降低simpleWgdConv依賴(lài)官方GEMM 庫(kù)接口造成的高額訪存開(kāi)銷(xiāo).依據(jù)Winograd 變換系數(shù)能夠提前確定這一特征,將原本分離的Winograd 變換模式替換為合并的Winograd變換模式,同時(shí)引入向量化,不僅消除了額外的LDM使用,而且大大降低了Winograd 變換過(guò)程中的計(jì)算量,基于此的MERGE 版本性能是simpleWgdConv 的2.9 倍.申威26010 處理器支持DMA 的異步執(zhí)行,通過(guò)對(duì)fusedWgdConv 的精心設(shè)計(jì)實(shí)現(xiàn)了in和out的DMA訪存同核心運(yùn)算的并行運(yùn)行,使得大部分的片外訪存開(kāi)銷(xiāo)得以被計(jì)算掩藏.基于此的DB_?N 版本相比MERGE 版本性能提升了52.76%.進(jìn)一步優(yōu)化后的DB_OUT 版本相比MERGE 版本性能提升了74.14%.最終雙緩沖使得fusedWgdConv 運(yùn)行性能達(dá)到了simpleWgdConv 的5.05 倍.有限的片上存儲(chǔ)資源限制了fusedWgdConv 的性能提升,為了能夠盡可能提升片上存儲(chǔ)的使用效率,設(shè)計(jì)了展開(kāi)的LDM 強(qiáng)化使用以減少數(shù)據(jù)類(lèi)型變換帶來(lái)的額外LDM 消耗,以及交錯(cuò)的LDM 強(qiáng)化使用降低inTileL雙緩沖的LDM 需求,由此LDM_OPT 版本性能相比DB_OUT 版本進(jìn)一步提升了48.51%.MULT?_OUT 版本中的輸出數(shù)據(jù)塊彈性處理僅對(duì)小規(guī)模卷積有作用,因此對(duì)算法性能提升并不明顯,其最終性能是simpleWgdConv 的7.75 倍.ADD_F43 版本相比于MULT?_OUT 版本的性能提升非常微弱,主要原因在于fusedWgdConv 單核組每次至少要處理1 個(gè)輸出數(shù)據(jù)塊所涉及到的Winograd變換、Winograd 逆變換和核心運(yùn)算,造成片上存儲(chǔ)資源的開(kāi)銷(xiāo)很高.當(dāng)算法由F(2×2,3×3)擴(kuò)展到F(4×4,3×3)時(shí),單個(gè)輸出數(shù)據(jù)塊的規(guī)模增加了4 倍,大大增加了對(duì)片上存儲(chǔ)資源的需求,而申威26010處理器有限的片上存儲(chǔ)資源不足以很好地支撐fused-WgdConv 的進(jìn)一步擴(kuò)展.

Fig.10 Performance comparison of different fusedWgdConv versions and simpleWgdConv圖10 不同fusedWgdConv 版本和simpleWgdConv 的性能對(duì)比

綜合來(lái)看,fusedWgdConv 相比simpleWgdConv 對(duì)于申威26010 處理器上的卷積有顯著的性能提升.

3.2 卷積性能測(cè)試

為了能夠進(jìn)一步驗(yàn)證fusedWgdConv 對(duì)常用卷積是否具有現(xiàn)實(shí)意義,抽取典型卷積神經(jīng)網(wǎng)絡(luò)模型AlexNet,GoogleNet,RestNet,VGG 中卷積層的卷積參數(shù),并測(cè)試對(duì)比f(wàn)usedWgdConv 和simpleWgdConv 的卷積性能.一般來(lái)說(shuō),卷積性能測(cè)試時(shí)的測(cè)試標(biāo)準(zhǔn)是運(yùn)行時(shí)的性能,但是為了能夠更好地觀察算法對(duì)硬件處理器的使用效果,實(shí)驗(yàn)選擇運(yùn)行時(shí)相對(duì)理論峰值性能的百分比作為測(cè)試標(biāo)準(zhǔn),計(jì)算公式為硬件效率=.

如圖11 所示,將抽取的卷積按照計(jì)算量由小到大排列,同時(shí)對(duì)2 種常見(jiàn)的卷積形式進(jìn)行測(cè)試分析:1)填充為0 且跨步為1;2)填充為1 且跨步為1.從總體卷積測(cè)試來(lái)看,fusedWgdConv 在無(wú)填充和有填充的情況下平均硬件效率分別為95.08%和91.2%,分別是simpleWgdConv 下卷積性能的14.54 倍和14.52 倍.可以看出,fusedWgdConv 的卷積能夠很好地適應(yīng)現(xiàn)實(shí)中的卷積場(chǎng)景.從單個(gè)卷積測(cè)試來(lái)看,無(wú)填充時(shí),fusedWgdConv 性能最小時(shí)是simpleWgdConv 性能的3.02 倍,最大時(shí)可以達(dá)到62.81 倍;有填充時(shí),fusedWgd-Conv 相比simpleWgdConv,卷積性能與無(wú)填充時(shí)差不多,在3.01~62.72 倍不等.其中,無(wú)填充和有填充情況下,fusedWgdConv 的最高硬件效率可以分別達(dá)到116.21%和111.41%.可以看出,fusedWgdConv 能夠很好地發(fā)揮申威26010 處理器的硬件性能,且相比simpleWgdConv有明顯的性能提升.

Fig.11 Hardware efficiency of ShenWei-26010 processor for different convoltuions圖11 不同卷積下申威26010 處理器的硬件效率

3.3 卷積神經(jīng)網(wǎng)絡(luò)性能測(cè)試

為了測(cè)試評(píng)估本文工作在實(shí)際使用中的效果,以原始版本的Caffe 為基準(zhǔn),基于fusedWgdConv 測(cè)試不同批大小下VGG 模型的卷積性能提升.同時(shí),考慮到Caffe 中卷積的數(shù)據(jù)格式為N-C-H-W,fused-WgdConv 的數(shù)據(jù)格式為H-W-C-N,標(biāo)記Caffe-FWC和Caffe-FWC-DFT 這 2 個(gè)版本的Caffe,分別表示基于fusedWgdConv 的Caffe 和基于fusedWgdConv 且進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換的Caffe.

如圖12 所示,Caffe-FWC 的性能加速比在3.4~9.8之間.而Caffe-FWC-DFT 雖然仍能帶來(lái)可觀的性能提升,但是數(shù)據(jù)格式轉(zhuǎn)換大約占了整個(gè)卷積執(zhí)行過(guò)程的40.5%,因此是不容忽視的.但是數(shù)據(jù)轉(zhuǎn)換過(guò)程完全是可以避免的,只需要將卷積神經(jīng)網(wǎng)絡(luò)模型中的所有網(wǎng)絡(luò)層格式設(shè)計(jì)成H-W-C-N即可.此時(shí)在實(shí)際使用中僅需對(duì)樣本數(shù)據(jù)進(jìn)行 1 次的N-C-H-W到H-W-C-N的數(shù)據(jù)格式轉(zhuǎn)換即可,其代價(jià)相對(duì)于后續(xù)成千上萬(wàn)次的網(wǎng)絡(luò)模型的循環(huán)迭代是非常微小的.這也是我們目前正在致力于的整個(gè)DNN 庫(kù)的研究工作,具體內(nèi)容會(huì)在以后的文章中進(jìn)行詳細(xì)闡述.

Fig.12 Performance speedup of Caffe with different versions圖12 不同版本Caffe 的性能加速比

3.4 定制矩陣乘效果測(cè)試

fusedWgdConv 的關(guān)鍵點(diǎn)之一就是與其匹配的定制矩陣乘,如2.2.5 節(jié)所示,wgdGEMM在申威26010處理器現(xiàn)有的通用GEMM[26]的基礎(chǔ)上,針對(duì)2 點(diǎn)不同進(jìn)行了設(shè)計(jì).針對(duì)“不同一”,設(shè)計(jì)了混合映射的廣播-廣播的寄存器通信以及避免轉(zhuǎn)置開(kāi)銷(xiāo)的寄存器級(jí)矩陣乘.相應(yīng)的,針對(duì)”不同二”,對(duì)Mrg∈{1,2,3,4}和Nrg∈{4,8,12,16}組成的16 種情況下寄存器級(jí)矩陣乘的核心指令序列都進(jìn)行了手寫(xiě)匯編和指令重排,而文獻(xiàn)[26]只考慮了Mrg=4且Nrg=16的情況.

實(shí)驗(yàn)選擇8 組矩陣乘場(chǎng)景作為測(cè)試對(duì)象,其中每組矩陣乘滿(mǎn)足2 點(diǎn):一是矩陣A轉(zhuǎn)置;二矩陣的維度不同時(shí)滿(mǎn)足Mrg=4和Nrg=16.同時(shí),選取申 威26010 處理器現(xiàn)有的GEMM[26]作為基準(zhǔn),對(duì)比測(cè)試wgdGEMM的效果.假設(shè)GEMM 同wgdGEMM一 樣所需數(shù)據(jù)已存在于LDM 中,如表2 所示為兩者的運(yùn)行時(shí)間.其中,wgdGEMM相對(duì)GEMM 性能加速比為0.202 3~0.278 8 不等,平均性能加速比約為0.239 9.由此可見(jiàn),針對(duì)fusedWgdConv 定制矩陣乘是有必要的,且wgdGEMM相比GEMM 有明顯的性能提升.

Table 2 Running Time for wgdGEMM and GEMM表2 wgdGEMM 和GEMM 的運(yùn)行時(shí)間

4 總結(jié)展望

隨著我國(guó)自主研發(fā)的申威26010 眾核處理器在人工智能領(lǐng)域的快速發(fā)展,對(duì)該處理器上高性能卷積算法的實(shí)現(xiàn)也提出了更高的要求.而該處理器上卷積算法現(xiàn)有的研究尚處于初級(jí)階段,本文針對(duì)這一問(wèn)題,結(jié)合申威26010 處理器的架構(gòu)特征,提出并實(shí)現(xiàn)了一種高性能并行的融合Winograd 卷積算法.該算法有2 個(gè)主要特點(diǎn):1)不依賴(lài)于官方GEMM庫(kù)接口,設(shè)計(jì)了匹配該算法的定制矩陣乘,并結(jié)合現(xiàn)實(shí)卷積計(jì)算特征和通用矩陣乘算法,在零開(kāi)銷(xiāo)情況下完成了矩陣轉(zhuǎn)置,并對(duì)其寄存器級(jí)矩陣乘的核心指令序列進(jìn)行了各種情況的指令重排;2)Winograd變換、核心運(yùn)算和Winograd 逆變換過(guò)程的融合優(yōu)化避免了三者分開(kāi)執(zhí)行時(shí)造成的反復(fù)讀取主存數(shù)據(jù)帶來(lái)的高額訪存開(kāi)銷(xiāo).此外,還設(shè)計(jì)了合并的Winograd變換模式加速Winograd 變換過(guò)程;DMA 雙緩沖實(shí)現(xiàn)從核陣列上計(jì)算和訪存的并行;展開(kāi)和交錯(cuò)的LDM強(qiáng)化使用方法以提高有限片上存儲(chǔ)資源的使用效率;輸出數(shù)據(jù)塊的彈性處理避免小規(guī)模卷積下片上存儲(chǔ)資源的浪費(fèi),通過(guò)這些優(yōu)化保證了融合Winograd 卷積算法在申威26010 處理器上的高性能并行.在實(shí)驗(yàn)分析中,以依賴(lài)官方GEMM 庫(kù)接口的傳統(tǒng)Winograd卷積算法為基準(zhǔn),從優(yōu)化效果和卷積性能2 個(gè)方面進(jìn)行測(cè)試分析,證明了融合Winograd 卷積算法不僅有遠(yuǎn)高于傳統(tǒng)Winograd 卷積算法的性能,而且能夠很好地應(yīng)用于現(xiàn)實(shí)卷積場(chǎng)景.

未來(lái)將對(duì)本文工作進(jìn)行擴(kuò)展,結(jié)合其他網(wǎng)絡(luò)層優(yōu)化設(shè)計(jì)以及主流深度學(xué)習(xí)框架,進(jìn)一步探索申威26010 眾核處理器上深度學(xué)習(xí)的并行優(yōu)化.

作者貢獻(xiàn)聲明:武錚提出算法思路,設(shè)計(jì)并實(shí)現(xiàn)具體的優(yōu)化方案,撰寫(xiě)并修改論文;金旭參與算法實(shí)現(xiàn)、實(shí)驗(yàn)設(shè)計(jì)以及數(shù)據(jù)分析;安虹負(fù)責(zé)指導(dǎo)論文撰寫(xiě).

猜你喜歡
寄存器指令處理器
聽(tīng)我指令:大催眠術(shù)
Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
分簇結(jié)構(gòu)向量寄存器分配策略研究*
Imagination的ClearCallTM VoIP應(yīng)用現(xiàn)可支持Cavium的OCTEON? Ⅲ多核處理器
ADI推出新一代SigmaDSP處理器
呼嚕處理器
坐標(biāo)系旋轉(zhuǎn)指令數(shù)控編程應(yīng)用
高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
响水县| 云和县| 横峰县| 阜阳市| 淮南市| 台湾省| 青海省| 长岛县| 土默特左旗| 临城县| 蒙城县| 南投市| 屏南县| 永胜县| 齐齐哈尔市| 开阳县| 宁陕县| 浪卡子县| 黄浦区| 大城县| 集安市| 武乡县| 两当县| 巴中市| 苍山县| 凌源市| 丽江市| 始兴县| 翁牛特旗| 左贡县| 盘锦市| 临高县| 文化| 南昌县| 四会市| 佛学| 万荣县| 修水县| 佛山市| 济阳县| 阿拉善右旗|