• 
    

    
    

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

      面向稀疏卷積神經(jīng)網(wǎng)絡(luò)的CGRA 加速器研究①

      2024-03-20 08:21:58嚴(yán)明玉吳欣欣李文明吳海彬范東睿
      高技術(shù)通訊 2024年2期
      關(guān)鍵詞:加速器能效權(quán)值

      譚 龍 嚴(yán)明玉 吳欣欣 李文明 吳海彬 范東睿

      (*中國(guó)科學(xué)院計(jì)算技術(shù)研究所處理器國(guó)家重點(diǎn)實(shí)驗(yàn)室 北京 100190)

      (**中國(guó)科學(xué)院大學(xué) 北京 100049)

      稀疏卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)在可接受的精度損失范圍內(nèi)可以減少稠密卷積神經(jīng)網(wǎng)絡(luò)對(duì)硬件計(jì)算和存儲(chǔ)資源的需求,因此被應(yīng)用在各種應(yīng)用場(chǎng)景中,如自然語(yǔ)言處理領(lǐng)域[1]、圖像識(shí)別[2]和無(wú)人駕駛領(lǐng)域[3]。不幸的是,由于稀疏卷積神經(jīng)網(wǎng)絡(luò)本身的稀疏性和不規(guī)則性,導(dǎo)致稀疏卷積神經(jīng)網(wǎng)絡(luò)在通用處理器上執(zhí)行時(shí)面臨訪存效率低、硬件利用率低等問(wèn)題,這些問(wèn)題嚴(yán)重阻礙了其性能和能效提升。

      目前大量工作針對(duì)CNN 提出了基于應(yīng)用特定集成電路(application specific integrated circuits,ASICs)設(shè)計(jì)的定制化加速器[4-9],這些加速器根據(jù)CNN 特性定制化數(shù)據(jù)通路和計(jì)算單元來(lái)高效支持稀疏CNN 運(yùn)行。然而由于這些加速器是高度定制化的,一旦電路制造完成就無(wú)法改變,缺乏可重配置性和可編程性,無(wú)法適用于演進(jìn)的神經(jīng)網(wǎng)絡(luò)模型。例如DianNao[4]、NeuroMAX[5]等加速器是針對(duì)稠密神經(jīng)網(wǎng)絡(luò)設(shè)計(jì),無(wú)法有效地加速稀疏神經(jīng)網(wǎng)絡(luò)。Cambricon-X[6]和SparseTen[7]等加速器針對(duì)稀疏神經(jīng)網(wǎng)絡(luò)定制化計(jì)算單元和數(shù)據(jù)通路,但是對(duì)稀疏處理局限于某一種稀疏性上,同時(shí)由于缺乏靈活性,僅對(duì)特定模型有效,無(wú)法讓更多網(wǎng)絡(luò)模型均取得性能和能效提升。

      本文提出了一種針對(duì)稀疏CNN 設(shè)計(jì)的高能效且靈活的架構(gòu)DyCNN。為了靈活地支持不同稀疏卷積神經(jīng)網(wǎng)絡(luò)的執(zhí)行,DyCNN 從不同的稀疏CNN的運(yùn)算中抽象算子并定義精簡(jiǎn)指令,同時(shí)設(shè)計(jì)輕量級(jí)的計(jì)算單元來(lái)支持稀疏CNN 的操作。此外,DyCNN 利用粗粒度可重構(gòu)架構(gòu)(coarse-grained reconfigurable architecture,CGRA)[10]中的粗粒度數(shù)據(jù)流并行性可實(shí)現(xiàn)指令的高并行性,進(jìn)一步提升稀疏CNN的執(zhí)行效率。

      然而稀疏卷積神經(jīng)網(wǎng)絡(luò)中不僅存在權(quán)值的稀疏性,同時(shí)存在激活函數(shù)產(chǎn)生的激活值稀疏性。權(quán)值稀疏性在訓(xùn)練結(jié)束后確定下來(lái),在前向推理過(guò)程中保持不變。但由于激活值是前向推理中動(dòng)態(tài)產(chǎn)生的,其稀疏性具有動(dòng)態(tài)性。因?yàn)橥瑫r(shí)存在以上2 種稀疏性,基于CGRA 為稀疏CNN 設(shè)計(jì)高效加速器主要面臨著以下2 個(gè)挑戰(zhàn):(1)2 種不同稀疏性帶來(lái)大量不同的冗余計(jì)算和訪存指令,導(dǎo)致處理單元之間不能高效共享一組片上指令,使得整體的性能和能效較低;(2)當(dāng)稀疏CNN 被映射在處理單元上執(zhí)行時(shí),稀疏性不規(guī)則分布導(dǎo)致處理單元之間負(fù)載分布不均衡,整體硬件利用率較低從而阻礙了整體性能的提升。

      為解決上述2 個(gè)挑戰(zhàn),本文在DyCNN 設(shè)計(jì)中分別提出了以下2 個(gè)解決方法:(1)設(shè)計(jì)了基于數(shù)據(jù)感知的指令動(dòng)態(tài)過(guò)濾機(jī)制來(lái)消除稀疏性帶來(lái)的影響;(2)提出了基于負(fù)載感知的動(dòng)靜結(jié)合負(fù)載均衡策略來(lái)實(shí)現(xiàn)處理單元之間的負(fù)載均衡。

      本文的主要貢獻(xiàn)如下。

      (1)提出了一種基于CGRA 的高能效且靈活的稀疏卷積神經(jīng)網(wǎng)絡(luò)加速結(jié)構(gòu)DyCNN,它具有輕量級(jí)流水線以支持稀疏卷積操作,同時(shí)可利用數(shù)據(jù)流執(zhí)行模型來(lái)實(shí)現(xiàn)指令的高并行性。

      (2)設(shè)計(jì)了基于數(shù)據(jù)感知的指令動(dòng)態(tài)過(guò)濾機(jī)制,以消除每個(gè)處理單元中由于2 種稀疏性產(chǎn)生的不同無(wú)效指令,從而讓各處理單元之間可高效重用同一組片上指令,避免耗時(shí)的片外指令訪存。

      (3)設(shè)計(jì)了基于負(fù)載感知的動(dòng)靜結(jié)合負(fù)載均衡策略,實(shí)現(xiàn)了處理單元間的負(fù)載均衡,提高了整體硬件利用率,從而提升了整體的性能和能效。

      (4)基于RTL 來(lái)評(píng)估DyCNN 面積和能耗,并使用詳細(xì)微架構(gòu)模擬評(píng)估DyCNN 的性能和能耗。Dy-CNN 在運(yùn)行稀疏CNN 時(shí)比運(yùn)行密集CNN 實(shí)現(xiàn)了平均1.69 倍的性能提升以及3.04 倍的能效提升,比先進(jìn)的GPU(cuSPARSE)和Cambricon-X 上的解決方案分別實(shí)現(xiàn)了2.78 倍、1.48 倍性能提升和35.62倍、1.17 倍能效提升。

      1 相關(guān)工作

      1.1 針對(duì)稠密CNN 的專(zhuān)用加速器

      目前針對(duì)稠密CNN 提出的專(zhuān)用加速器已經(jīng)得到了較好的發(fā)展。DianNao[4]利用硬件化的神經(jīng)元和突觸實(shí)現(xiàn)對(duì)CNN 中乘加法的支持,利用較小的面積和能耗實(shí)現(xiàn)了針對(duì)CNN 的高吞吐量的專(zhuān)用處理器。NeuroMAX[5]提出了一種基于移位器實(shí)現(xiàn)的對(duì)數(shù)計(jì)算單元,并且設(shè)計(jì)了一個(gè)二維權(quán)值廣播數(shù)據(jù)流執(zhí)行模式來(lái)減少片外訪存和提高計(jì)算單元的硬件利用率,從而提升了整體性能和吞吐量。但是以NeuroMAX 為代表的稠密卷積神經(jīng)網(wǎng)絡(luò)加速器無(wú)法高效地支持稀疏CNN 的執(zhí)行。與此不同,本文的目標(biāo)是設(shè)計(jì)一個(gè)能靈活高效支持稀疏CNN 模型執(zhí)行的加速結(jié)構(gòu)。

      1.2 針對(duì)稀疏CNN 的專(zhuān)用加速器

      由于稠密CNN 加速器的局限性,現(xiàn)在出現(xiàn)了很多為稀疏CNN 設(shè)計(jì)的專(zhuān)用加速器[4-9]。這些專(zhuān)用神經(jīng)網(wǎng)絡(luò)加速器的目標(biāo)是通過(guò)去除激活值或權(quán)值中的零值數(shù)據(jù)來(lái)提升稀疏卷積神經(jīng)網(wǎng)絡(luò)的執(zhí)行性能和能效。為了實(shí)現(xiàn)稀疏加速,Kung 等人[8]提出的將稀疏的權(quán)值矩陣轉(zhuǎn)化成單個(gè)稠密列矩陣的方法,提高了稀疏CNN 在脈沖陣列結(jié)構(gòu)上執(zhí)行的硬件利用率。以上工作雖然有一定的加速效果,但要么無(wú)法對(duì)卷積層實(shí)現(xiàn)加速,要么是只考慮了單一稀疏性,仍然存在優(yōu)化空間。而本文的目標(biāo)是綜合考慮權(quán)值和激活值兩者的稀疏性,對(duì)稀疏CNN 實(shí)現(xiàn)全方位加速和能效提升。

      目前也有綜合考慮2 種稀疏性的優(yōu)化研究工作,如Cambricon-X[6]利用權(quán)值稀疏性在其片上緩存中僅保留非零權(quán)值,但是沒(méi)有對(duì)激活值數(shù)據(jù)進(jìn)行壓縮處理,因此可以減少零值權(quán)值對(duì)應(yīng)的計(jì)算和訪存時(shí)間,但激活值的稀疏性仍然會(huì)帶來(lái)計(jì)算和訪存浪費(fèi)。SparseTen[7]提出使用新穎的位掩碼來(lái)表示稀疏張量,基于此來(lái)實(shí)現(xiàn)內(nèi)聯(lián)接計(jì)算稀疏向量-向量乘法,提升了稀疏卷積運(yùn)算的效率。雖然這些加速器都實(shí)現(xiàn)了性能和能效提升,但是由于硬件結(jié)構(gòu)缺乏可重配置和硬件靈活性,無(wú)法很好地適用新的神經(jīng)網(wǎng)絡(luò)模型。與以上加速器對(duì)比,本文基于CGRA 架構(gòu)提供了更高的硬件靈活性和更廣的適用范圍。針對(duì)不同模型特點(diǎn),它可以隨著稀疏CNN 模型的演進(jìn)和變化增加或刪減指令,重新配置硬件結(jié)構(gòu)和映射方式來(lái)支持更多的稀疏CNN 模型。

      1.3 基于CGRA 的神經(jīng)網(wǎng)絡(luò)加速器

      CGRA 近年來(lái)因?yàn)槠浼婢吒呖删幊绦院透咝阅芏玫搅藦V泛的關(guān)注,目前已有工作基于CGRA 設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)相關(guān)的加速器。Ando 等人[11]基于CGRA 為稠密CNN 提出了一個(gè)時(shí)域多線程加速器。它可以通過(guò)多個(gè)計(jì)算階段來(lái)提高輸入數(shù)據(jù)的局部性和重用性,但是該加速器無(wú)法高效支持稀疏CNN 的運(yùn)行。CQNN[12]基于CGRA 提出了一個(gè)針對(duì)量化神經(jīng)網(wǎng)絡(luò)加速框架,可以靈活地配置硬件結(jié)構(gòu)來(lái)支持各種精度的神經(jīng)網(wǎng)絡(luò)執(zhí)行。但是它同樣無(wú)法支持稀疏化CNN 的執(zhí)行。與以上工作不同的是,本文目標(biāo)是基于CGRA 設(shè)計(jì)高能效且靈活的稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器以支持演變迅速的稀疏網(wǎng)絡(luò)模型。

      2 背景

      本節(jié)首先介紹稀疏卷積神經(jīng)網(wǎng)絡(luò),以及稀疏卷積神經(jīng)網(wǎng)絡(luò)中的2 種數(shù)據(jù)稀疏特性,之后介紹粗粒度可重構(gòu)架構(gòu)(CGRA)。

      2.1 稀疏卷積神經(jīng)網(wǎng)絡(luò)

      目前主流的CNN 模型通常通過(guò)構(gòu)建深層網(wǎng)絡(luò)結(jié)構(gòu)來(lái)實(shí)現(xiàn)較高的準(zhǔn)確率。CNN 模型中計(jì)算層主要包括卷積層(CONV)、池化層(POOL)和全連接層(FC)。其中卷積層執(zhí)行時(shí)間占據(jù)了整個(gè)網(wǎng)絡(luò)模型處理執(zhí)行時(shí)間的80%以上[13],因此卷積層無(wú)疑是整個(gè)CNN 模型的瓶頸所在。每個(gè)卷積層由高維卷積操作組成,它通過(guò)把過(guò)濾器(Filters)應(yīng)用到輸入激活(input activation,IA)上,兩者進(jìn)行卷積操作來(lái)提取輸入激活的局部特征。在卷積操作完成之后,會(huì)利用激活函數(shù)來(lái)引入非線性因素生成輸出激活(output activation,OA),比如整流線性單元(rectified linear unit,ReLU)[14]是常使用的激活函數(shù)。其中Filters 的值是使用訓(xùn)練算法[15]對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練學(xué)習(xí)得到的權(quán)值(Weights)。

      圖1 展示了一個(gè)完整的卷積計(jì)算的可視化過(guò)程,表1 中列出了卷積計(jì)算中的主要參數(shù),通常一個(gè)CNN 模型中包含多個(gè)連續(xù)的卷積層,OA 在相鄰卷積層之間傳遞,上一個(gè)卷積層生成的OA 作為下一卷積層的IA 參與卷積運(yùn)算,如此迭代下去,直到所有卷積層計(jì)算完成。

      表1 卷積層的參數(shù)信息

      圖1 CNN 模型計(jì)算流程

      由于CNN 模型越來(lái)越復(fù)雜,參數(shù)越來(lái)越多,增加了對(duì)計(jì)算和存儲(chǔ)硬件資源的需求。因此有研究人員提出了許多壓縮CNN 模型參數(shù)的方法(例如剪枝[16]),這些方法對(duì)結(jié)果精度損失影響較小,同時(shí)可以大量減小模型參數(shù)大小,從而減少CNN 對(duì)計(jì)算和存儲(chǔ)的需求。然而,上述對(duì)模型參數(shù)壓縮的方法會(huì)導(dǎo)致網(wǎng)絡(luò)模型的權(quán)值參數(shù)包含了大量的零值,因此權(quán)值參數(shù)的稀疏性較高。在Han 等人[16]研究中,Alex-Net[17]、VGG16[18]等網(wǎng)絡(luò)模型通過(guò)剪枝后的權(quán)值稀疏度(零值的數(shù)據(jù)量占數(shù)據(jù)總量的比率)能高達(dá)90%以上[16]。這種稀疏性是伴隨模型參數(shù)訓(xùn)練完成而產(chǎn)生的,在使用稀疏卷積神經(jīng)網(wǎng)絡(luò)前向推理過(guò)程中,權(quán)值稀疏性不再發(fā)生改變,因此可視為一種靜態(tài)稀疏性。

      在稀疏CNN 執(zhí)行過(guò)程中,由于通常包含了激活函數(shù),比如ReLU 函數(shù),它將輸出激活中小于0 的數(shù)置為0,從而在輸出激活中產(chǎn)生了稀疏性。由于0與任何數(shù)據(jù)進(jìn)行乘法操作,結(jié)果為0,與另一值進(jìn)行加法操作,結(jié)果與該值相等,因此0 被視為無(wú)效值,其參與的計(jì)算操作被視為無(wú)效計(jì)算,可以去除。但與權(quán)值稀疏性不同的是,激活值稀疏性是在計(jì)算過(guò)程中激活函數(shù)確定的,無(wú)法在前向推理執(zhí)行前提前得知;同時(shí)由于隨著上一卷積層生成的OA 作為下一卷積層IA 計(jì)算并不斷迭代,所以該稀疏性在執(zhí)行中是傳遞性的,因此可視為一種動(dòng)態(tài)稀疏性。

      2.2 粗粒度數(shù)據(jù)流架構(gòu)

      CGRA 從20 世紀(jì)90 年代開(kāi)始迅速發(fā)展[19]。這種架構(gòu)是基于20 世紀(jì)60 年代提出的可重構(gòu)計(jì)算概念的自然粗粒度實(shí)現(xiàn)[20]。它不僅像ASIC 一樣具有高能效和高性能,而且還具有出色的可編程性[21]。

      CGRA 與數(shù)據(jù)流體系結(jié)構(gòu)[22]關(guān)系密切,它們通常與數(shù)據(jù)流機(jī)制集成在一起,因此CGRA 的操作可以由數(shù)據(jù)流驅(qū)動(dòng)。CGRA 內(nèi)部通常由一個(gè)二維處理單元(processing element,PE)陣列組成,CGRA 的配置信息定義了這些PE 的功能和它們之間的互連關(guān)系。CGRA 可以通過(guò)互連網(wǎng)絡(luò)利用PE 之間的高效數(shù)據(jù)流執(zhí)行方式,這是傳統(tǒng)處理器結(jié)構(gòu)不支持的方式。通過(guò)有效的數(shù)據(jù)流和控制流的結(jié)合,CGRA 可以避免PE 之間的過(guò)度順序化執(zhí)行,利用粗粒度并行性提升執(zhí)行效率。同時(shí)CGRA 可以進(jìn)一步支持PE 之間的顯式數(shù)據(jù)通信,從而減少PE 之間數(shù)據(jù)移動(dòng)的能耗。因此這種具有數(shù)據(jù)流和控制流結(jié)合的混合模式是CGRA 同時(shí)具有高性能和高能效的重要原因。基于以上分析,本文利用CGRA 去優(yōu)化稀疏卷積神經(jīng)網(wǎng)絡(luò)執(zhí)行,可以在不犧牲可編程性的情況下實(shí)現(xiàn)DyCNN 的高性能和高能效。

      為了充分提高指令的并行性,DyCNN 在PE 陣列層級(jí)采用經(jīng)典的數(shù)據(jù)流并行執(zhí)行模型[23]。如圖2(a)所示,在該執(zhí)行模型中,CNN 應(yīng)用被編譯劃分成多部分指令塊(如C1~C9 等)。每個(gè)指令塊中包含一系列硬件指令。所有的指令塊根據(jù)依賴關(guān)系將應(yīng)用程序表示為數(shù)據(jù)流圖,然后將其映射到圖2(b)所示的二維PE 陣列中執(zhí)行。與PE 間的執(zhí)行模型不同,在每個(gè)PE 內(nèi)部,指令塊采用順序流方式執(zhí)行。

      圖2 指令在PE 上映射方式和稀疏導(dǎo)致PE 的指令重用差異

      3 稀疏卷積神經(jīng)網(wǎng)絡(luò)面臨的挑戰(zhàn)

      本節(jié)通過(guò)分析稀疏卷積神經(jīng)網(wǎng)絡(luò)在CGRA 上執(zhí)行的挑戰(zhàn)和先前工作的不足來(lái)闡述本文工作的設(shè)計(jì)理念和設(shè)計(jì)要素。

      3.1 兩種稀疏性并存導(dǎo)致大量無(wú)效指令

      由2.1 節(jié)可知,在稀疏卷積神經(jīng)網(wǎng)絡(luò)中存在著權(quán)值和激活值2 種稀疏性,在稀疏卷積神經(jīng)網(wǎng)絡(luò)前向推理過(guò)程中,會(huì)生成大量權(quán)值和激活值中零值相對(duì)應(yīng)的指令。由于在矩陣乘法運(yùn)算中,零值參與的計(jì)算對(duì)結(jié)果不會(huì)產(chǎn)生任何影響,因此這些數(shù)據(jù)對(duì)應(yīng)的計(jì)算被視為無(wú)效計(jì)算。這些無(wú)效計(jì)算對(duì)應(yīng)的指令訪存、數(shù)據(jù)訪存和指令執(zhí)行的時(shí)間和能耗會(huì)導(dǎo)致稀疏卷積神經(jīng)網(wǎng)絡(luò)在CGRA 上執(zhí)行性能和能效大幅降低。

      如圖2(c)所示,PE1、PE3 分別運(yùn)行2 個(gè)通道3×3 的Filter 和3 ×3 的IA 的卷積運(yùn)算(黑粗線框標(biāo)示出來(lái)的部分)。若為稠密網(wǎng)絡(luò),運(yùn)行一個(gè)通道卷積運(yùn)算的一組指令模板共包含如圖2(d)所示9 組指令,其中主要包含了讀取數(shù)據(jù)和乘加運(yùn)算。其中圖2(c)中矩陣中標(biāo)灰的代表有效數(shù)值,白色的代表無(wú)效值,無(wú)效值所對(duì)應(yīng)的圖2(d)中指令組是無(wú)效指令,這些無(wú)效指令的執(zhí)行會(huì)占據(jù)大量的時(shí)間,嚴(yán)重阻礙了整體性能和能效的提升。

      目前已有工作通過(guò)排除固定的權(quán)值稀疏性來(lái)提升性能,但仍然面臨著存在激活值稀疏性的問(wèn)題[6,24]。如果在CGRA 上只是通過(guò)預(yù)先感知權(quán)值的固定稀疏性,雖然一定程度上能去除各PE 中部分無(wú)效指令的執(zhí)行,但是由于稀疏數(shù)據(jù)的分布不規(guī)則,各PE 之間執(zhí)行的指令差異較大,使得片上PE 無(wú)法重用相同的指令,每個(gè)PE 都需要從片外訪存自身的指令,從而增加耗時(shí)較長(zhǎng)的片外指令訪存。如圖2(c)所示,由于PE 所執(zhí)行的稀疏數(shù)據(jù)分布不一致,圖2(d)中對(duì)應(yīng)有效執(zhí)行的指令(黑粗線框標(biāo)出)也差異很大,如對(duì)于PE1,第2、5、7、8 組指令為其有效數(shù)據(jù)對(duì)應(yīng)的真正有效的指令,而對(duì)PE9,第1、2、5、6、9 組指令才是真正有效的指令。若采用此方法,會(huì)導(dǎo)致各PE 之間無(wú)法共用同一組相同指令模版(只需要根據(jù)配置修改數(shù)據(jù)訪存地址),需要單獨(dú)地去片外訪存自身有效數(shù)據(jù)對(duì)應(yīng)的有效指令。這種高延遲的指令訪存導(dǎo)致PE 計(jì)算部件處于空閑等待狀態(tài),降低了整體硬件的利用率,從而降低了整體執(zhí)行性能并增加了能耗。

      為了支撐這一點(diǎn),本文構(gòu)建了一個(gè)典型的CGRA 加速器模型,并使用工作[6]中的稀疏去除方法分別運(yùn)行AlexNet 和VGG16 對(duì)應(yīng)的稠密網(wǎng)絡(luò)和稀疏網(wǎng)絡(luò),收集其指令執(zhí)行和指令訪存時(shí)間。圖3 所為AlexNet(第CONV2 層到第CONV5 層)和VGG16(第CONV3_1 層到第CONV5_3 層)對(duì)應(yīng)稠密(De)和稀疏(Sp)卷積網(wǎng)絡(luò)中指令的訪存時(shí)間和執(zhí)行時(shí)間分解。從圖3 中可以看到,稠密卷積操作中指令的訪存時(shí)間僅占總時(shí)間的1%~2%,絕大部分的時(shí)間被指令執(zhí)行時(shí)間所占據(jù),這意味著在片上指令的重用性很高,耗時(shí)指令的片外訪存較少,整體硬件利用率較高。與此不同的是,在執(zhí)行稀疏卷積操作時(shí),可以看到指令訪存時(shí)間占總時(shí)間比例比較大,最高在VGG16 的CONV5_1 層能達(dá)到60%。雖然稀疏卷積操作中指令的執(zhí)行時(shí)間較稠密卷積操作有所減少,但是因?yàn)楹臅r(shí)較長(zhǎng)的片外指令訪存和未去除的激活值稀疏性,導(dǎo)致總體的執(zhí)行時(shí)間要比稠密卷積操作甚至更長(zhǎng)。從圖3 中還可以看出輸出激活值的稀疏度也較高,比如AlexNet 的CONV5 層能達(dá)到90%,因此如何有效去除稀疏卷積神經(jīng)網(wǎng)絡(luò)中2種并存的稀疏性帶來(lái)的影響對(duì)于提升執(zhí)行效率和能效是一個(gè)迫在眉睫的問(wèn)題。

      圖3 AlexNet 和VGG16 運(yùn)行時(shí)間分解(左坐標(biāo)軸表示稠密(De)和稀疏(Sp)網(wǎng)絡(luò)指令執(zhí)行時(shí)間分解,并且將Sp 的執(zhí)行時(shí)間歸一化到De;右坐標(biāo)軸表示輸出激活值稀疏度;最后一組柱線展示各層De 和Sp 的幾何平均值(GM))

      在粗粒度可重構(gòu)架構(gòu)中,每個(gè)PE 內(nèi)可配置獨(dú)立的取指和控制單元,因此本文提出了數(shù)據(jù)動(dòng)態(tài)感知的指令過(guò)濾機(jī)制來(lái)使得每個(gè)PE 在指令執(zhí)行時(shí)過(guò)濾掉無(wú)效值相關(guān)的冗余指令,從而避免冗余指令和數(shù)據(jù)訪存操作,同時(shí)使得每個(gè)PE 之間仍然能像稠密網(wǎng)絡(luò)一樣高效共享同樣的片上指令,減少耗時(shí)的指令片外訪存,從而去除稀疏性帶來(lái)的影響。

      3.2 稀疏性導(dǎo)致處理單元之間負(fù)載不均衡

      由于稀疏卷積神經(jīng)網(wǎng)絡(luò)在前向推理過(guò)程中存在著權(quán)值和激活數(shù)據(jù)兩方面的稀疏性,并且稀疏性分布十分不規(guī)則,因此將負(fù)載分配給CGRA 中不同PE執(zhí)行后,會(huì)導(dǎo)致不同PE 之間的負(fù)載分布不均衡。具體表現(xiàn)為有些PE 處于忙碌,而有些PE 處于閑置等待狀態(tài),從而導(dǎo)致整體硬件資源利用率較低,性能較差,能耗較高。

      根據(jù)3.1 節(jié)中實(shí)驗(yàn)統(tǒng)計(jì)執(zhí)行CONV5_1 層處理單元的計(jì)算部件利用率,從圖4 中可以看到不同PE之間的計(jì)算部件利用率(實(shí)際性能和理論峰值性能的比值)相差很大,其中有些PE 計(jì)算部件利用率能夠達(dá)到接近60%,但是有些PE 計(jì)算部件的利用率僅有20%。這種相差較大的計(jì)算部件利用率會(huì)導(dǎo)致PE 之間互相等待,運(yùn)行慢的PE 拖慢了整體的執(zhí)行速度,延長(zhǎng)了整體的執(zhí)行時(shí)間,從而降低了整體的硬件資源利用率,嚴(yán)重阻礙了整體性能的提升。在負(fù)載不均衡的情況下,稀疏CNN 的執(zhí)行效率低下,整體性能難以提升。為了充分利用稀疏網(wǎng)絡(luò)的計(jì)算和存儲(chǔ)優(yōu)勢(shì),稀疏卷積神經(jīng)網(wǎng)絡(luò)的負(fù)載不均衡問(wèn)題亟待解決。

      圖4 同一行和同一列PE 中的計(jì)算部件利用率

      在初始化階段進(jìn)行負(fù)載劃分時(shí),可以先通過(guò)感知靜態(tài)的權(quán)值稀疏性和輸入激活的動(dòng)態(tài)稀疏性,采用加權(quán)輪詢方式進(jìn)行均衡分配。在執(zhí)行過(guò)程當(dāng)中,新的輸出激活值不斷生成,結(jié)合3.1 節(jié)中提到的數(shù)據(jù)動(dòng)態(tài)感知方式可以實(shí)現(xiàn)相鄰PE 之間動(dòng)態(tài)負(fù)載竊取和調(diào)度,從而進(jìn)一步實(shí)現(xiàn)負(fù)載均衡,提升整體硬件的利用率。

      4 DyCNN 加速結(jié)構(gòu)

      本節(jié)介紹本文基于CGRA 提出的架構(gòu)DyCNN,首先介紹整體結(jié)構(gòu)和執(zhí)行方式;然后介紹為了消除由于權(quán)值和激活值的稀疏性影響設(shè)計(jì)的數(shù)據(jù)動(dòng)態(tài)感知的稀疏去除機(jī)制和多階段之間的流水化執(zhí)行機(jī)制;最后闡述為了提高硬件利用率設(shè)計(jì)的動(dòng)靜結(jié)合的負(fù)載均衡策略。

      4.1 DyCNN 整體結(jié)構(gòu)介紹

      本文提出的架構(gòu)如圖5(a)所示,它主要由處理單元(PE)、控制器、權(quán)值和激活值靜態(tài)隨機(jī)存取存儲(chǔ)器(static random access memory,SRAM)以及片上網(wǎng)絡(luò)組成。平鋪的PE 之間通過(guò)片上網(wǎng)絡(luò)互連??刂破靼藸顟B(tài)寄存器和負(fù)載調(diào)度器,負(fù)責(zé)整體PE陣列的狀態(tài)收集和負(fù)載控制。權(quán)值和輸入輸出激活值存儲(chǔ)在相應(yīng)的片上SRAM 中。如圖5(b)所示,每個(gè)PE 也由一個(gè)控制單元、指令和操作數(shù)緩存、路由器以及一個(gè)消除數(shù)據(jù)相關(guān)的輕量級(jí)計(jì)算單元組成。每個(gè)PE 中都包含翻譯器、指令選擇器,它們是實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)感知機(jī)制的主要單元。圖5(c)展示了Dy-CNN 為支持稀疏CNN 操作而定義的指令格式,其中具有保留位,可以根據(jù)新的CNN 模型輕松進(jìn)行擴(kuò)展,從而能支持演變迅速的CNN 模型。

      圖5 DyCNN 的結(jié)構(gòu)圖概覽

      同時(shí)為了提高數(shù)據(jù)在片上的重用性,DyCNN 采用了行列共享的負(fù)載劃分和映射執(zhí)行模型(row-column sharing scheme,RCS)。如圖6 所示,本文將IA按行劃分成的行分區(qū),保證每個(gè)行分區(qū)的非0 值基本相同,并且將不同的行分區(qū)映射給不同的PE 行執(zhí)行,這樣位于同一行的PE 可以共享相同的IA 行分區(qū)。與此同時(shí)將并列不同通道的Filter 映射給不同列的PE 執(zhí)行,從而使得位于同一列的PE 共享相同的Filter。通過(guò)以上的映射執(zhí)行方式,可以有效地提高片上PE 之間對(duì)IA 和Filter 的共享和重用性,減少耗時(shí)的片外訪存。

      圖6 數(shù)據(jù)映射執(zhí)行模型

      4.2 數(shù)據(jù)動(dòng)態(tài)感知機(jī)制

      由于激活值稀疏性是在計(jì)算過(guò)程中動(dòng)態(tài)生成和在不同卷積層之間傳遞的,因此為了有效地感知激活值稀疏性,本文提出了基于位圖(bitmap)的數(shù)據(jù)動(dòng)態(tài)感知機(jī)制。該機(jī)制主要思想是通過(guò)將權(quán)值和激活值在計(jì)算過(guò)程中動(dòng)態(tài)地轉(zhuǎn)換成bitmap,然后通過(guò)感知對(duì)應(yīng)的bitmap 的值來(lái)判斷數(shù)據(jù)是有效還是無(wú)效,進(jìn)而通過(guò)數(shù)據(jù)的無(wú)效性和有效性來(lái)判斷指令的有效性。在bitmap 中,使用1 bit 來(lái)表示數(shù)據(jù)的有效性,其中0 表示數(shù)據(jù)無(wú)效,1 表示數(shù)據(jù)有效,可以對(duì)數(shù)據(jù)實(shí)現(xiàn)高效的壓縮存儲(chǔ),減少了感知稀疏性的成本和額外開(kāi)銷(xiāo)。

      如圖7 所示,數(shù)據(jù)翻譯器的功能是動(dòng)態(tài)地實(shí)現(xiàn)激活數(shù)據(jù)感知,它從存儲(chǔ)輸出激活值的緩存中讀出輸出激活值,然后將輸出激活值中的每個(gè)數(shù)值執(zhí)行按位或(OR)操作,生成1 bit 的數(shù)值結(jié)果來(lái)代表該數(shù)值的有效性。如果該數(shù)值的所有數(shù)值位bit 不全為0 時(shí),通過(guò)OR 操作則會(huì)生成1 bit 為1 的數(shù)值,代表該數(shù)值為有效數(shù)值,會(huì)參與有效計(jì)算。如果輸出緩存所有數(shù)值位的全為0,則會(huì)生成1 bit 為0 的數(shù)值,代表該數(shù)值為無(wú)效數(shù)值,該數(shù)值參與的矩陣運(yùn)算是無(wú)效計(jì)算。生成的輸出激活值對(duì)應(yīng)的bitmap 會(huì)被存儲(chǔ)在bitmap 緩存中。權(quán)值數(shù)據(jù)同樣可以利用數(shù)據(jù)翻譯單元來(lái)將其轉(zhuǎn)換成bitmap 存儲(chǔ)在緩存中。不同的是,因?yàn)闄?quán)值數(shù)據(jù)在前向推理過(guò)程中是靜態(tài)的,在稀疏卷積神經(jīng)網(wǎng)絡(luò)前向推理過(guò)程中,只需要在初始化時(shí)執(zhí)行一次數(shù)值和bitmap 轉(zhuǎn)換即可,不需要重復(fù)轉(zhuǎn)換;而輸出激活數(shù)據(jù)在多層卷積的模型下是動(dòng)態(tài)生成的,因此在每層生成一次新的輸出激活數(shù)據(jù)時(shí),需要使用數(shù)據(jù)翻譯單元將輸出激活數(shù)據(jù)轉(zhuǎn)換成新的bitmap 存儲(chǔ)在緩存中,以供后續(xù)指令選擇單元使用。

      圖7 數(shù)據(jù)動(dòng)態(tài)感知和指令動(dòng)態(tài)過(guò)濾機(jī)制

      4.3 基于數(shù)據(jù)感知的指令動(dòng)態(tài)過(guò)濾機(jī)制

      為了通過(guò)感知數(shù)據(jù)的稀疏性,去除每個(gè)PE 上冗余無(wú)效指令,使得每個(gè)PE 能夠共享同一組指令并避免冗余指令的片外訪存,本文設(shè)計(jì)了指令選擇器來(lái)對(duì)無(wú)效數(shù)據(jù)對(duì)應(yīng)的計(jì)算和訪存指令進(jìn)行篩選。首先通過(guò)數(shù)據(jù)翻譯單元?jiǎng)討B(tài)地將權(quán)值數(shù)據(jù)和輸出激活數(shù)據(jù)轉(zhuǎn)換成bitmap 存儲(chǔ),接下來(lái)需要利用權(quán)值數(shù)據(jù)和輸出激活數(shù)據(jù)的bitmap 對(duì)指令進(jìn)行相應(yīng)的篩選。

      圖7 展示了指令選擇單元對(duì)PE 中指令的篩選過(guò)程,主要包含2 個(gè)階段。第1 階段:首先指令選擇單元將IA 的bitmap 和Filters 的bitmap 從相應(yīng)緩存地址中讀出;然后將IA 和Filters 參與計(jì)算的對(duì)應(yīng)數(shù)據(jù)的作按位與(AND)運(yùn)算,從而得出數(shù)據(jù)位對(duì)應(yīng)的指令標(biāo)記,并將指令標(biāo)記存儲(chǔ)在指令標(biāo)記緩存中。如果對(duì)應(yīng)的指令標(biāo)記為0,則代表對(duì)應(yīng)的指令為無(wú)效指令,這部分指令是過(guò)濾目標(biāo)。

      第2 階段:在得到指令標(biāo)記信息之后,指令選擇單元從指令標(biāo)記緩存中取出相應(yīng)的標(biāo)記,根據(jù)相應(yīng)的標(biāo)記信息去指令緩存中取出對(duì)應(yīng)有效的指令,并且將對(duì)應(yīng)有效的指令送進(jìn)流水化計(jì)算單元中進(jìn)行執(zhí)行。指令控制單元不斷從指令標(biāo)記緩存中讀取指令標(biāo)記,并對(duì)指令標(biāo)記信息逐條篩選,將每條指令標(biāo)記為1 的指令篩選出來(lái)送進(jìn)計(jì)算單元執(zhí)行;而指令標(biāo)記為0 的指令則不執(zhí)行;直到所有的指令標(biāo)記信息檢測(cè)結(jié)束。

      4.4 指令執(zhí)行和選擇階段流水化

      第4.2 和4.3 節(jié)展示了本文設(shè)計(jì)的數(shù)據(jù)動(dòng)態(tài)感知和指令選擇單元主要結(jié)構(gòu)和執(zhí)行流程。可以看出本文在每個(gè)PE 內(nèi)部指令的執(zhí)行主要?jiǎng)澐譃橐韵?個(gè)執(zhí)行階段:(1)數(shù)據(jù)翻譯階段:負(fù)責(zé)將權(quán)值數(shù)據(jù)和激活數(shù)據(jù)動(dòng)態(tài)轉(zhuǎn)化成存儲(chǔ)需求較小的bitmap 格式,從而壓縮數(shù)據(jù)存儲(chǔ),并且用于之后的指令選擇階段實(shí)現(xiàn)去除稀疏性帶來(lái)的冗余指令;(2)指令選擇階段:首先利用數(shù)據(jù)翻譯階段生成的數(shù)據(jù)bitmap 來(lái)感知數(shù)據(jù)的有效性,利用數(shù)據(jù)的有效性生成指令標(biāo)記信息,并且利用指令標(biāo)記信息選擇出有效的指令;(3)計(jì)算階段:將指令選擇階段篩選出來(lái)的有效指令和數(shù)據(jù)讀取出來(lái)并送入計(jì)算單元執(zhí)行真正的有效計(jì)算。

      如圖8 所示,為了提升每個(gè)PE 內(nèi)以上3 個(gè)執(zhí)行階段的執(zhí)行效率,本文的設(shè)計(jì)將這3 個(gè)執(zhí)行階段流水化執(zhí)行。因?yàn)槠洗鎯?chǔ)以雙緩沖的形式組織,可以一部分用于存儲(chǔ)正在計(jì)算的數(shù)據(jù),一部分用于存儲(chǔ)下一階段需要執(zhí)行的數(shù)據(jù),因此可以有效避免不同階段流水化執(zhí)行的阻塞問(wèn)題。在一個(gè)PE 內(nèi)部,當(dāng)一部分?jǐn)?shù)據(jù)進(jìn)入數(shù)據(jù)翻譯階段之后,隨著bitmap數(shù)據(jù)的慢慢生成,這部分?jǐn)?shù)據(jù)可以直接進(jìn)入指令選擇和計(jì)算階段,以很好地將數(shù)據(jù)翻譯、指令選擇和計(jì)算階段的時(shí)間重疊起來(lái),從而掩蓋掉數(shù)據(jù)翻譯和指令選擇的時(shí)間開(kāi)銷(xiāo),最大程度地減少稀疏去除機(jī)制帶來(lái)的性能損失。

      圖8 各階段流水化執(zhí)行策略

      4.5 基于負(fù)載感知的動(dòng)靜結(jié)合均衡策略

      權(quán)值和激活數(shù)據(jù)的稀疏不規(guī)則性,導(dǎo)致分配給每個(gè)PE 的權(quán)值和激活值有效數(shù)據(jù)數(shù)量不均衡,每個(gè)PE 之間出現(xiàn)負(fù)載不均衡現(xiàn)象。為了充分提高DyCNN 中整體計(jì)算部件的利用率,本文提出了基于負(fù)載感知的動(dòng)靜結(jié)合的負(fù)載均衡策略。前人工作[24]提出基于權(quán)值中有效值數(shù)量來(lái)進(jìn)行負(fù)載的劃分和映射,它將PE 陣列按列進(jìn)行分組,并使得同一組的PE共享同一組權(quán)值;對(duì)于不同的組之間基于權(quán)值中非零權(quán)值個(gè)數(shù)去進(jìn)行劃分,使得不同組之間劃分得到的權(quán)值中非零值數(shù)量盡量均衡。這種負(fù)載均衡策略只考慮了權(quán)值靜態(tài)稀疏性的影響,沒(méi)有解決激活值動(dòng)態(tài)稀疏性帶來(lái)的影響。因?yàn)榧せ顢?shù)據(jù)的稀疏性是在計(jì)算過(guò)程中動(dòng)態(tài)變化的,DyCNN 不能簡(jiǎn)單采用初始化負(fù)載映射算法來(lái)保證負(fù)載均衡,所以本文為DyCNN 提出感知數(shù)據(jù)的靜態(tài)和動(dòng)態(tài)相結(jié)合的負(fù)載均衡策略。

      根據(jù)4.1 節(jié)中的描述,為了增加片上指令和數(shù)據(jù)的重用性,減少片外的訪存,DyCNN 采用了如圖6所示的負(fù)載映射和執(zhí)行方式。這種映射執(zhí)行方式進(jìn)一步增加了IA 和Filters 的片上重用性。但是每層的IA 和Filters 都存在稀疏性,IA 和Filters 兩者都是影響不同PE 之間負(fù)載均衡的因素,因此在進(jìn)行負(fù)載初始劃分時(shí),DyCNN 需要綜合考慮IA 和Filters中的有效值數(shù)量來(lái)實(shí)現(xiàn)負(fù)載的均衡分配。

      首先介紹靜態(tài)負(fù)載均衡策略。由于水平方向上的PE 復(fù)用相同的IA,所有對(duì)應(yīng)IA 的有效工作負(fù)載一致;同理垂直方向上的PE 復(fù)用相同的Filters,所以它們之間的有效工作負(fù)載基本一致?;诖?在進(jìn)行負(fù)載劃分時(shí),先利用4.2 節(jié)的稀疏感知機(jī)制,對(duì)有效工作負(fù)載進(jìn)行統(tǒng)計(jì),對(duì)于每個(gè)PE 列,它們被映射新的Filters 時(shí)采用加權(quán)輪詢算法按非零權(quán)值的數(shù)量排序依次分配給具有不同權(quán)重的PE 列。含有較少負(fù)載的PE 列權(quán)重則高,優(yōu)先被分配有效值多的Filters;含有較多負(fù)載的PE 列權(quán)重則低,會(huì)被分配有效值少的Filters。如圖9 所示,假設(shè)一共有6 個(gè)具有不同非零權(quán)值數(shù)量的Filters(如F1 的權(quán)值數(shù)量是20)分配給3 列PE 執(zhí)行,采用先將F1~F6 按非零權(quán)值數(shù)量進(jìn)行排序,然后按大小輪流分配給各列PE。DyCNN 將IA 按行進(jìn)行分區(qū)劃分,然后分配給每個(gè)PE 行,同時(shí)保證每個(gè)行分區(qū)的非零值數(shù)量基本相等。

      圖9 基于加權(quán)輪詢的靜態(tài)負(fù)載均衡策略

      其次介紹動(dòng)態(tài)負(fù)載均衡策略。為了在運(yùn)行時(shí)解決由于動(dòng)態(tài)變化的輸入激活稀疏性導(dǎo)致的負(fù)載不均衡問(wèn)題,DyCNN 在靜態(tài)負(fù)載均衡策略基礎(chǔ)上進(jìn)一步設(shè)計(jì)了一個(gè)動(dòng)態(tài)均衡策略(dynamic balancing scheme,DBS)。它主要由2 個(gè)因素驅(qū)動(dòng):(1)不同PE 行之間是共享輸入激活的,且輸入激活是動(dòng)態(tài)生成的;(2)通過(guò)使用RCS 負(fù)載映射方式,DyCNN 可以避免PE 訪問(wèn)彼此不同輸入激活之間的同步操作。

      對(duì)于動(dòng)態(tài)均衡策略的第1 個(gè)設(shè)計(jì)是如何有效表示工作負(fù)載的,如第4.1 節(jié)所述,DyCNN 的工作負(fù)載由輸入激活的連續(xù)行分區(qū)表示。因此DyCNN 選擇在輸入激活矩陣的行分區(qū)中使用開(kāi)始索引IS和結(jié)束索引IE來(lái)表示負(fù)載范圍,這2 個(gè)變量存儲(chǔ)在片上緩存中。

      第2 個(gè)設(shè)計(jì)是工作負(fù)載竊取方案。前人工作通常在工作隊(duì)列中加入同步原語(yǔ),或者為閑置單元中斷忙碌單元。這些方法都會(huì)帶來(lái)巨大的開(kāi)銷(xiāo)。相反,本文利用DyCNN 中控制器的狀態(tài)寄存器來(lái)減少開(kāi)銷(xiāo)。DyCNN 中的處理單元只需訪問(wèn)狀態(tài)寄存器中各處理單元IS和IE的值即可實(shí)現(xiàn)在不中斷被竊取單元當(dāng)前的工作情況下完成負(fù)載竊取。

      算法1 展示了本文的DBS 具體實(shí)現(xiàn)。最初每個(gè)處理單元Pi都分配有具有相同數(shù)量的非零值的行分區(qū),由索引IS和IE定義負(fù)載區(qū)間。每個(gè)線程使用一個(gè)同步變量鎖來(lái)保證負(fù)載竊取的原子性。每個(gè)處理單元對(duì)卷積運(yùn)算的處理從IS開(kāi)始,當(dāng)IS=IE時(shí),處理單元已完成其初始工作量并進(jìn)入空閑狀態(tài),然后請(qǐng)求選擇一個(gè)相鄰忙碌的處理單元Pv進(jìn)行負(fù)載的竊取。在DyCNN 中選擇讓閑置處理單元竊取忙碌處理單元一半的工作量,因?yàn)樗言谇叭斯ぷ髦凶C明效果較好[25]。

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

      本節(jié)將展示DyCNN 執(zhí)行稀疏化之后的AlexNet和VGG16 的卷積層相比稀疏化之前的加速效果,并將優(yōu)化效果與先進(jìn)的通用架構(gòu)圖形處理器(graphics processing unit,GPU)和稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器Cambiricon-X 上的方案比較從性能、能效兩方面提供詳細(xì)的結(jié)果對(duì)比和分析。

      5.1 實(shí)驗(yàn)平臺(tái)配置和對(duì)比基準(zhǔn)

      為了評(píng)估DyCNN 的有效性,本文用Verilog 實(shí)現(xiàn)了DyCNN 的結(jié)構(gòu),并使用Synopsys 公司的編譯器和臺(tái)積電12 nm GP 標(biāo)準(zhǔn)VT 庫(kù)工藝進(jìn)行綜合來(lái)準(zhǔn)確評(píng)估DyCNN 的功率和面積。為了對(duì)DyCNN 進(jìn)行準(zhǔn)確的性能評(píng)估,本文基于中國(guó)科學(xué)院計(jì)算技術(shù)研究所自主研發(fā)的大規(guī)模并行模擬框架SimICT[26]實(shí)現(xiàn)時(shí)鐘精確型的模擬器并使用Ramulator[27]來(lái)集成存儲(chǔ)子系統(tǒng)。整個(gè)加速器的面積為14.22 mm2,單個(gè)PE 面積為0.16 mm2。片上SRAM 的面積、功耗和訪問(wèn)延遲使用Cacti 6.5[28]估算。

      表2 展示了用于評(píng)估的系統(tǒng)配置信息。本文首先從性能和能效方面對(duì)在DyCNN 運(yùn)行稀疏CNN 與運(yùn)行密集CNN 進(jìn)行對(duì)比,評(píng)估并驗(yàn)證DyCNN 中針對(duì)稀疏優(yōu)化方法的有效性。除此之外,本文還將DyCNN 與NVIDIA Titan XP GPU(基于cuSPARSE[29]實(shí)現(xiàn))和Cambricon-X 進(jìn)行性能和能效的對(duì)比。最后,本文使用計(jì)算部件利用率和指令減少數(shù)量來(lái)分析DyCNN 針對(duì)稀疏CNN 提出的優(yōu)化策略效率。

      表2 參與評(píng)估結(jié)構(gòu)的配置信息

      為了全面地驗(yàn)證DyCNN 的效果,本文選取了應(yīng)用廣泛的AlexNet 和VGG16 卷積神經(jīng)網(wǎng)絡(luò)模型中幾個(gè)典型的卷積層來(lái)評(píng)估DyCNN 的性能和能效。表3 展示了以上2 種CNN 模型中各卷積層的參數(shù),其中Weight 的稀疏度表示AlexNet 和VGG16 的稠密網(wǎng)絡(luò)稀疏化成對(duì)應(yīng)稀疏網(wǎng)絡(luò)后每層的Weight 稀疏百分比。

      表3 CNN 模型的參數(shù)信息

      5.2 結(jié)果分析

      (1)性能

      在圖10 中,本文首先比較了DyCNN 執(zhí)行稀疏CNN(DyCNN-Sp)歸一化為DyCNN 執(zhí)行稠密CNN(DyCNN-De)的性能加速比。所有卷積層性能加速比的幾何平均值(geometric mean,GM)在最后一組柱線中標(biāo)記為GM。總體來(lái)看,DyCNN 在執(zhí)行稀疏CNN 相比執(zhí)行稠密CNN 實(shí)現(xiàn)了1.69 倍的加速。一方面,DyCNN 執(zhí)行稀疏CNN 的性能提升主要來(lái)源于DyCNN 通過(guò)數(shù)據(jù)感知的指令動(dòng)態(tài)過(guò)濾方式去除了2 種稀疏性帶來(lái)的無(wú)效指令和數(shù)據(jù)的計(jì)算和訪存,使得各PE 之間可以高效共享同一組指令,提升了片上指令和數(shù)據(jù)的重用效率,從而提升了整體性能。除此之外,稀疏CNN 相比稠密CNN 具有占用內(nèi)存小的特征,從而可以在片上存儲(chǔ)更多的指令和數(shù)據(jù),進(jìn)一步減少了高延遲的片外訪存。另一方面,通過(guò)使用基于數(shù)據(jù)感知的靜態(tài)和動(dòng)態(tài)負(fù)載調(diào)度策略相結(jié)合的方法,DyCNN在執(zhí)行稀疏卷積神經(jīng)網(wǎng)絡(luò)時(shí)具有更高的硬件利用率來(lái)提升整體性能。然后詳細(xì)分析具體卷積層之間的性能提升情況。通過(guò)圖10 可以發(fā)現(xiàn),DyCNN 在AlexNet 的CONV2 層性能提升最多為2.60 倍,表明加速器對(duì)大的Filter 的卷積層加速效果更明顯。同時(shí),由于VGG16 的CONV1_2 層激活稀疏度較低,與其他卷積層相比,加速效果只有1.28 倍。

      圖10 DyCNN 運(yùn)行稀疏與運(yùn)行稠密網(wǎng)絡(luò)、GPU 和Cambricon-X 的性能加速比

      為了進(jìn)一步展示DyCNN 的性能優(yōu)勢(shì),圖10 展示了使用DyCNN 與GPU、Cambircon-X 分別運(yùn)行AlexNet 和VGG16 稀疏CNN 的加速比。從圖10 可以看到,DyCNN 的性能是GPU 性能2.78 倍,DyCNN性能相對(duì)于Cambricon-X 的加速比是1.48 倍。整體來(lái)說(shuō),DyCNN 可以通過(guò)高指令并行度來(lái)支持稀疏卷積神經(jīng)網(wǎng)絡(luò)的執(zhí)行,更重要的是,DyCNN 可以通過(guò)數(shù)據(jù)感知的數(shù)據(jù)翻譯和指令選擇單元過(guò)濾掉各PE 內(nèi)無(wú)效指令,使得所有PE 可以高效共享相同的片上指令,進(jìn)一步避免了2 種稀疏性帶來(lái)的耗時(shí)指令片外存儲(chǔ)器訪問(wèn)。此外,通過(guò)使用動(dòng)靜結(jié)合的負(fù)載調(diào)度策略,提升了DyCNN 的硬件利用率,進(jìn)一步去除了稀疏數(shù)據(jù)不規(guī)則分布帶來(lái)的性能影響,提升了稀疏卷積神經(jīng)網(wǎng)絡(luò)的執(zhí)行性能。

      (2)能效

      圖11(a)展示了DyCNN 在執(zhí)行稀疏卷積神經(jīng)網(wǎng)絡(luò)與執(zhí)行稠密卷積神經(jīng)網(wǎng)絡(luò)時(shí)的能效比。整體上可以看到稀疏卷積神經(jīng)網(wǎng)絡(luò)的能效平均提升了3.04倍。通過(guò)能耗分解,結(jié)果表明其中計(jì)算、數(shù)據(jù)緩存、片上數(shù)據(jù)傳輸消耗的能量分別減少了88.12%、76.80%、53.27%。

      圖11 能效比

      圖11(b)展示了DyCNN、Cambricon-X 分別和GPU 在運(yùn)行稀疏CNN 時(shí)的能效比。從圖中可以看到,與GPU 相比,DyCNN 的能效提高了約35.62 倍,Cambricon-X 的能效僅提高了30.44 倍。該實(shí)驗(yàn)結(jié)果充分展現(xiàn)了DyCNN 執(zhí)行稀疏卷積神經(jīng)網(wǎng)絡(luò)的高能效。DyCNN 的能效收益主要來(lái)源于:(1)由于通過(guò)數(shù)據(jù)感知和指令動(dòng)態(tài)過(guò)濾機(jī)制增加了高效的片上指令和數(shù)據(jù)重用,能耗較高的片外存儲(chǔ)器訪問(wèn)次數(shù)更少;(2)通過(guò)輕量級(jí)的流水線化執(zhí)行和計(jì)算單元之間負(fù)載均衡實(shí)現(xiàn)了更高的硬件利用率和整體能效。

      (3)計(jì)算部件利用率

      為了驗(yàn)證本文提出的負(fù)載均衡策略的有效性,圖12展示了VGG16 的CONV1_2 層同一行和同一列方向執(zhí)行時(shí)的PE 的計(jì)算部件利用率。從圖12中可以看到,即使PE 陣列在垂直方向上復(fù)用相同的Filters 和水平方向復(fù)用相同的IA,在實(shí)現(xiàn)負(fù)載均衡之前,每列PE 計(jì)算部件利用率仍然差異較大,可見(jiàn)Filters 和IA 的稀疏性對(duì)整體硬件利用率影響很大。

      圖12 DyCNN 運(yùn)行在VGG16 CONV1_2 層的計(jì)算部件利用率

      與之不同,從圖12 中可看出,使用本文提出的負(fù)載均衡策略可以有效實(shí)現(xiàn)PE 之間負(fù)載均衡,使得各PE 的計(jì)算部件利用率基本保持一致,各運(yùn)算單元的計(jì)算部件利用率穩(wěn)定在45%~50%之間。由此通過(guò)使用本文提出的動(dòng)靜結(jié)合的負(fù)載均衡策略,可以保證DyCNN 中PE 陣列的負(fù)載均衡,提高計(jì)算部件的利用率,提升整體性能和能效。

      (4)指令執(zhí)行次數(shù)減少比例

      為了驗(yàn)證本文稀疏去除機(jī)制的有效性,本文將密集卷積層和稀疏卷積層的指令執(zhí)行次數(shù)進(jìn)行了詳細(xì)比較。

      從圖13 中可以看到,由于2 種稀疏性并存,PE中存在著大量的冗余無(wú)效指令,通過(guò)數(shù)據(jù)翻譯和指令選擇單元互相配合,PE 陣列執(zhí)行時(shí)跳過(guò)了0 值相關(guān)無(wú)效指令,使得稀疏網(wǎng)絡(luò)的總指令執(zhí)行次數(shù)比密集網(wǎng)絡(luò)平均減少了69.21%。而稀疏數(shù)據(jù)相對(duì)較少的卷積層指令減少的次數(shù)較少,以VGG16 的CONV2_2 層為例,因?yàn)镃ONV2_2 層中無(wú)效的激活數(shù)據(jù)只有19.00%,即存在的0 值數(shù)據(jù)相對(duì)較少,對(duì)應(yīng)的無(wú)效指令也較少,所以減少的指令執(zhí)行次數(shù)也相對(duì)較少。綜上所述,本文提出的基于數(shù)據(jù)感知的指令動(dòng)態(tài)過(guò)濾方式可以有效減少指令執(zhí)行次數(shù),去除稀疏性帶來(lái)的影響,從而提升DyCNN 的性能和能效。

      圖13 DyCNN 運(yùn)行稠密和稀疏網(wǎng)絡(luò)的指令執(zhí)行次數(shù)減少比例(左邊的坐標(biāo)軸(柱)表示各類(lèi)指令在總減少指令中所占比例;右邊的坐標(biāo)軸(曲線)表示總指令減少比例)

      6 結(jié)論

      本文針對(duì)稀疏卷積神經(jīng)網(wǎng)絡(luò)提出了一個(gè)高效靈活的硬件加速結(jié)構(gòu)DyCNN。DyCNN 基于CGRA 設(shè)計(jì),可以充分利用其高指令并行性來(lái)支持CNN 的操作。此外,針對(duì)稀疏卷積神經(jīng)網(wǎng)絡(luò)中激活值和權(quán)值的2 種稀疏性并存的挑戰(zhàn),DyCNN 設(shè)計(jì)了基于數(shù)據(jù)感知的指令動(dòng)態(tài)過(guò)濾機(jī)制濾除了卷積運(yùn)算中大量的無(wú)效計(jì)算和訪存指令的執(zhí)行,避免了不必要的片外指令和數(shù)據(jù)訪存,減少了無(wú)效指令的執(zhí)行次數(shù),增加了各計(jì)算單元指令的片上重用效率。同時(shí)DyCNN提出了基于負(fù)載感知的動(dòng)靜結(jié)合負(fù)載均衡策略保證了PE 之間的負(fù)載均衡。實(shí)驗(yàn)表明,本文提出的加速結(jié)構(gòu)DyCNN 在性能和能耗方面具有優(yōu)勢(shì),能夠?yàn)橐?guī)模越來(lái)越大、演進(jìn)迅速的稀疏卷積神經(jīng)網(wǎng)絡(luò)加速提供有效的解決方案。

      猜你喜歡
      加速器能效權(quán)值
      輪滑加速器
      化學(xué)工業(yè)的“加速器”
      一種融合時(shí)間權(quán)值和用戶行為序列的電影推薦模型
      全民小康路上的“加速器”
      CONTENTS
      上海:穩(wěn)中有進(jìn) 能效趨優(yōu)
      關(guān)注能效
      基于權(quán)值動(dòng)量的RBM加速學(xué)習(xí)算法研究
      等待“加速器”
      淺談實(shí)現(xiàn)高能效制造的未來(lái)發(fā)展趨勢(shì)
      宁陵县| 清水河县| 永修县| 盘山县| 龙井市| 治多县| 高陵县| 景东| 南充市| 湖州市| 敖汉旗| 阳山县| 山西省| 北京市| 贵港市| 庆阳市| 石渠县| 自治县| 德惠市| 公安县| 象州县| 仙游县| 荆州市| 济源市| 特克斯县| 景洪市| 滦南县| 加查县| 理塘县| 临桂县| 教育| 阿拉善右旗| 康保县| 博野县| 韩城市| 高青县| 宁城县| 安岳县| 绥滨县| 股票| 儋州市|