劉 彪,陳長林,張宇飛,劉思彤,唐勵勤,于紅旗
(國防科技大學 電子科學學院, 湖南 長沙 410073)
為實現更強的識別能力和更高的識別精度,現代深度神經網絡(deep neural network, DNN)規模不斷增大,在推理過程中也需要更加龐大的計算量和存儲空間。然而通過深入研究深度神經網絡權重矩陣和各層特征圖像數據結構可以發現,神經網絡內部存在較大的稀疏度,即有較大比例的權重系數和神經元輸出為0值[1-2]。DNN的稀疏特性可以分為動態稀疏和靜態稀疏[3]:動態稀疏是由于部分神經元輸出經激活后變為零值而產生的,這種稀疏程度隨神經元的輸入變化而變化;靜態稀疏又包括神經元稀疏和權重稀疏,二者在進行網絡訓練時,因不影響正確的網絡識別結果而被刪除。在神經網絡加速器中,增加對稀疏計算的支持,能夠大幅減少無效數據存儲和計算,使得推理計算效率得到大幅提升[4-6]。
近年來,為高效執行稀疏DNN,涌現了大量采用定制化架構的稀疏DNN加速器[5-12]。通過向乘加陣列加載輸入特征圖像(input feature map, IFM)數據和權重前剔除0值數據并實現二者的正確配對,這些加速器在計算資源利用效率和推理計算速度方面均獲得大幅提升。然而現有稀疏神經網絡加速器仍然存在以下問題需要解決:①在加載輸入數據時,需引入有效數據配對等額外操作,增加了硬件資源設計復雜度,為加速器帶來額外面積和功耗負擔;②在推理計算時,因配對效率較低而導致大量乘加資源處于空閑狀態,無法充分利用資源加速推理計算;③在存儲輸出數據時,仲裁單元和輸出緩存單元過于龐大且單一,在面臨較多輸出數據時,容易造成數據擁塞問題。為解決上述問題,進一步優化稀疏DNN數據處理方式,本文提出了稀疏卷積計算高效數據加載與輸出緩存策略,主要包括:
1)采用全對全數據流計算,將屬于同一輸入通道的非零IFM數據與非零權重進行任意兩兩配對計算,降低了非零數據配對難度,提高了乘加資源利用率。
2)采用輸入駐留計算,以及密集型循環加載IFM數據,大幅減少了數據片外調取次數。
3)優化輸出緩存設計,簡化乘累加中間結果緩存尋址難度,實現了輸出數據的簡便、快速存儲,避免了數據訪問爭用、存儲擁塞等問題。
稀疏IFM數據和稀疏權重導致DNN推理計算過程中存在大量的無效數據存儲和計算。圖1展示了稀疏卷積計算特點,理論計算包含了較多0值數據所參與的無效計算,實際只需較少的有效計算便可得到結果,而且0值數據的存儲也會造成資源和能量消耗。
針對上述問題,為提高處理稀疏網絡的性能和效率,研究人員設計了多種稀疏DNN加速器。例如,針對特征圖像中存在的稀疏性而被設計的加速計算架構Cnvlutin[5]、Cambricon-X[6]等。這類架構利用單索引或者偏移量對特征圖像數據進行篩選配對,隨后配對數據被輸送至乘法器完成計算,再由加法樹實現累加。由于網絡的稀疏,需要配對的有效數據較少,如要使配對數據填滿計算資源以提高計算效率,就需要復雜的配對及控制邏輯,存在較高的設計難度。Li[7]、Lu[8]等針對權重矩陣中的稀疏性進行了定制設計:首先將單個權重需要計算的IFM數據進行全部提取,然后該權重與所有IFM數據乘積得到一個中間結果圖像,最后對所有權重進行同樣操作并累加中間結果圖像得到完整的輸出特征圖像(output feature map, OFM)。但在處理淺層DNN時,需要使用較多的緩存空間以提取全部IFM數據,同時也需暫存每個中間結果圖像,需要較多硬件存儲資源。Liu等[9]通過判斷乘法器所加載的IFM數據是否為0以控制計算的執行,可以阻止無效計算的產生并減少計算功耗,但未執行計算的資源處于空閑,存在利用不充分的現象。同時該方法在操作上僅避免了無效計算并沒有節省計算周期,無法有效加速推理計算。
可以看到,上述加速器由于只考慮到了DNN中的一種稀疏特性,仍存在無效數據的加載和計算,計算效率提升不夠顯著,數據流和硬件架構也需優化。更多設計則把特征圖像中動態稀疏和靜態稀疏均納入設計考量。
Zhou[3]、Lin[10]等針對IFM數據和權重數據稀疏,設計了雙索引邏輯實現有效數據配對,這種配對有效數據的方式與Cambricon-X相似,不可避免地給加速器設計增添了復雜度和額外功耗。VSCNN[11]通過將輸出數據的中間結果依次傳輸給不同處理單元(processing element, PE)以加速輸出數據累加,并通過剔除IFM上規則分布的0值數據,實現稀疏網絡處理優化,但無法加速不規則網絡。SCNN[12]直接輸入IFM數據和權重高效完成卷積計算而不是采取數據配對的方式,并根據輸出數據的OFM坐標將數據存儲在輸出緩存單元,但在存儲輸出數據時會面臨同一地址有多個數據存儲的爭用問題。文獻[13]設計了一個針對稀疏卷積神經網絡的細粒度脈動加速器(fine-grained systolic accelerator, FSA),利用IFM數據沿乘法器陣列水平方向以脈動的方式移動,實現IFM數據復用。這種脈動方式需花費一定周期才能讓IFM數據遍歷所有乘法器,在IFM數據量較少時,IFM只需水平移動較少的周期便完成了計算,會導致位于脈動方向較后的乘法器無法接收數據,因此存在乘法器利用率低的問題。同時,FSA與多數加速器相似,在利用輸出數據的OFM坐標為索引存儲數據時,需將所有推理計算結果輸送至同一個仲裁單元完成數據分配。該仲裁單元受密集數據的影響,會發生數據擁塞,并不利于數據的高效存儲,且在設計上需要較大的內部數據帶寬,導致該單元在加速器中有較大的面積占比。
綜上所述,現有加速器能在稀疏DNN上實現加速,但存在數據流低效、資源利用率不高、硬件設計復雜等問題,因此亟須進一步優化稀疏DNN加速器設計。
為了有效克服上述挑戰,使加速器獲取更好的處理性能,提出了稀疏卷積計算高效數據加載與輸出緩存策略,主要研究工作如下。
如圖2所示,DNN的計算模式表現為:編號為Co的卷積核權重矩陣與輸入特征圖像矩陣計算時,相同輸入通道Ci的權重矩陣與輸入特征圖像矩陣進行卷積,得到該輸入通道的中間結果圖像,然后將所有輸入通道的中間結果對應相加,得到輸出通道Co的完整輸出特征圖像。

