摘" 要: 為了實(shí)現(xiàn)人工智能和高性能計(jì)算在不同應(yīng)用領(lǐng)域下的快速運(yùn)算,需借助人工智能加速器(NPU)或者通用圖形處理器(GPGPU)對(duì)其進(jìn)行加速。由于矩陣運(yùn)算是人工智能和高性能計(jì)算的核心運(yùn)算,文中提出一種節(jié)省資源的矩陣運(yùn)算單元架構(gòu)的實(shí)現(xiàn)方案。通過(guò)對(duì)矩陣運(yùn)算單元中每個(gè)子運(yùn)算單元中的乘法器和加法器數(shù)量進(jìn)行擴(kuò)展,并將輸入數(shù)據(jù)按行列廣播到矩陣運(yùn)算單元上的各個(gè)子運(yùn)算單元可實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速。通過(guò)利用PE矩陣之間的數(shù)據(jù)共享,采用新型的PE矩陣互聯(lián)方案,可達(dá)到在減少帶寬資源的同時(shí)提升算力的目的。與現(xiàn)有NPU或GPGPU的矩陣運(yùn)算實(shí)現(xiàn)方案相比,所提方案使用更少的加法器和寄存器即可實(shí)現(xiàn)相同的算力,且在更低的時(shí)鐘延遲和帶寬消耗下即可完成對(duì)相同規(guī)模矩陣運(yùn)算的加速。
關(guān)鍵詞: 人工智能; 高性能計(jì)算; 矩陣運(yùn)算; 節(jié)省資源; 低時(shí)鐘延遲; GPGPU
中圖分類(lèi)號(hào): TN02?34; TP183" " " " " " " " " " " "文獻(xiàn)標(biāo)識(shí)碼: A" " " " " " " " " " 文章編號(hào): 1004?373X(2024)05?0160?07
Design of hardware microarchitecture of resource?efficient matrix operation unit
PAN Yu1, TIAN Yinghui1, ZHANG Wei1, YANG Jianlei2, SHEN Qi3
(1. Hygon Information Technology Co., Ltd., Beijing 100193, China;
2. Beihang University, Beijing 100191, China;
3. China Unicom Smart City Research Institute, Beijing 100037, China)
Abstract: It is necessary to use artificial intelligence accelerator NPU (neural processing unit) or GPGPU (general?purpose graphics processing unit) for acceleration, so as to realize the fast computation of artificial intelligence and high performance computing in different fields. Since the matrix operation is the core operation of artificial intelligence and high performance computing, an implementation scheme of resource?efficient matrix operation unit architecture is proposed. By expanding the number of multipliers and adders in each sub?unit of matrix arithmetic unit and broadcasting the input data to each sub?unit of matrix arithmetic unit by row and column, the acceleration of matrix arithmetic unit can be realized. By using the data sharing between PE matrix and adopting the new PE matrix interconnection scheme, the purpose of reducing bandwidth resources and increasing computing power can be achieved. In comparison with the existing implementation scheme of matrix operation of NPU or GPGPU, the proposed one can achieve the same computing power with fewer adders and registers, and can complete the acceleration of the same scale matrix operation with low clock latency and bandwidth consumption.
Keywords: artificial intelligence; high performance computing; matrix operation; resource?efficient; low clock latency; GPGPU
0" 引" 言
隨著人工智能技術(shù)的不斷發(fā)展,其已經(jīng)在許多領(lǐng)域得到了廣泛的應(yīng)用。伴隨著各種應(yīng)用需求,出現(xiàn)了越來(lái)越多復(fù)雜的深度學(xué)習(xí)網(wǎng)絡(luò)模型[1?5],這些模型通常具有網(wǎng)絡(luò)層數(shù)多、運(yùn)算量巨大的特點(diǎn),因此運(yùn)算的實(shí)時(shí)性成為這些應(yīng)用的瓶頸。為了保證運(yùn)算的實(shí)時(shí)性,通常使用NPU和GPGPU來(lái)實(shí)現(xiàn)對(duì)各種深度學(xué)習(xí)網(wǎng)絡(luò)模型的加速。深度學(xué)習(xí)網(wǎng)絡(luò)模型的底層核心是卷積運(yùn)算和矩陣運(yùn)算,而通??墒褂镁仃囘\(yùn)算來(lái)實(shí)現(xiàn)卷積運(yùn)算,因此為了更好地實(shí)現(xiàn)對(duì)各種深度學(xué)習(xí)網(wǎng)絡(luò)的加速,對(duì)矩陣運(yùn)算進(jìn)行加速至關(guān)重要。最新的NPU[6?9]、GPGPU以及矩陣加速器[10]都有專(zhuān)門(mén)的模塊來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速。
而在其他應(yīng)用領(lǐng)域,如生命科學(xué)、氣象、圖像處理、航空航天及石油勘探等領(lǐng)域,同樣需要GPGPU對(duì)其進(jìn)行加速。這些高性能計(jì)算應(yīng)用中許多也都需要用到矩陣運(yùn)算。
因此,設(shè)計(jì)一款高性能、低功耗以及面積開(kāi)銷(xiāo)小的適用于實(shí)現(xiàn)矩陣運(yùn)算的硬件單元對(duì)于NPU或者GPGPU至關(guān)重要。目前業(yè)界最知名的NPU/GPGPU處理器設(shè)計(jì)廠商如谷歌、英偉達(dá)和AMD的產(chǎn)品都可以實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速。谷歌公司基于脈動(dòng)陣列的思路設(shè)計(jì)了TPU(Tensor Processing Unit)[11]來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速;英偉達(dá)公司在其GPU中專(zhuān)門(mén)設(shè)計(jì)了TENSOR CORE[12]來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速;AMD的GPU中并沒(méi)有設(shè)計(jì)單獨(dú)的矩陣運(yùn)算單元來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速,其利用內(nèi)部的向量運(yùn)算單元將矩陣運(yùn)算拆解為并行的乘加運(yùn)算來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速。
本文提出了一種節(jié)省資源的PE矩陣(矩陣運(yùn)算單元)架構(gòu)的實(shí)現(xiàn)方案,該P(yáng)E矩陣可實(shí)現(xiàn)矩陣乘法運(yùn)算。通過(guò)對(duì)PE矩陣中每個(gè)PE單元(子運(yùn)算單元)進(jìn)行變化,將每個(gè)PE單元中的乘法器個(gè)數(shù)增加,并在每個(gè)PE單元中實(shí)現(xiàn)多個(gè)乘法器結(jié)果的累加,使每個(gè)PE單元可實(shí)現(xiàn)多對(duì)數(shù)據(jù)的乘累加以達(dá)到向量運(yùn)算的目的。相比于業(yè)界現(xiàn)有矩陣運(yùn)算加速單元每個(gè)PE單元只有一個(gè)乘法器的實(shí)現(xiàn)方案,本文方案使用更少的加法器和寄存器數(shù)即可實(shí)現(xiàn)相同的算力。同時(shí),通過(guò)將輸入數(shù)據(jù)按行、按列廣播到PE矩陣上的各個(gè)PE單元,本文方案可在更短的時(shí)鐘延遲下完成對(duì)相同規(guī)模矩陣運(yùn)算的加速。另外,本文提出了一種新型的PE矩陣Mesh結(jié)構(gòu),使用該方法可以在不增加后端實(shí)現(xiàn)復(fù)雜度的情況下顯著減少帶寬消耗,且進(jìn)一步提升在大算力下的可實(shí)現(xiàn)性。
1" 設(shè)計(jì)背景及相關(guān)工作研究
1.1" 設(shè)計(jì)背景
矩陣運(yùn)算的本質(zhì)是乘加運(yùn)算,合理的對(duì)乘加運(yùn)算進(jìn)行調(diào)度是更好地實(shí)現(xiàn)矩陣運(yùn)算的關(guān)鍵。對(duì)于維度為[X]×[Y]的矩陣[A]乘以維度為[Y]×[Z]的矩陣[B],其將得到維度為[X]×[Z]的結(jié)果矩陣[C]。
[a0,0…a0,Y-1???aX-1,0…aX-1,Y-1?b0,0…b0,Z-1???bY-1,0…bY-1,Z-1=c0,0…c0,Z-1???cX-1,0…cX-1,Z-1] (1)
式中結(jié)果矩陣[C]中的每個(gè)元素[ci,j=m=0Y-1ai,m?bm,j],[0≤i≤X-1],[0≤j≤Z-1]。
在多種應(yīng)用領(lǐng)域下常需要對(duì)大規(guī)模矩陣運(yùn)算進(jìn)行加速,即需要實(shí)現(xiàn)對(duì)上述公式的加速。因此,有必要設(shè)計(jì)一款專(zhuān)門(mén)的矩陣運(yùn)算單元來(lái)高效地實(shí)現(xiàn)上述矩陣運(yùn)算。
1.2" 相關(guān)工作研究
為了實(shí)現(xiàn)上述矩陣運(yùn)算,谷歌公司專(zhuān)門(mén)設(shè)計(jì)了一款TPU來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速。TPU采用脈動(dòng)陣列的方式實(shí)現(xiàn)矩陣運(yùn)算,其核心是一個(gè)[N]×[N]的脈動(dòng)陣列。圖1以大小為4×4的脈動(dòng)陣列為例進(jìn)行說(shuō)明。其權(quán)重被提前裝載到脈動(dòng)陣列中,權(quán)重系數(shù)可認(rèn)為上述公式(1)中矩陣運(yùn)算的矩陣[A],矩陣[A]中的每個(gè)元素[aj,i]被提前裝載到脈動(dòng)陣列的[PEi,j]中,這里[0≤i≤3],[0≤j≤3]。矩陣[B]作為輸入特征圖,從左到右水平地輸入到脈動(dòng)陣列當(dāng)中。部分和從上到下垂直移動(dòng),脈動(dòng)陣列最后一行的PE單元輸出矩陣運(yùn)算的結(jié)果。
在TPU脈動(dòng)陣列中,每個(gè)[PEi,j]單元的硬件電路如圖2所示。圖2中上方的寄存器(reg)用于預(yù)先裝載[A]矩陣中元素[aj,i];乘法器用于實(shí)現(xiàn)[B]矩陣的元素[bi,k]與[aj,i]的乘積,[0≤k≤3];圖2中下方的寄存器用于存儲(chǔ)部分和,同時(shí)輸出當(dāng)前PE單元的部分和給其下方的PE單元。對(duì)于脈動(dòng)陣列最后一行的PE單元,其輸出矩陣運(yùn)算的最終結(jié)果。加法器用于實(shí)現(xiàn)乘法器輸出與部分和結(jié)果的累加,這里輸入給加法器的部分和結(jié)果來(lái)自于當(dāng)前PE單元上方PE單元的運(yùn)算結(jié)果。
谷歌公司的脈動(dòng)陣列在實(shí)現(xiàn)矩陣運(yùn)算時(shí)需要將矩陣[A]中的各個(gè)元素提前存儲(chǔ)到脈動(dòng)陣列中,當(dāng)矩陣[A]發(fā)生變化時(shí),每次都需要預(yù)先加載矩陣[A]的數(shù)據(jù)到脈動(dòng)陣列中。當(dāng)每次矩陣運(yùn)算的矩陣[A]都不相同時(shí),預(yù)先裝載矩陣[A]到脈動(dòng)陣列中會(huì)使矩陣運(yùn)算的運(yùn)算時(shí)間受到影響。
為此,一些設(shè)計(jì)采用經(jīng)典脈動(dòng)陣列[13?16]的方式實(shí)現(xiàn)矩陣運(yùn)算,圖3展示了其中一種經(jīng)典脈動(dòng)陣列的實(shí)現(xiàn)方式。此時(shí)[A]矩陣從左到右輸入到脈動(dòng)陣列,[B]矩陣從上到下輸入到脈動(dòng)陣列。不同于TPU中的脈動(dòng)陣列只在最后一行的PE單元輸出最終運(yùn)算結(jié)果,該方法下脈動(dòng)陣列中的每個(gè)PE單元都會(huì)輸出矩陣運(yùn)算的最終結(jié)果。
圖3所示脈動(dòng)陣列中每個(gè)PE單元的運(yùn)算結(jié)構(gòu)如圖4所示,其乘法器用于接收矩陣[A]和矩陣[B]的元素實(shí)現(xiàn)乘法運(yùn)算,加法器用于實(shí)現(xiàn)累加運(yùn)算,寄存器用于存儲(chǔ)部分和以及最終的運(yùn)算結(jié)果。當(dāng)寄存器輸出最終運(yùn)算結(jié)果時(shí),多路選擇器選擇將數(shù)據(jù)0輸入到加法器的其中一個(gè)輸入端口。
為了實(shí)現(xiàn)上述矩陣運(yùn)算,英偉達(dá)公司在其最新的幾款GPU產(chǎn)品中專(zhuān)門(mén)加入了Tensor Core(張量核心)來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速。其具體實(shí)現(xiàn)細(xì)節(jié)并沒(méi)有在其白皮書(shū)中完整的說(shuō)明。
AMD沒(méi)有在其GPU中設(shè)計(jì)專(zhuān)門(mén)的用于計(jì)算矩陣運(yùn)算的單元,其通過(guò)將矩陣運(yùn)算轉(zhuǎn)換成并行的乘加運(yùn)算,利用其CU(Compute Unit)內(nèi)部SIMD(Single Instruction Multiple Data)下的多個(gè)乘加單元的并行運(yùn)算來(lái)實(shí)現(xiàn)對(duì)矩陣運(yùn)算的加速。在相同算力的情況下,由于輸入輸出數(shù)據(jù)不停地和存儲(chǔ)媒介進(jìn)行交互,其加速能力不如專(zhuān)門(mén)的矩陣運(yùn)算加速單元。
2" 本文架構(gòu)實(shí)現(xiàn)方案
對(duì)于上述現(xiàn)有方案,其每個(gè)PE單元只能計(jì)算[a*b+c]。為了實(shí)現(xiàn)[a*b+c],每個(gè)PE單元有1個(gè)乘法器、1個(gè)加法器和1個(gè)用于存儲(chǔ)運(yùn)算結(jié)果的寄存器。為了提高算力,需要增加脈動(dòng)陣列中PE單元的個(gè)數(shù),因此脈動(dòng)陣列中加法器和乘法器的個(gè)數(shù)也成倍增加。同時(shí),為了實(shí)現(xiàn)脈動(dòng)陣列,在PE矩陣的數(shù)據(jù)輸入端口需要額外的寄存器來(lái)緩存輸入數(shù)據(jù),以實(shí)現(xiàn)時(shí)序匹配,此時(shí)所需的寄存器數(shù)量也隨之增加。脈動(dòng)陣列規(guī)模越大,需要的乘法器、加法器以及寄存器的數(shù)量就會(huì)成倍增加。
通過(guò)對(duì)PE單元進(jìn)行改進(jìn),本文提出了一種在相同算力情況下減少加法器和寄存器使用數(shù)量的方案。在本設(shè)計(jì)中,每個(gè)周期矩陣[A]中同一行的相鄰多個(gè)元素同時(shí)輸入到PE矩陣對(duì)應(yīng)行的每個(gè)PE單元中,矩陣[B]中同一列的相鄰多個(gè)元素同時(shí)輸入到PE矩陣對(duì)應(yīng)列的每個(gè)PE單元中,即每個(gè)PE單元每個(gè)周期可以實(shí)現(xiàn)[a1*b1+a2*b2+…+an*bn]的運(yùn)算,即將傳統(tǒng)的PE單元執(zhí)行標(biāo)量運(yùn)算改進(jìn)為每個(gè)PE單元都可執(zhí)行向量運(yùn)算,這里[n]為每個(gè)PE單元中乘法器的個(gè)數(shù)。以[n]等于4為例,其PE單元的結(jié)構(gòu)如圖5所示。
圖5中每個(gè)PE單元的乘法器個(gè)數(shù)為4,其對(duì)應(yīng)的加法器數(shù)量為3,寄存器的數(shù)量為1,其每次可以實(shí)現(xiàn)4對(duì)輸入元素的向量乘累加運(yùn)算。采用這種方案,雖然乘法器的數(shù)量提高了4倍,但加法器和寄存器數(shù)量并沒(méi)有與傳統(tǒng)架構(gòu)一樣提升4倍,其加法器的數(shù)量為3,寄存器的數(shù)量只為1,可見(jiàn)采用該方法可有效地減少資源消耗。
此外,本文方案還對(duì)PE矩陣的實(shí)現(xiàn)進(jìn)行了優(yōu)化,如圖6所示,本文方案并沒(méi)有采用脈動(dòng)陣列的方式實(shí)現(xiàn)PE矩陣,而是將輸入矩陣[A]的各行數(shù)據(jù)廣播到PE矩陣對(duì)應(yīng)行的各個(gè)PE單元中,將輸入矩陣[B]的各列數(shù)據(jù)廣播到PE矩陣對(duì)應(yīng)列的各個(gè)PE單元中。此種方法可進(jìn)一步減少采用脈動(dòng)陣列時(shí)輸入端所需要的寄存器數(shù)目,同時(shí),其不需要額外的延時(shí)即可將輸入數(shù)據(jù)同時(shí)傳遞給各個(gè)PE單元。
圖6以在4×4大小的PE矩陣中實(shí)現(xiàn)4×4大小的[A]矩陣乘以4×4大小的[B]矩陣為例,說(shuō)明矩陣運(yùn)算在本文方案PE矩陣中的運(yùn)算流程。
在一個(gè)周期內(nèi),將矩陣[A]第一行的四個(gè)數(shù)據(jù)[a00~a03]同時(shí)廣播到PE矩陣第一行的4個(gè)PE單元PE00~PE03;將矩陣[A]第二行的四個(gè)數(shù)據(jù)[a10~a13]同時(shí)廣播到PE矩陣第二行的4個(gè)PE單元PE10~PE13;將矩陣[A]第三行的四個(gè)數(shù)據(jù)[a20~a23]同時(shí)廣播到PE矩陣第三行的4個(gè)PE單元PE20~PE23;將矩陣[A]第四行的四個(gè)數(shù)據(jù)[a30~a33]同時(shí)廣播到PE矩陣第四行的4個(gè)PE單元PE30~PE33。
在該周期內(nèi),將矩陣[B]第一列的四個(gè)數(shù)據(jù)[b00~b30]同時(shí)廣播到PE矩陣第一列的4個(gè)PE單元PE00~PE30;將矩陣[B]第二列的四個(gè)數(shù)據(jù)[b01~b31]同時(shí)廣播到PE矩陣第二列的4個(gè)PE單元PE01~PE31;將矩陣[B]第三列的4個(gè)數(shù)據(jù)[b02~b32]同時(shí)廣播到PE矩陣第三列的4個(gè)PE單元PE02~PE32;將矩陣[B]第四列的四個(gè)數(shù)據(jù)[b03~b33]同時(shí)廣播到PE矩陣第四列的4個(gè)PE單元PE03~PE33。
此時(shí)PE矩陣的各個(gè)PE單元只需一個(gè)周期即可同時(shí)計(jì)算出結(jié)果矩陣的16個(gè)運(yùn)算結(jié)果[c00~c03]、[c10~c13]、[c20~c23]、[c30~c33]。PE矩陣中的每個(gè)PE單元計(jì)算出結(jié)果矩陣的一個(gè)元素。例如,PE單元PE00執(zhí)行[c00=a00*b00+a01*b10+a02*b20+a03*b30]這4對(duì)輸入數(shù)據(jù)的乘加運(yùn)算;PE單元PE01執(zhí)行[c01=a00*b01+a01*b11+a02*b21+a03*b31]這4對(duì)輸入數(shù)據(jù)的乘加運(yùn)算;依此類(lèi)推,其余PE單元同時(shí)完成各自的運(yùn)算。由于單周期內(nèi)同時(shí)輸出4×4大小的矩陣輸出結(jié)果,使得輸出結(jié)果的存儲(chǔ)控制邏輯也會(huì)相應(yīng)簡(jiǎn)化。
當(dāng)其他形狀的矩陣[A]和矩陣[B]相乘時(shí),需要結(jié)合與PE矩陣交互的存儲(chǔ)器的讀寫(xiě)控制邏輯,反復(fù)利用PE矩陣來(lái)完成各種形狀的矩陣乘法運(yùn)算。以大小為8×8的矩陣[A]和大小為8×4的矩陣[B]相乘為例,其可以拆解為多個(gè)4×4的矩陣乘法運(yùn)算以及相應(yīng)的累加運(yùn)算,其運(yùn)算流程如圖7所示。
8×8矩陣乘以8×4的矩陣可以等效為式(2):
[A00A01A10A11B00B10=C00C10] (2)
式中:[A00]、[A01]、[A10]、[A11]、[B00]和[B10]都為4×4矩陣;結(jié)果矩陣[C00]和[C10]也都為4×4矩陣。
[C00=A00*B00+A01*B10] (3)
[C10=A10*B00+A11*B10] (4)
根據(jù)式(2)~式(4),通過(guò)反復(fù)調(diào)用4×4矩陣運(yùn)算單元并執(zhí)行相應(yīng)的累加運(yùn)算,可以實(shí)現(xiàn)任意大規(guī)模的矩陣運(yùn)算。
為了進(jìn)一步提高PE矩陣的運(yùn)算能力,通常采用增加PE矩陣尺寸的方法,例如將本文所示的PE矩陣大小從4×4增加到8×8甚至16×16。但隨著PE矩陣尺寸的增加,后端實(shí)現(xiàn)的難度也會(huì)隨之增加。為了提高后端的可實(shí)現(xiàn)性,同時(shí)實(shí)現(xiàn)更高的算力,通常采用分tile的方式來(lái)實(shí)現(xiàn),即用多個(gè)小尺寸的PE矩陣同時(shí)工作來(lái)完成更大規(guī)模的矩陣運(yùn)算。比如4個(gè)16×16的PE矩陣并行工作即可達(dá)到尺寸為32×32的PE矩陣的算力。
本文展示了4個(gè)4×4大小的PE矩陣同時(shí)工作可實(shí)現(xiàn)更大算力的例子。其中每個(gè)PE矩陣在工作時(shí)都需要相應(yīng)的帶寬資源來(lái)向PE矩陣輸入矩陣[A]數(shù)據(jù)以及矩陣[B]數(shù)據(jù)。為了達(dá)到應(yīng)有的算力,多個(gè)PE矩陣同時(shí)工作時(shí),相應(yīng)的帶寬資源將成倍增加。
本文提出一種新型的PE矩陣互聯(lián)方案,使得輸入到PE矩陣的數(shù)據(jù)被共享,進(jìn)而減少了多個(gè)PE矩陣同時(shí)工作時(shí)所需的總帶寬資源。
對(duì)于8×4大小的[A]矩陣乘以4×8大小的[B]矩陣,每個(gè)PE矩陣執(zhí)行的操作如圖8所示。
圖8中:PE00、PE01、PE10以及PE11都表示大小為4×4的PE矩陣。其中PE矩陣PE00用于計(jì)算[A]矩陣的前4行和[B]矩陣的前4列;PE矩陣PE01用于計(jì)算[A]矩陣的前4行和[B]矩陣的后4列;PE矩陣PE10用于計(jì)算[A]矩陣的后4行和[B]矩陣的前4列;PE矩陣PE11用于計(jì)算[A]矩陣的后4行和[B]矩陣的后4列。
通過(guò)對(duì)PE矩陣進(jìn)行重新互聯(lián),并改動(dòng)每個(gè)PE矩陣在PE矩陣Mesh中的位置,利用數(shù)據(jù)共享可以達(dá)到減少帶寬資源的效果。與圖8對(duì)應(yīng)的PE矩陣Mesh結(jié)構(gòu)如圖9所示。
在圖9中,利用Mesh結(jié)構(gòu)對(duì)矩陣數(shù)據(jù)進(jìn)行共享,并改動(dòng)PE矩陣在Mesh中的相對(duì)位置,使得4個(gè)PE矩陣整體的輸入帶寬資源減少一半。在圖9中,PE矩陣PE00和PE01共享數(shù)據(jù)[A0];PE矩陣PE00和PE10共享數(shù)據(jù)[B0];PE矩陣PE11和PE10共享數(shù)據(jù)[A1];PE矩陣PE11和PE01共享數(shù)據(jù)[B1]??梢钥吹?,圖9中每個(gè)PE矩陣在PE矩陣Mesh中的位置也有相應(yīng)的調(diào)整。在圖9中,輸入數(shù)據(jù)僅輸入給最左側(cè)一列PE矩陣,為了實(shí)現(xiàn)數(shù)據(jù)共享,也對(duì)PE矩陣的位置進(jìn)行了調(diào)整。將圖8所示的常規(guī)位置變?yōu)槿鐖D9所示的位置。當(dāng)PE矩陣Mesh規(guī)模進(jìn)一步增大時(shí),也僅有最左側(cè)一列PE矩陣接收輸入數(shù)據(jù),此時(shí)輸入帶寬資源會(huì)更顯著減少。而常規(guī)排列方法會(huì)使最左側(cè)一列和最上邊一行都有與外部數(shù)據(jù)的交互,增加了后端可實(shí)現(xiàn)的難度。
3" 性能分析
對(duì)于單個(gè)矩陣乘法運(yùn)算單元,考慮到頻率要求和后端的可實(shí)現(xiàn)性,本文設(shè)計(jì)采用的PE矩陣中的單個(gè)PE單元一般實(shí)現(xiàn)對(duì)4、8以及16對(duì)輸入數(shù)據(jù)的乘加運(yùn)算。當(dāng)輸入數(shù)據(jù)對(duì)數(shù)大于16時(shí)后端實(shí)現(xiàn)難度巨大,小于4時(shí)算力又顯不足。對(duì)于單個(gè)PE單元,輸入數(shù)據(jù)對(duì)數(shù)越大,PE單元能達(dá)到的最高頻率越低,同時(shí)后端實(shí)現(xiàn)該P(yáng)E矩陣的難度越大。在具體選擇PE矩陣大小時(shí),需根據(jù)算力、頻率的要求以及后端實(shí)現(xiàn)方案的難度,從上述三種情況中選擇一種實(shí)現(xiàn)。如果單個(gè)PE單元實(shí)現(xiàn)4對(duì)輸入數(shù)據(jù)的乘累加運(yùn)算,則相應(yīng)的PE矩陣大小為4×4,其乘法器個(gè)數(shù)為4×4×4;如果單個(gè)PE單元實(shí)現(xiàn)8對(duì)輸入數(shù)據(jù)的乘累加運(yùn)算,則相應(yīng)的PE矩陣大小為8×8,其乘法器個(gè)數(shù)為8×8×8;如果單個(gè)PE單元實(shí)現(xiàn)16對(duì)輸入數(shù)據(jù)的乘累加運(yùn)算,則相應(yīng)的PE矩陣大小為16×16,其乘法器個(gè)數(shù)為16×16×16??梢?jiàn)當(dāng)進(jìn)一步增加規(guī)模時(shí),乘法器數(shù)將以指數(shù)增加,后端實(shí)現(xiàn)難度也將呈指數(shù)級(jí)增加。
對(duì)于每個(gè)PE單元實(shí)現(xiàn)4對(duì)乘加運(yùn)算的情況,其相應(yīng)的PE矩陣大小為4×4,此種情況下,PE矩陣乘法器個(gè)數(shù)為64,加法器的個(gè)數(shù)為48,寄存器的個(gè)數(shù)為16。在相同算力下,采用TPU的矩陣乘法實(shí)現(xiàn)方案,需要的乘法器個(gè)數(shù)為64,加法器個(gè)數(shù)為64,寄存器的個(gè)數(shù)為212。在相同算力下,采用經(jīng)典脈動(dòng)陣列實(shí)現(xiàn)矩陣乘法的方案,需要的乘法器個(gè)數(shù)為64,加法器個(gè)數(shù)為64,寄存器個(gè)數(shù)為232。表1展示了各種方案下矩陣乘法單元的資源消耗情況。
對(duì)于每個(gè)PE單元實(shí)現(xiàn)8對(duì)乘加運(yùn)算的情況,其相應(yīng)的PE矩陣大小為8×8,此種情況下,PE矩陣乘法器個(gè)數(shù)為512,加法器的個(gè)數(shù)為448,寄存器的個(gè)數(shù)為64。在相同算力下,采用TPU的矩陣乘法實(shí)現(xiàn)方案,需要的乘法器個(gè)數(shù)為512,加法器個(gè)數(shù)為512,寄存器的個(gè)數(shù)為2 000。在相同算力下,采用經(jīng)典脈動(dòng)陣列實(shí)現(xiàn)矩陣乘法的方案,需要的乘法器個(gè)數(shù)為512,加法器個(gè)數(shù)為512,寄存器個(gè)數(shù)為2 104。表2展示了各種方案下矩陣乘法單元的資源消耗情況。
對(duì)于每個(gè)PE單元實(shí)現(xiàn)16對(duì)乘加運(yùn)算的情況,其相應(yīng)的PE矩陣大小為16×16,此種情況下,PE矩陣乘法器個(gè)數(shù)為4 096,加法器的個(gè)數(shù)為3 840,寄存器的個(gè)數(shù)為256。在相同算力下,采用TPU的矩陣乘法實(shí)現(xiàn)方案,需要的乘法器個(gè)數(shù)為4 096,加法器個(gè)數(shù)為4 096,寄存器的個(gè)數(shù)為14 240。在相同算力下,采用經(jīng)典脈動(dòng)陣列實(shí)現(xiàn)矩陣乘法的方案,需要的乘法器個(gè)數(shù)為4 096,加法器個(gè)數(shù)為4 096,寄存器個(gè)數(shù)為16 192。表3展示了各種方案下矩陣乘法單元的資源消耗情況。
為了進(jìn)一步提高PE矩陣的算力,同時(shí)不增加后端實(shí)現(xiàn)的難度并減少帶寬消耗,本文提出了一種PE矩陣之間的互聯(lián)方案。表4給出了在不同PE矩陣Mesh規(guī)模下,帶寬資源節(jié)省的倍數(shù)。由于任意地增加PE矩陣Mesh的規(guī)模同樣會(huì)增加后端的實(shí)現(xiàn)難度,表4僅給出大小為2×2、4×4以及8×8情況下帶寬資源節(jié)省的倍數(shù)??梢?jiàn),采用本文所示的PE矩陣互聯(lián)方案可以有效減少帶寬資源的消耗。
為了方便驗(yàn)證,圖10展示了2×2大小的PE矩陣波形圖,PE矩陣中每個(gè)PE單元包含2個(gè)乘法器,即每個(gè)PE單元的計(jì)算并行度為2。其中[a00]、[a01]、[a10]以及[a11]為矩陣[a]的輸入數(shù)據(jù),[b00]、[b01]、[b10]以及[b11]為矩陣[b]的數(shù)據(jù),[c00]、[c01]、[c10]以及[c11]為PE矩陣的輸出結(jié)果。由圖10可見(jiàn),每個(gè)周期2×2大小的矩陣結(jié)果同時(shí)輸出。
綜上所述,相比于業(yè)內(nèi)流行的兩種矩陣運(yùn)算實(shí)現(xiàn)方案,在實(shí)現(xiàn)相同算力的情況下,使用本文方案可使硬件資源消耗更少。同時(shí),相比于TPU在每次進(jìn)行矩陣運(yùn)算時(shí),對(duì)于不同的矩陣[A],TPU都需要將[A]矩陣的元素預(yù)先加載到脈動(dòng)陣列中,本文設(shè)計(jì)不需要額外的矩陣加載過(guò)程,因此相比于TPU來(lái)說(shuō)進(jìn)一步地減少了處理時(shí)間。此外,相比于業(yè)內(nèi)流行的兩種矩陣運(yùn)算實(shí)現(xiàn)方案,本文方案在PE矩陣的輸入端口并沒(méi)有用于匹配時(shí)序的寄存器,其可以進(jìn)一步減少矩陣運(yùn)算的latency。同時(shí),采用本文提出的PE矩陣互聯(lián)方案可以在節(jié)省帶寬資源且不增加后端實(shí)現(xiàn)復(fù)雜度的情況下進(jìn)一步提升算力,以實(shí)現(xiàn)算力的擴(kuò)展。因此,本文方案可以作為實(shí)現(xiàn)矩陣運(yùn)算的有效實(shí)現(xiàn)方案。
4" 結(jié)" 語(yǔ)
本文介紹了實(shí)現(xiàn)矩陣運(yùn)算加速的硬件微架構(gòu)方案,分析了業(yè)界實(shí)現(xiàn)矩陣運(yùn)算的通用方法,并對(duì)谷歌的TPU和通用脈動(dòng)陣列進(jìn)行了詳細(xì)的分析。為了進(jìn)一步減少硬件資源消耗,本文設(shè)計(jì)了一種改進(jìn)型PE矩陣,該P(yáng)E矩陣將數(shù)據(jù)廣播到多個(gè)PE單元,減少了通用方法中對(duì)輸入端寄存器的使用。本文方案使用可同時(shí)進(jìn)行多對(duì)輸入數(shù)據(jù)乘加運(yùn)算的PE單元,進(jìn)一步減少了對(duì)加法器和寄存器的使用,達(dá)到了減少硬件資源消耗的目的。同時(shí),采用本文提出的PE矩陣互聯(lián)方案可進(jìn)一步提升算力,其可以在不增加后端實(shí)現(xiàn)復(fù)雜度的情況下減少帶寬資源。經(jīng)過(guò)分析表明,在具有相同算力的情況下,使用本文方案可以在使用更少硬件資源以及帶寬的情況下達(dá)到更少的運(yùn)算延遲,因此是實(shí)現(xiàn)矩陣運(yùn)算加速的一種有效方案。
注:本文通訊作者為田映輝。
參考文獻(xiàn)
[1] HE K M, ZHANG X Y, REN S Q, et al. Deep residual learning for image recognition [C]// Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). New York: IEEE, 2016: 770?778.
[2] ZHANG X Y, ZHOU X Y, LIN M X, et al. ShuffleNet: An extremely efficient convolutional neural network for mobile devices [C]// 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). New York: IEEE, 2018: 6848?6856.
[3] VASWANI A, SHAZZER N, PARMAR N, et al. Attention is all you need [C]// 2017 Conference and Workshop on Neural Information Processing Systems (NIPS). [S.l.: s.n.], 2017: 1?11.
[4] HUANG G, LIU Z, WEINBERGER K Q. Densely connected convolutional networks [C]// Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). New York: IEEE, 2017: 4700?4708.
[5] BENJUMEA A, TEETI I, CUZZOLIN F, et al. YOLO?Z: Impro?ving small object detection in YOLOv5 for autonomous vehicles [C]// IEEE International Conference on Computer Vision (ICCV). New York: IEEE, 2021: 1?11.
[6] GOPAL R, ANTON B, NARENDRA D, et al. Data multiplexed and hardware reused architecture for deep neural network acce?lerator [J]. Neurocomputing, 2022, 486: 147?159.
[7] PRATAP S R, SHREYAM K, JUGAL G, et al. A time domain 2D OaA?based convolutional neural networks accelerator [J]. Memories: Materials, devices, circuits and systems, 2023, 4: 100041.
[8] CHEN Y R, XIE Y, SONG L H, et al. A survey of accelerator architectures for deep neural networks [J]. Engineering, 2020, 6: 264?274.
[9] LI T, SHEN L. A sparse matrix vector multiplication accelerator based on high?bandwidth memory [J]. Computers and electrical engineering, 2023, 105: 108488.
[10] HAMEED K F, ADEEL P M, SHAHID M. Toward designing a hardware accelerator for 3D convolutional neural networks [J]. Computers and electrical engineering, 2023, 105: 108489.
[11] JOUPPI N P, YOUNG C, PATIL N, et al. In?datacenter performance analysis of a tensor processing unit [C]// 2017 ACM/IEEE Annual International Symposium on Computer Architecture (ISCA). New York: IEEE, 2017: 1?12.
[12] NVIDIA Corporation. NVIDIA A100 tensor core GPU architecture [M]. USA: NVIDIA Corporation, 2022.
[13] 王陽(yáng),陶華敏,肖山竹,等.基于脈動(dòng)陣列的矩陣乘法器硬件加速技術(shù)研究[J].微電子學(xué)與計(jì)算機(jī),2015,32(11):120?124.
[14] 劉勤讓?zhuān)瑒⒊珀?yáng),周俊,等.基于線性脈動(dòng)陣列的卷積神經(jīng)網(wǎng)絡(luò)計(jì)算優(yōu)化與性能分析[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào),2018,4(12):16?24.
[15] XU R, MA S, WANG Y H, et al. Heterogeneous systolic array architecture for compact CNNs hardware accelerators [J]. IEEE transactions on parallel and distributed systems, 2022, 33(11): 2860?2871.
[16] INAYAT K, CHUNG J. Hybrid accumulator factored systolic array for machine learning acceleration [J]. IEEE transactions on very large scale integration systems, 2022, 30(7): 881?892.