圖2 DNN計算示意圖Fig.2 DNN calculation schematic
通過分析同一輸入通道數據的卷積運算可知,除位于IFM邊緣的數據只需與卷積核中部分權重進行乘積外,IFM中的大部分數據需要與該輸入通道內的所有權重進行乘積。因此為了提高計算效率,本設計選擇采用全對全的方式進行卷積運算,亦即,將屬于同一輸入通道的所有IFM數據與所有權重均進行相乘運算,同時根據二者坐標計算輸出坐標,根據輸出坐標值確定計算結果是否有意義。但這一計算方式也會導致邊緣IFM數據引入部分非必要的冗余計算。冗余計算比例可用乘法器利用率進行衡量:
(1)
計算總量是IFM非零數據總數和非零權重總數相乘得出;冗余計算量則是邊緣IFM數據多余的計算量。圖3展示了在不同IFM稀疏度和IFM尺寸下全對全乘積的乘法器利用率??梢钥吹?在IFM不存在稀疏的情況下,IFM尺寸大于14像素×14像素時,全對全數據流計算的乘法器利用率均高于90%。雖然在IFM尺寸較小時,隨著計算總量的減少,冗余計算的占比有所增加,導致乘法器利用率下降,但在實際情況下,受稀疏的影響,位于IFM邊緣的數據量有所減少,計算總量中冗余計算的占比也因此下降,故乘法器利用率得以提升。在圖3中表現為乘法器利用率隨著IFM稀疏度的增加而增加,因此IFM數據的稀疏有利于全對全數據流計算。雖然引入的冗余計算會降低乘法器利用率,但對整體計算的影響并不嚴重。

圖3 不同IFM稀疏度和IFM尺寸下乘法器利用率Fig.3 Multiplier utilization for different IFM sparsity and IFM size
為實現全對全數據流計算,設計了如圖4所示的N×M乘加陣列,其中N和M均應為2的整數次冪以簡化尋址邏輯。以N=8,M=8為例介紹乘加陣列工作過程:乘加陣列的上方接收權重,每列共享相同權重;左方接收IFM數據,每行共享相同IFM數據。在進行推理計算時,只要屬于相同輸入通道的IFM數據和權重即需要兩兩乘積,全對全數據流可以在每個計算周期獲取64個不同的乘積結果。

圖4 乘加陣列Fig.4 Multiplier and accumulator array
累加并存儲輸出數據的中間結果時,本設計同步為每個乘加單元(multiply and accumulate unit, MAU)搭配一個獨立的地址計算單元。該單元根據IFM數據的行、列坐標以及權重的行、列坐標實時地計算出輸出數據的OFM坐標,根據OFM坐標將輸出數據存儲在輸出緩存單元的不同地址,OFM坐標計算公式[13]如下:
(2)
(3)
其中:O、I、W分別表示輸出、IFM數據和權重;下標r、c分別表示行坐標和列坐標;KS表示卷積核窗口尺寸。如果計算得到的OFM坐標超出了OFM實際尺寸范圍,則標記該輸出數據為無效以屏蔽其后續的累加和存儲等操作。
為節約存儲空間,IFM數據和權重矩陣通常采用稀疏編碼格式進行存儲,如按照原始存儲順序加載IFM數據和權重,在形式上雖能得到所有推理計算的中間結果,但卷積計算結果輸出順序將會變得混亂。比如,壓縮后的數據雖然密集但無規律,在IFM數據與權重相乘時,所有乘積結果分布在輸出特征圖像的各個位置,從而導致緩存尋址邏輯復雜。同時,較多未完成累加的中間結果暫存也給加速器緩存資源帶來極大負擔。因此需要在利用全對全數據流加速推理計算的基礎上,設計一種數據加載方案,以簡化輸出數據的累加邏輯,并降低輸出數據尋址存儲的復雜度。該方案主要分為兩部分:①針對數據加載順序,通過將IFM數據和權重按照一定先后次序加載到乘加陣列,簡化輸出數據的中間結果累加邏輯,有利于通過一定規律將輸出數據尋址暫存;②針對數據復用,通過減少IFM數據從片外存儲單元讀取的次數以及片內暫存的中間結果數量,實現數據搬移功耗和輸出緩存需求的減少。
2.2.1 數據加載預處理
加載數據前,為了剔除0值稀疏數據并減少存儲空間需求,對IFM數據和權重均采用壓縮稀疏行(compressed sparse row, CSR)編碼方式存儲,并在計算過程中實時解碼恢復其原始坐標。通過CSR編碼,將得到由非0數據組成的密集數據向量,以及由非0數據間0值數據的數量組成的數據偏移量。如圖5所示,IFM數據在進入輸入緩存單元前,首先由稀疏解碼模塊根據IFM數據偏移量還原出IFM數據的行、列坐標,然后IFM數據及其行、列坐標組成輸入數據加載至數據分配單元(demultiplexer, DMUX),最后將不同列坐標的IFM數據經數據分配單元分配到不同編號的IFM FIFO(first in first out)中,IFM FIFO的數量依乘加陣列的行數N而定。指針控制模塊用于控制多個IFM FIFO并行輸出。

圖5 IFM數據加載至輸入緩存單元Fig.5 Loading the IFM data into the input buffer unit
圖6展示了稀疏輸入數據存入輸入緩存單元的方式,左圖稀疏輸入數據的部分空缺位置是IFM上未被壓縮存儲的0值數據,由于FIFO的特性,后續數據會頂替其位置,保證了FIFO數據的密集性,使得每個計算周期每個FIFO都能輸送數據給乘加陣列處理,有效充分利用乘法器資源,配合全對全數據流計算完成更高效的DNN推理計算。同時從圖6中可以看到,若稀疏隨機度較高,則可能會在不同的FIFO中產生非等長的隊列,進而導致在某些周期中乘法器未得到充分利用。這一問題可通過均衡稀疏[14-16]方法減輕其帶來的影響。

圖6 稀疏輸入數據存入FIFOFig.6 Sparse input data storage into FIFO
如圖7所示,稀疏編碼存儲的權重矩陣以相同的方式進行稀疏解碼后送入8路FIFO中緩存, FIFO數量依乘加陣列的列數M而定。

圖7 權重緩存單元結構Fig.7 Weight buffer unit structure
當權重緩存單元輸出權重時,8路FIFO可以輸出不同輸出通道的卷積核權重到乘加陣列的不同列,便于并行執行不同輸出通道的推理計算。計數模塊則用于控制FIFO的權重讀取。
2.2.2 輸入駐留
在進行DNN數據處理時,每次需向輸入緩存單元加載具有相同輸入通道編號的IFM數據和所需的全部權重,提高所加載數據在推理計算過程中的復用率可以極大程度減少數據的反復提取。相較其他數據復用方式,數據駐留可以最小化讀取數據時所帶來的能耗[17]。
本設計采用輸入駐留的數據復用方式,將已加載的IFM數據駐留在輸入緩存單元中,待相同輸入通道的IFM數據與全部權重完成計算后,更換下一個IFM數據,以此最小化IFM數據的讀取和寫入能耗。如果輸出IFM數據時單純地保持其完全不變,就需要持續更新權重,會導致權重緩存單元面臨頻繁的數據交互。為了避免這種情況,本設計選擇一定周期內維持權重不變,如圖8所示,首先,輸入緩存單元的每個FIFO以k個IFM數據為一組進行周期性循環輸出,每k個周期為一次循環,每個周期輸出該組的不同IFM數據;其次,同一個循環內,權重緩存單元并行輸出1個權重保持k個周期不變;然后,下一次循環從頭開始輸出該組IFM數據并更換下一個權重;最后,當該組IFM數據遍歷全部權重后,更新下一組IFM數據開始周期性循環輸出。在循環期間,IFM數據組一直駐留在FIFO內,由指針控制模塊控制FIFO讀取指針的變化,以此實現輸入駐留。維持權重不變的工作則由計數模塊完成,通過計數k個周期讀取一次權重,保證每個權重在加速器內均復用k次。由于輸入數據需要根據列坐標被輸送到不同的FIFO,每個周期只能完成1個輸入數據分配,故8個IFM FIFO并行輸出IFM數據組時數據量k不宜過大,否則會導致輸入數據分配時序緊張。而且IFM尺寸隨著網絡深度的增加而減小,另外存在稀疏性,每列的IFM數據也較少。所以本設計設置k為8,在緩解輸入數據分配壓力的同時盡可能多地復用權重。具體表現為:圖8(a)表示第1個周期輸出下標為1的IMF數據;圖8(b)表示第8個周期輸出下標為8的IFM數據;圖8(c)表示第9個周期重新輸出下標為1的IFM數據,以此循環往復;圖8(d)表示在連續的8個周期內,只有IFM數據變化,而權重不變,用W1替代權重緩存單元并行輸出的權重。

(a) 第1周期IFM數據輸出(a) IFM data output in cycle 1

(b) 第8周期IFM數據輸出(b) IFM data output in cycle 8

(c) 第9周期IFM數據輸出(c) IFM data output in cycle 9

(d) 不同周期的數據輸出(d) Data output for different cycles圖8 輸入駐留Fig.8 Input stationary
全對全數據流計算用于完成DNN推理計算加速;輸入駐留用于高效加載數據至乘加陣列,減少數據搬移。本小節所介紹的輸出緩存分塊則用于解決乘加陣列計算結果的累加、暫存等問題。
通過全對全數據流計算得到的乘積結果需要被有效存儲,并能方便后續輸出數據中間結果的累加。如果試圖將乘加陣列每個計算周期得到的64個計算結果輸送至一個輸出緩存單元中暫存,受限于輸出緩存單元每周期只能存儲有限數據個數,就會導致存儲的時序無法滿足大量數據緩存需求,引發數據擁塞。因此,本設計將輸出緩存單元劃分成多塊,為每個乘法器搭配獨立的緩存模塊,以保證每個乘積結果能立即存儲,避免時序緊張。
為簡化計算結果緩存尋址難度,本設計首先限制乘加陣列中不同列的權重來自不同輸出通道的卷積核,因此乘法器列與列之間的計算可以互不影響。以單列乘法器輸出結果的數據流傳輸為例介紹所設計的輸出緩存架構:如圖9(a)所示,在密集DNN計算中,8列IFM數據分別加載到不同行的乘法器,與坐標為(0,0)的權重進行乘積,得到對應輸出數據的第一個中間結果,無須累加可直接存入輸出緩存單元。圖9(b)中更換坐標為(0,1)的權重時,此時8列IFM數據與權重的乘積結果需要錯位一行傳輸,與上一行輸出數據的第一個中間結果累加,亦即,此時第二行的乘積I(0,1)×W(0,1)需與第一行存儲結果I(0,0)×W(0,0)累加。由于I(0,0)×W(0,0)存儲在第一行的輸出緩存單元中,故I(0,1)×W(0,1)需向上傳輸至第一行完成累加后并存儲在第一行,第三行的乘積結果傳輸至第二行,以此類推。圖9(c)中更換坐標為(0,2)的權重時,此時8列IFM數據與權重的乘積結果需錯位兩行傳輸,同理,第三行的乘積結果I(0,2)×W(0,2)需要與第一行存儲的中間結果I(0,0)×W(0,0)+I(0,1)×W(0,1)累加,故I(0,2)×W(0,2)需傳輸至第一行完成累加后并存儲在第一行,第四行的乘積結果傳輸至第二行,以此類推。根據權重列坐標的不同,當前行的乘積結果需向上傳輸至不同行。而更改為不同行的權重時,需要累加的IFM數據也會更改,但列坐標相同的IFM數據會加載至同一行的乘法器,即I(0,0) ×W(0,0)與I(1,0)×W(1,0)均在第一行乘法器完成乘積,故無須錯行傳輸。

(a) 中間結果直接存儲(a) Intermediate result storage directly

(b) 中間結果向上傳輸一行并累加存儲(b) Intermediate result transfers up one line to accumulate and store

(c) 中間結果向上傳輸兩行并累加存儲(c) Intermediate result transfers up two rows to accumulate and store圖9 單列乘法器輸出結果的數據流傳輸Fig.9 Data flow transmission of single column multiplier output results
綜上所述,連續三行乘法器輸出需匯集到同一行多路選擇器(multiplexer, MUX),由權重列坐標控制數據輸出并完成累加,累加結果存儲在當前行的輸出緩存單元,實現了單周期內完成輸出數據的累加和暫存,以此解決了數據擁塞的問題;同時,不同列的乘加運算互不影響,不同行的數據存儲相互獨立,以此解決了輸出數據訪問爭用的問題。
基于Verilog HDL語言對設計完成了單個PE的寄存器傳輸級(register transfer level, RTL)實現,利用Synopsys Design Compiler工具基于FreePDK 45 nm工藝進行了綜合,并完成對設計的性能分析:面積評估、數據加載效率仿真、乘法器利用率分析。PE架構與FSA有較多相近之處,如:①二者都采用了乘法器陣列,且陣列中每行(列)均共享相同的IFM數據(權重);②都在進行卷積運算的同時計算OFM數據的存儲坐標;③IFM數據和權重加載前均無須進行配對等。同時,相比其他支持稀疏計算的加速器, FSA在性能和能效等方面均展示了較明顯的優勢,其中在性能方面與SCNN、CCR、Cambricon-S[3]相比分別提高了173%、123%、108%,在能效方面分別提高了1 386%、924%、625%,因此將FSA作為實驗的比較基準。
基于稀疏卷積計算高效數據加載和輸出緩存策略設計了圖10所示的處理單元結構。IFM數據和權重偏移量經過稀疏解碼單元得到對應的行、列坐標。IFM數據和權重根據這些坐標經數據選擇單元輸入至輸入緩存單元和權重緩存單元。MAU主要由乘法器、選擇器、地址計算單元、加法器、輸出緩存單元構成。輸出緩存單元可根據不同行數據分為4個區域,每個區域存儲多個輸出通道的數據。

圖10 處理單元頂層結構Fig.10 Processing element top-level structure
由于處理單元在獲取IFM數據和權重時,每次可最多獲取連續的64個數據,考慮到最壞的情況,即這64個數據均被分配到同一個FIFO,因此FIFO深度至少需要設置為64。
輸入緩存單元中,每個FIFO不僅要存儲8 bit的IFM數據,還需要將其行、列坐標進行存儲。以VGG-16為例,最大行、列坐標為224,則需要用8 bit表示行、列坐標信息,因此輸入緩存單元實際存儲空間大小為:
輸入緩存空間=64×8×(8+8+8) bit=12 Kbit
(4)
因此,輸入緩存單元存儲空間大小為1.5 KB。同理,權重緩存單元也按照需求設置為1.5 KB。
對于輸出緩存單元,處理單元能存儲4行完整的OFM數據,在得到完整數據后,輸出緩存單元便輸出數據以進行池化、激活等操作。故輸出緩存空間的大小由實際運行的網絡決定,以VGG-16為例,第一層卷積的輸出特征圖像尺寸為224 像素×224 像素×64 像素,當輸出數據位寬為24 bit時,輸出緩存空間為:
輸出緩存空間=4×224×64×24 bit=1 344 Kbit
(5)
因此,輸出緩存單元存儲空間大小為168 KB。
基于FreePDK 45 nm工藝對設計完成RTL到電路的實現,并根據工藝尺寸比的平方等比例縮小,將設計參數等效為28 nm工藝下的參數并與FSA進行比較。表1展示了本設計與FSA在單PE上的參數對比,從整體上看,本設計處理單元在設計需求上主要集中在緩存單元,但針對不同神經網絡應用,所需存儲的輸出數據量各不相同,故在實際應用中允許對輸出緩存單元進行可配置性設計。由于簡化了輸出緩存的邏輯設計,故不需要對累加緩存單元和仲裁交叉開關進行設計,PE總體面積相比FSA減少了21.45%。

表1 本文策略與FSA在PE上的參數比較Tab.1 Parameters comparison between this paper and FSA on PE
數據加載效率能反映出PE的處理性能。在進行DNN推理計算時,本設計所需的數據加載周期與輸入緩存單元內數據量最大值以及權重緩存單元內數據量最大值有關。這是因為:受數據稀疏的影響,在不考慮FIFO深度的情況下,將單輸入通道的IFM分配到輸入緩存單元時,8個IFM FIFO獲取的數據量并不相同,而同一輸入通道的數據沒有全部完成處理就無法開始下一個通道的數據處理,所以數據加載周期與輸入緩存單元內FIFO的最大數據量有關,令8個FIFO中的數據量最大值為MaxI。同理,令權重緩存單元的數據量最大值為MaxW。每個IFM數據需要與權重緩存單元中的所有權重進行乘積,則每個IFM數據需要循環MaxW次,單輸入通道的IFM數據加載周期Cyclechannel表示為:
Cyclechannel=MaxI×MaxW
(6)
完成一個輸入通道的數據加載后開始其余輸入通道的數據加載,則單個卷積層的數據加載周期Cyclelayer是所有輸入通道的周期之和:

(7)
其中,Ci表示該層IFM的輸入通道數。 一幅圖像所需的周期是所有卷積層的周期之和:
(8)
與FSA相比,其PE內的數據處理是將IFM數據根據乘法器陣列大小分成多組,每個周期依次輸入不同組IFM數據并加載不同的權重。如圖11所示,第1個周期加載第1組IFM數據和第1個權重到乘法器陣列的第1列;第2個周期將第1列的IFM數據水平移位到第2列,并加載第2組IFM數據到第1列;第1個權重固定在第1列不動,加載第2個權重至乘法器陣列的第2列。根據此數據流,對FSA以及本設計進行數據加載效率仿真,分析二者處理相同神經網絡以及網絡中不同層的數據加載所需周期。

圖11 FSA PE數據流Fig.11 FSA PE data flow
在對比數據加載效率前,對不同網絡層的數據稀疏度進行設定。SCNN[12]展示了VGG-16不同層IFM和權重的稀疏度,整理數據如表2所示。

表2 VGG-16不同卷積層IFM和權重的稀疏度[12]Tab.2 Sparsity of IFM and weight for different convolutional layers in VGG-16 [12] %
根據表2設置不同層的數據稀疏度對本設計以及FSA處理VGG-16時的數據加載周期進行仿真驗證,圖12展示了二者在處理VGG-16時不同卷積層的數據加載周期對比。對于每一個卷積層,本設計所需的數據加載周期均小于FSA。從總的數據加載周期來看,本設計所需時間僅為FSA的45.93%。由于數據加載至乘加陣列能立即執行計算,故所需數據處理周期與數據加載周期一致,因此在數據處理速度方面提升了117.71%。以上數據對比在權重隨機分布的情況下實現,即權重在卷積核的分布完全隨機且無規律,實驗結果驗證了本設計在任何情況都比FSA更加高效。

圖12 本設計與FSA處理VGG-16時不同卷積層的數據加載周期對比Fig.12 Comparison of data loading cycles for different convolutional layers with VGG-16 processing in this design and FSA
事實上,權重分布可以通過訓練和剪枝改變,并根據處理需求進行適當調整,比如Yao等[14]提出了一種均衡稀疏和對應剪枝算法,可以均衡不同卷積核的權重數量,在保持高計算精度的同時能夠實現卷積核并行處理加速。在完成卷積核訓練后,權重分布基本維持不變,不同卷積核的權重數量也實現均衡,使得每個權重緩存單元的權重數量維持在平均值左右。在此基礎上,稀疏DNN推理計算時所需的數據加載周期會獲得減少,從而提高推理計算速度。如圖13所示,本設計實現權重均衡后數據加載周期與之前相比,總體減少了約11.87%。

圖13 本設計在均衡權重與隨機權重的數據讀取周期對比Fig.13 Data read cycles of this design in balanced weights and random weights
乘法器的利用率反映出所設計電路實際的資源使用情況,優秀的設計應充分利用資源,實現計算量的最大化以及推理計算加速。根據式(1),乘法器利用率是有效計算量與計算總量之比,在電路系統中,應是有效計算量與乘法器可使用量之比,如式(9)所示:
(9)
每個數據加載周期都有一定數量的乘法器供計算使用,處理單元每周期可使用64個乘法器同時計算,而充分利用資源是實現計算加速的途徑之一。圖14展示了在均衡權重的情況下,本設計與FSA單個PE在不同卷積層的乘法器利用率。在層數較淺時,得益于權重均衡,乘法器利用率能維持在95%以上;在層數較深時,由于IFM尺寸的降低,每個通道的待處理數據過少而引起乘法器利用率下降。但總的來看,平均乘法器利用率達到89%。相比之下,FSA的乘法器利用率并不樂觀,但是FSA設計了一個混合分區方案,即層數較淺時,將IFM按尺寸分成多塊;層數較深時,將IFM按通道分成多塊,每個PE同時處理不同塊的數據。其通過混合分區可將平均乘法器利用率提高到80%,但本設計仍比FSA的乘法器利用率提高了11.25%。

圖14 均衡權重下本設計與FSA的乘法器利用率對比Fig.14 Comparison of multiplier utilization between this design and FSA under balanced weights
本文提出了稀疏卷積計算高效數據加載與輸出緩存策略,通過采用全對全數據流計算,即將屬于同一輸入通道的非零IFM數據與非零權重進行任意兩兩配對計算,降低了非零數據配對難度,提高了乘加資源利用率;其次通過采用輸入駐留計算以及密集型循環加載IFM數據,大幅減少了數據片外調取次數;最后優化了輸出緩存設計并簡化了乘累加中間結果緩存尋址過程,實現了輸出數據的簡便、快速存儲,避免了數據訪問爭用、存儲擁塞等問題。實驗表明,與采用類似架構的FSA相比,在處理單元面積上減少了21.45%;在數據加載速度方面平均提高了117.71%;在平均乘法器資源利用率方面提高了11.25%,并達到89%。