本申請(qǐng)涉及人工智能領(lǐng)域,更具體地,涉及一種卷積運(yùn)算芯片和通信設(shè)備。
背景技術(shù):
深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,簡(jiǎn)稱“DNN”)技術(shù)已經(jīng)成為人工智能領(lǐng)域的代表性算法,基于深度神經(jīng)網(wǎng)絡(luò)技術(shù)的字符識(shí)別、圖像分類或語(yǔ)音識(shí)別等關(guān)鍵技術(shù),已經(jīng)廣泛應(yīng)用于搜索引擎和智能手機(jī)等產(chǎn)品中。其中,當(dāng)前最為有效,且應(yīng)用最為廣泛的神經(jīng)網(wǎng)絡(luò)算法是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱“CNN”)算法,簡(jiǎn)稱“卷積運(yùn)算”。在現(xiàn)有技術(shù)中,CNN算法的核心計(jì)算單元是乘加運(yùn)算,乘法累加器(Multiplication Accumulator,簡(jiǎn)稱“MAC”)陣列常用于矩陣乘法運(yùn)算,而卷積運(yùn)算可以轉(zhuǎn)換為矩陣乘法運(yùn)算,因此業(yè)界廣泛采用MAC陣列為計(jì)算核心的專用加速硬件,例如,現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)、專用集成電路(Application Specific Integrated Circuits,ASIC)等,以加速卷積運(yùn)算的運(yùn)算速度。
在現(xiàn)有技術(shù)的方案中,一方面,當(dāng)MAC陣列中存在多個(gè)卷積窗口同時(shí)進(jìn)行卷積運(yùn)算時(shí),這些卷積窗口分布在MAC陣列中的不同位置,使得MAC陣列不是所有處理單元均會(huì)利用到。并且,當(dāng)MAC陣列的尺寸和多個(gè)卷積窗口的尺寸不適配時(shí),MAC陣列的利用率會(huì)非常低。另一方面,所謂的卷積運(yùn)算可以轉(zhuǎn)換成矩陣乘法運(yùn)算,實(shí)際上是將有大量交疊的卷積運(yùn)算平鋪成兩個(gè)大矩陣,該兩個(gè)大矩陣之間進(jìn)行乘法運(yùn)算。由于兩個(gè)矩陣中存在大量重復(fù)數(shù)據(jù),而這些數(shù)據(jù)都需要從隨機(jī)存取存儲(chǔ)器(Random Access Memory,簡(jiǎn)稱“RAM”)中,通過MAC陣列外部的數(shù)據(jù)通道,被輸入到MAC陣列進(jìn)行計(jì)算。因此存在大量重復(fù)數(shù)據(jù)被從RAM輸入到MAC陣列,這樣會(huì)增加RAM的訪問次數(shù)。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┝艘环N卷積運(yùn)算芯片和通信設(shè)備,能夠在提高陣列資源利用率的同時(shí)降低RAM訪問次數(shù),減小RAM訪問壓力。
第一方面,提供了一種卷積運(yùn)算芯片,包括數(shù)據(jù)緩存模塊、M×N乘法累加器陣列和輸出控制模塊,其中,所述數(shù)據(jù)緩存模塊用于向所述M×N乘法累加器陣列中的第一乘法累加窗口傳輸用于卷積運(yùn)算的多個(gè)卷積數(shù)據(jù)和多個(gè)卷積參數(shù),其中,所述多個(gè)卷積參數(shù)由所述數(shù)據(jù)緩存模塊根據(jù)第一卷積參數(shù)矩陣確定,所述多個(gè)卷積數(shù)據(jù)由所述數(shù)據(jù)緩存模塊根據(jù)第一卷積數(shù)據(jù)矩陣確定,所述第一卷積參數(shù)矩陣為A行B列,所述第一卷積數(shù)據(jù)矩陣為D行E列,所述第一乘法累加窗口為A行C列,A為大于或等于2的整數(shù),B和C均為大于或等于1的整數(shù),D為大于或等于A的正整數(shù),E為大于或等于max(B,C)的整數(shù),M為大于或等于A的正整數(shù),N為大于或等于C的正整數(shù);所述第一乘法累加窗口包括A×C個(gè)處理單元,第i行第j列的處理單元標(biāo)記為PEi,j,i按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,對(duì)應(yīng)于i的每一取值,j按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到C;所述第一乘法累加窗口的處理單元PEX,Y用于將PEX,Y的卷積數(shù)據(jù)和PEX,Y的卷積參數(shù)進(jìn)行乘法運(yùn)算,當(dāng)C大于或等于2時(shí),所述處理單元PEX,Y還用于將所述PEX,Y的卷積參數(shù)傳輸至PEX,Y+1,將所述PEX,Y的卷積數(shù)據(jù)傳輸至PEX-1,Y+1,分別作為所述PEX,Y+1和所述PEX-1,Y+1進(jìn)行乘法運(yùn)算的乘數(shù),其中,X為大于或等于2且小于或等于A的整數(shù),Y為大于或等于1且小于或等于C-1的整數(shù),所述PEX,Y的卷積數(shù)據(jù)為所述數(shù)據(jù)緩存模塊傳輸?shù)乃龆鄠€(gè)卷積數(shù)據(jù)中的一個(gè)卷積數(shù)據(jù),所述PEX,Y的卷積參數(shù)為所述數(shù)據(jù)緩存模塊傳輸?shù)乃龆鄠€(gè)卷積參數(shù)中的一個(gè)卷積參數(shù);所述第一乘法累加窗口用于將PEi,J進(jìn)行乘法運(yùn)算得到的乘積進(jìn)行加法運(yùn)算以獲得卷積結(jié)果,其中,J為大于或等于1且小于或等于C的整數(shù);所述輸出控制模塊用于輸出所述卷積結(jié)果。
第一方面的卷積運(yùn)算芯片通過對(duì)任意一個(gè)處理單元增加一條數(shù)據(jù)傳輸通道,使得相鄰處理單元之間能夠直接傳輸卷積數(shù)據(jù)和卷積參數(shù),同時(shí),這些數(shù)據(jù)在傳輸過程中都處于第一乘法累加窗口中,不再經(jīng)過RAM,可以減少RAM的訪問次數(shù),降低功耗。
在第一方面的一種可能的實(shí)現(xiàn)方式中,所述卷積運(yùn)算芯片還包括:陣列控制模塊,用于從所述M×N乘法累加器陣列中確定用于卷積運(yùn)算的所述第一乘法累加窗口,其中,根據(jù)所述第一卷積參數(shù)矩陣的行數(shù)確定所述第一乘法累加窗口的行數(shù),根據(jù)所述第一卷積參數(shù)矩陣的行數(shù)和所述第一卷積數(shù)據(jù)矩陣的行數(shù)確定所述第一乘法累加窗口的列數(shù)。在一種具體的實(shí)現(xiàn)方式中,所述陣列控制模塊具體根據(jù)如下公式確定所述第一乘法累加窗口的列數(shù):C=D-A+1。在本可能的實(shí)現(xiàn)方式中,根據(jù)卷積參數(shù)矩陣和卷積數(shù)據(jù)矩陣的尺寸靈活的確定乘法累加窗口的尺寸,可以盡可能地提高M(jìn)AC陣列的利用率以及卷積運(yùn)算的效率。
在第一方面的一種可能的實(shí)現(xiàn)方式中,所述第一乘法累加窗口具體用于:第t時(shí)鐘周期,第1列處理單元PEi,1將PEi,1的卷積數(shù)據(jù)和PEi,1的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得乘積其中,所述PEi,1的卷積數(shù)據(jù)和所述PEi,1的卷積參數(shù)由所述數(shù)據(jù)緩存模塊傳輸至所述PEi,1而獲得;將PEx,1的卷積參數(shù)傳輸至PEx,2,將PEx,1的卷積數(shù)據(jù)傳輸至PEx-1,2,分別作為所述PEx,2和所述PEx-1,2在第t+1時(shí)鐘周期進(jìn)行乘法運(yùn)算的乘數(shù),x按照從小到大的順序每次取一個(gè)整數(shù),依次從2取值到A;在t分別取[nB+1,nB+B]區(qū)間內(nèi)每一整數(shù)的情況下,將對(duì)應(yīng)于t所有取值的所有所述乘積利用如下公式進(jìn)行加法運(yùn)算獲得卷積結(jié)果S1:
其中,n為大于或等于0并且小于或等于(E-B)的整數(shù)。
在第一方面的一種可能的實(shí)現(xiàn)方式中,當(dāng)C大于或等于2時(shí),所述第一乘法累加窗口具體還用于:第T時(shí)鐘周期,第J’列處理單元PEi,J’將PEi,J’的卷積數(shù)據(jù)和PEi,J’的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得乘積其中,J’為大于或等于2且小于或等于C的整數(shù),所述PEi,J’的卷積參數(shù)由PEi,J’-1的卷積數(shù)據(jù)傳輸至所述PEi,J’而獲得,PEh,J’的卷積數(shù)據(jù)由PEh+1,J’-1的卷積數(shù)據(jù)傳輸至所述PEh,J’而獲得,PEA,J’的卷積參數(shù)和PEA,J’的卷積數(shù)據(jù)由所述數(shù)據(jù)緩存模塊傳輸至所述PEA,J’而獲得,h按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A-1;在T分別取[nB+J’,nB+J’+B-1]區(qū)間內(nèi)每一整數(shù)的情況下,將對(duì)應(yīng)于T所有取值的所有所述乘積通過如下公式進(jìn)行加法運(yùn)算獲得卷積結(jié)果SJ’:
其中,n為大于或等于0并且小于或等于(E-B)的整數(shù)。
在第一方面的一種可能的實(shí)現(xiàn)方式中,所述D×E卷積數(shù)據(jù)矩陣包括D*E個(gè)卷積數(shù)據(jù)ap,q,p按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到D,對(duì)應(yīng)于p的每一取值,q按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到E,所述A×B卷積參數(shù)矩陣包括A*B個(gè)卷積參數(shù)bp’,q’,p’按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,對(duì)應(yīng)于p’的每一取值,q’按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到B,所述數(shù)據(jù)緩存模塊包括:緩存器,用于緩存所述D*E個(gè)卷積數(shù)據(jù)和所述A*B個(gè)卷積參數(shù);計(jì)數(shù)器,用于在第nB+P時(shí)鐘周期,確定所述PEi,1的卷積數(shù)據(jù)為ai,n+P,所述PEi,1的卷積參數(shù)為bi,P,其中,P取值為大于或等于1且小于或等于B的整數(shù);所述計(jì)數(shù)器還用于在第nB+J’+Z-1時(shí)鐘周期,確定所述PEA,J’的卷積數(shù)據(jù)為aA+J’-1,n+Z,所述PEA,J’的卷積參數(shù)為bA,Z,其中,Z取值為大于或等于1且小于或等于B的整數(shù)。
在第一方面的一種可能的實(shí)現(xiàn)方式中,所述第一乘法累加窗口具體還用于:第nB+J時(shí)鐘周期,將乘積傳輸至PE2,J,與乘積進(jìn)行加法運(yùn)算,獲得卷積中間結(jié)果其中,所述乘積為PE1,J在第nB+J時(shí)鐘周期將PE1,J的卷積數(shù)據(jù)和PE1,J的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得的乘積,所述乘積為PE2,J在第nB+J時(shí)鐘周期將PE2,J的卷積數(shù)據(jù)和PE2,J的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得的乘積;將PEf,J進(jìn)行加法運(yùn)算得到的卷積中間結(jié)果傳輸至PEf+1,J,其中,f按照從小到大的順序每次取一個(gè)整數(shù),依次從2取值到A-1;將所述卷積中間結(jié)果與所述PEf+1,J進(jìn)行乘法運(yùn)算獲得的乘積進(jìn)行加法運(yùn)算,獲得卷積中間結(jié)果將在PEA,J內(nèi)獲得的卷積中間結(jié)果傳輸給所述輸出控制模塊用于緩存;在第nB+J+1時(shí)鐘周期向所述PE1,J傳輸所述卷積中間結(jié)果作為在第nB+J+1時(shí)鐘周期進(jìn)行加法運(yùn)算的累加初始值;將第(n+1)B+J-1時(shí)鐘周期獲得的卷積中間結(jié)果確定為卷積結(jié)果SJ。
在第一方面的一種可能的實(shí)現(xiàn)方式中,當(dāng)C大于或等于2時(shí),所述第一乘法累加窗口還包括:第一寄存器,設(shè)置于PEX,Y+1與所述PEX,Y之間,用于所述PEX,Y的卷積參數(shù)的寄存與傳輸;第二寄存器,設(shè)置于所述PEX,Y+1與PEX+1,Y之間,用于PEX+1,Y的卷積數(shù)據(jù)的寄存與傳輸;第三寄存器,設(shè)置于所述PEX,Y+1與PEX+1,Y+1之間,用于卷積中間結(jié)果的寄存與傳輸;其中,所述第一寄存器和所述第二寄存器還用于在所述PEX,Y+1在進(jìn)行乘法運(yùn)算時(shí)使PEX,Y+1的卷積數(shù)據(jù)和PEX,Y+1的卷積參數(shù)節(jié)拍對(duì)齊,所述第三寄存器還用于在所述第一乘法累加窗口進(jìn)行加法運(yùn)算時(shí)使所述PEX,Y+1傳輸?shù)木矸e中間結(jié)果與所述PEX+1,Y+1進(jìn)行乘法運(yùn)算獲得的乘積節(jié)拍對(duì)齊。
在第一方面的一種可能的實(shí)現(xiàn)方式中,所述M×N乘法累加器陣列還包括第二乘法累加窗口,其中,所述第一乘法累加窗口和所述第二乘法累加窗口沒有交集。
在第一方面的一種可能的實(shí)現(xiàn)方式中,所述第一卷積數(shù)據(jù)矩陣與第二卷積數(shù)據(jù)矩陣相同,所述第二卷積數(shù)據(jù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e數(shù)據(jù)所屬的卷積數(shù)據(jù)矩陣;所述第一卷積參數(shù)矩陣與第二卷積參數(shù)矩陣不同,所述第二卷積參數(shù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e參數(shù)所屬的卷積參數(shù)矩陣。
在第一方面的一種可能的實(shí)現(xiàn)方式中,所述第一卷積數(shù)據(jù)矩陣與第二卷積數(shù)據(jù)矩陣不同,所述第二卷積數(shù)據(jù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e數(shù)據(jù)所屬的卷積數(shù)據(jù)矩陣;所述第一卷積參數(shù)矩陣與第二卷積參數(shù)矩陣相同,所述第二卷積參數(shù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e參數(shù)所屬的卷積參數(shù)矩陣。
第二方面,提供了一種通信設(shè)備,包括通信連接的中央處理器CPU、雙倍數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器DDR SDRAM和第一方面或第一方面的任意一種可能的實(shí)現(xiàn)方式所述的卷積運(yùn)算芯片,其中,所述CPU用于控制所述卷積運(yùn)算芯片啟動(dòng)所述卷積運(yùn)算,所述DDR SDRAM用于向所述卷積運(yùn)算芯片的所述數(shù)據(jù)緩存模塊輸入所述多個(gè)卷積數(shù)據(jù)和所述多個(gè)卷積參數(shù)。
第二方面,提供了一種應(yīng)用于卷積運(yùn)算芯片中,所述卷積運(yùn)算芯片包括數(shù)據(jù)緩存模塊、M×N乘法累加器陣列和輸出控制模塊,所述方法包括:所述數(shù)據(jù)緩存模塊向所述M×N乘法累加器陣列中的第一乘法累加窗口傳輸用于卷積運(yùn)算的多個(gè)卷積數(shù)據(jù)和多個(gè)卷積參數(shù),其中,所述多個(gè)卷積參數(shù)由所述數(shù)據(jù)緩存模塊根據(jù)第一卷積參數(shù)矩陣確定,所述多個(gè)卷積數(shù)據(jù)由所述數(shù)據(jù)緩存模塊根據(jù)第一卷積數(shù)據(jù)矩陣確定,所述第一卷積參數(shù)矩陣為A行B列,所述第一卷積數(shù)據(jù)矩陣為D行E列,所述第一乘法累加窗口為A行C列,A為大于或等于2的整數(shù),B和C均為大于或等于1的整數(shù),D為大于或等于A的正整數(shù),E為大于或等于max(B,C)的整數(shù),M為大于或等于A的正整數(shù),N為大于或等于C的正整數(shù);所述第一乘法累加窗口包括A×C個(gè)處理單元,第i行第j列的處理單元標(biāo)記為PEi,j,i按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,對(duì)應(yīng)于i的每一取值,j按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到C,所述第一乘法累加窗口的處理單元PEX,Y將PEX,Y的卷積數(shù)據(jù)和PEX,Y的卷積參數(shù)進(jìn)行乘法運(yùn)算,當(dāng)C大于或等于2時(shí),所述處理單元PEX,Y還將所述PEX,Y的卷積參數(shù)傳輸至PEX,Y+1,將所述PEX,Y的卷積數(shù)據(jù)傳輸至PEX-1,Y+1,分別作為所述PEX,Y+1和所述PEX-1,Y+1進(jìn)行乘法運(yùn)算的乘數(shù),其中,X為大于或等于2且小于或等于A的整數(shù),Y為大于或等于1且小于或等于C-1的整數(shù),所述PEX,Y的卷積數(shù)據(jù)為所述數(shù)據(jù)緩存模塊傳輸?shù)乃龆鄠€(gè)卷積數(shù)據(jù)中的一個(gè)卷積數(shù)據(jù),所述PEX,Y的卷積參數(shù)為所述數(shù)據(jù)緩存模塊傳輸?shù)乃龆鄠€(gè)卷積參數(shù)中的一個(gè)卷積參數(shù);所述第一乘法累加窗口將PEi,J進(jìn)行乘法運(yùn)算得到的乘積進(jìn)行加法運(yùn)算以獲得卷積結(jié)果,其中,J為大于或等于1且小于或等于C的整數(shù);所述輸出控制模塊輸出所述卷積結(jié)果。
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述卷積運(yùn)算芯片還包括陣列控制模塊,所述方法還包括:所述陣列控制模塊從所述M×N乘法累加器陣列中確定用于卷積運(yùn)算的所述第一乘法累加窗口,其中,所述陣列控制模塊根據(jù)所述第一卷積參數(shù)矩陣的行數(shù)確定所述第一乘法累加窗口的行數(shù),所述陣列控制模塊根據(jù)所述第一卷積參數(shù)矩陣的行數(shù)和所述第一卷積數(shù)據(jù)矩陣的行數(shù)確定所述第一乘法累加窗口的列數(shù)。
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述陣列控制模塊根據(jù)所述第一卷積參數(shù)矩陣的行數(shù)和所述第一卷積數(shù)據(jù)矩陣的行數(shù)確定所述第一乘法累加窗口的列數(shù),包括:所述陣列控制模塊根據(jù)如下公式確定所述第一乘法累加窗口的列數(shù):C=D-A+1。
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述第一乘法累加窗口將PEi,J進(jìn)行乘法運(yùn)算得到的乘積進(jìn)行加法運(yùn)算以獲得卷積結(jié)果,包括:第t時(shí)鐘周期,第1列處理單元PEi,1將PEi,1的卷積數(shù)據(jù)和PEi,1的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得乘積其中,所述PEi,1的卷積數(shù)據(jù)和所述PEi,1的卷積參數(shù)由所述數(shù)據(jù)緩存模塊傳輸至所述PEi,1而獲得;將PEx,1的卷積參數(shù)傳輸至PEx,2,將PEx,1的卷積數(shù)據(jù)傳輸至PEx-1,2,分別作為所述PEx,2和所述PEx-1,2在第t+1時(shí)鐘周期進(jìn)行乘法運(yùn)算的乘數(shù),x按照從小到大的順序每次取一個(gè)整數(shù),依次從2取值到A;在t分別取[nB+1,nB+B]區(qū)間內(nèi)每一整數(shù)的情況下,將對(duì)應(yīng)于t所有取值的所有所述乘積利用如下公式進(jìn)行加法運(yùn)算獲得卷積結(jié)果S1:
其中,n為大于或等于0并且小于或等于(E-B)的整數(shù)。
在第三方面的一種可能的實(shí)現(xiàn)方式中,當(dāng)C大于或等于2時(shí),所述第一乘法累加窗口將PEi,J進(jìn)行乘法運(yùn)算得到的乘積進(jìn)行加法運(yùn)算以獲得卷積結(jié)果,包括:第T時(shí)鐘周期,第J’列處理單元PEi,J’將PEi,J’的卷積數(shù)據(jù)和PEi,J’的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得乘積其中,J’為大于或等于2且小于或等于C的整數(shù),所述PEi,J’的卷積參數(shù)由PEi,J’-1的卷積數(shù)據(jù)傳輸至所述PEi,J’而獲得,PEh,J’的卷積數(shù)據(jù)由PEh+1,J’-1的卷積數(shù)據(jù)傳輸至所述PEh,J’而獲得,PEA,J’的卷積參數(shù)和PEA,J’的卷積數(shù)據(jù)由所述數(shù)據(jù)緩存模塊傳輸至所述PEA,J’而獲得,h按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A-1;在T分別取[nB+J’,nB+J’+B-1]區(qū)間內(nèi)每一整數(shù)的情況下,將對(duì)應(yīng)于T所有取值的所有所述乘積通過如下公式進(jìn)行加法運(yùn)算獲得卷積結(jié)果SJ’:
其中,n為大于或等于0并且小于或等于(E-B)的整數(shù)
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述D×E卷積數(shù)據(jù)矩陣包括D*E個(gè)卷積數(shù)據(jù)ap,q,p按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到D,對(duì)應(yīng)于p的每一取值,q按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到E,所述A×B卷積參數(shù)矩陣包括A*B個(gè)卷積參數(shù)bp’,q’,p’按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,應(yīng)于p’的每一取值,q’按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到B,所述數(shù)據(jù)緩存模塊包括緩存器和計(jì)數(shù)器,所述多個(gè)卷積參數(shù)由所述數(shù)據(jù)緩存模塊根據(jù)第一卷積參數(shù)矩陣確定,所述多個(gè)卷積數(shù)據(jù)由所述數(shù)據(jù)緩存模塊根據(jù)第一卷積數(shù)據(jù)矩陣確定,包括:所述緩存器緩存所述D*E個(gè)卷積數(shù)據(jù)和所述A*B個(gè)卷積參數(shù);所述計(jì)數(shù)器在第nB+P時(shí)鐘周期,確定所述PEi,1的卷積數(shù)據(jù)為ai,n+P,所述PEi,1的卷積參數(shù)為bi,P,其中,P取值為大于或等于1且小于或等于B的整數(shù);所述計(jì)數(shù)器在第nB+J’+Z-1時(shí)鐘周期,確定所述PEA,J’的卷積數(shù)據(jù)為aA+J’-1,n+Z,所述PEA,J’的卷積參數(shù)為bA,Z,其中,Z取值為大于或等于1且小于或等于B的整數(shù)。
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述第一乘法累加窗口將PEi,J進(jìn)行乘法運(yùn)算得到的乘積進(jìn)行加法運(yùn)算以獲得卷積結(jié)果,包括:第nB+J時(shí)鐘周期,將乘積傳輸至PE2,J,與乘積進(jìn)行加法運(yùn)算,獲得卷積中間結(jié)果其中,所述乘積為PE1,J在第nB+J時(shí)鐘周期將PE1,J的卷積數(shù)據(jù)和PE1,J的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得的乘積,所述乘積為PE2,J在第nB+J時(shí)鐘周期將PE2,J的卷積數(shù)據(jù)和PE2,J的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得的乘積;將PEf,J進(jìn)行加法運(yùn)算得到的卷積中間結(jié)果傳輸至PEf+1,J,其中,f按照從小到大的順序每次取一個(gè)整數(shù),依次從2取值到A-1;將所述卷積中間結(jié)果與所述PEf+1,J進(jìn)行乘法運(yùn)算獲得的乘積進(jìn)行加法運(yùn)算,獲得卷積中間結(jié)果將在PEA,J內(nèi)獲得的卷積中間結(jié)果傳輸給所述輸出控制模塊用于緩存;在第nB+J+1時(shí)鐘周期向所述PE1,J傳輸所述卷積中間結(jié)果作為在第nB+J+1時(shí)鐘周期進(jìn)行加法運(yùn)算的累加初始值;將第(n+1)B+J-1時(shí)鐘周期獲得的卷積中間結(jié)果確定為卷積結(jié)果SJ。
在第三方面的一種可能的實(shí)現(xiàn)方式中,當(dāng)C大于或等于2時(shí),所述第一乘法累加窗口還包括設(shè)置于PEX,Y+1與PEX,Y之間的第一寄存器、設(shè)置于PEX,Y+1與PEX+1,Y之間的第二寄存器和設(shè)置于PEX,Y+1與PEX+1,Y+1之間的第三寄存器,所述方法還包括:所述第一寄存器寄存與傳輸PEX,Y的卷積參數(shù);所述第二寄存器寄存與傳輸PEX+1,Y的卷積數(shù)據(jù);所述第三寄存器寄存與傳輸卷積中間結(jié)果;其中,所述第一寄存器和所述第二寄存器在所述PEX,Y+1在進(jìn)行乘法運(yùn)算時(shí)使得PEX,Y+1的卷積數(shù)據(jù)和PEX,Y+1的卷積參數(shù)節(jié)拍對(duì)齊,所述第三寄存器在所述第一乘法累加窗口進(jìn)行加法運(yùn)算時(shí)使得所述PEX,Y+1傳輸?shù)木矸e中間結(jié)果與所述PEX+1,Y+1進(jìn)行乘法運(yùn)算獲得的乘積節(jié)拍對(duì)齊。
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述M×N乘法累加器陣列還包括第二乘法累加窗口,其中,所述第一乘法累加窗口和所述第二乘法累加窗口沒有交集。
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述第一卷積數(shù)據(jù)矩陣與第二卷積數(shù)據(jù)矩陣相同,所述第二卷積數(shù)據(jù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e數(shù)據(jù)所屬的卷積數(shù)據(jù)矩陣;所述第一卷積參數(shù)矩陣與第二卷積參數(shù)矩陣不同,所述第二卷積參數(shù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e參數(shù)所屬的卷積參數(shù)矩陣。
在第三方面的一種可能的實(shí)現(xiàn)方式中,所述第一卷積數(shù)據(jù)矩陣與第二卷積數(shù)據(jù)矩陣不同,所述第二卷積數(shù)據(jù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e數(shù)據(jù)所屬的卷積數(shù)據(jù)矩陣;所述第一卷積參數(shù)矩陣與第二卷積參數(shù)矩陣相同,所述第二卷積參數(shù)矩陣為所述數(shù)據(jù)緩存模塊向所述第二乘法累加窗口傳輸?shù)木矸e參數(shù)所屬的卷積參數(shù)矩陣。
第四方面,提供了一種計(jì)算機(jī)可讀介質(zhì),用于存儲(chǔ)計(jì)算機(jī)程序,該計(jì)算機(jī)程序包括用于執(zhí)行第三方面或第三方面的任意一種可能的實(shí)現(xiàn)方式所述的方法的指令。
附圖說明
圖1為本發(fā)明實(shí)施例的通信設(shè)備的示意性框圖。
圖2為本發(fā)明一個(gè)實(shí)施例的卷積運(yùn)算芯片的示意性框圖。
圖3為本發(fā)明一個(gè)實(shí)施例的乘法累加器陣列的示意性框圖。
圖4為本發(fā)明一個(gè)實(shí)施例的卷積運(yùn)算方法的運(yùn)算過程原理示意圖。
圖5為本發(fā)明另一個(gè)實(shí)施例的卷積運(yùn)算方法的運(yùn)算過程原理示意圖。
圖6為本發(fā)明又一個(gè)實(shí)施例的卷積運(yùn)算方法的運(yùn)算過程原理示意圖。
具體實(shí)施方式
下面結(jié)合附圖,對(duì)本發(fā)明的實(shí)施例進(jìn)行描述。
圖1為本發(fā)明實(shí)施例的卷積運(yùn)算芯片的應(yīng)用場(chǎng)景圖。在一種典型的通信設(shè)備中,例如片上系統(tǒng)(System on Chip,簡(jiǎn)稱“SoC”)中,硬件架構(gòu)包括中央處理器(Central Processing Unit,簡(jiǎn)稱“CPU”)100,雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Double Date Rate SDRAM,簡(jiǎn)稱“DDR SDRAM”)200以及本發(fā)明實(shí)施例所述的卷積運(yùn)算芯片300。CPU 100、DDR SDRAM 200和卷積運(yùn)算芯片300通信連接。CPU 100控制卷積運(yùn)算芯片300啟動(dòng)卷積運(yùn)算,DDR SDRAM 200用于向卷積運(yùn)算芯片300的數(shù)據(jù)緩存模塊輸入多個(gè)卷積數(shù)據(jù)和多個(gè)卷積參數(shù),然后卷積運(yùn)算芯片300根據(jù)獲取的卷積數(shù)據(jù)和卷積參數(shù)完成卷積運(yùn)算,得到運(yùn)算結(jié)果,將運(yùn)算結(jié)果寫回DDR SDRAM 200約定的內(nèi)存地址,通知CPU 100卷積運(yùn)算完成。
圖2為本發(fā)明實(shí)施例所述的卷積運(yùn)算芯片300的示意性框圖。如圖2所示,卷積運(yùn)算芯片300包括:數(shù)據(jù)緩存模塊310、M×N乘法累加器陣列320和輸出控制模塊330。
數(shù)據(jù)緩存模塊310用于向M×N乘法累加器陣列320中的第一乘法累加窗口傳輸用于卷積運(yùn)算的多個(gè)卷積數(shù)據(jù)和多個(gè)卷積參數(shù),其中,多個(gè)卷積參數(shù)由數(shù)據(jù)緩存模塊310根據(jù)第一卷積參數(shù)矩陣確定,多個(gè)卷積數(shù)據(jù)由數(shù)據(jù)緩存模塊310根據(jù)第一卷積數(shù)據(jù)矩陣確定,第一卷積參數(shù)矩陣為A行B列,第一卷積數(shù)據(jù)矩陣為D行E列,第一乘法累加窗口為A行C列,A為大于或等于2的整數(shù),B和C均為大于或等于1的整數(shù),D為大于或等于A的正整數(shù),E為大于或等于max(B,C)的整數(shù),M為大于或等于A的正整數(shù),N為大于或等于C的正整數(shù)。
圖3為M×N乘法累加器陣列320的示意性框圖。如圖3所示,乘法累加器陣列包括M*N個(gè)處理單元,第u行第v列的處理單元標(biāo)記為PEu,v,u按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到M,對(duì)應(yīng)于u的每一取值,v按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到N。對(duì)于某一行而言,例如第U行,U為大于或等于1且小于或等于M的整數(shù),PEU,α與PEU,α+1之間存在橫向的數(shù)據(jù)傳輸通道,α為大于或等于1且小于或等于N-1的任意整數(shù)。PEβ,α與PEβ-1,α+1之間存在斜向的數(shù)據(jù)傳輸通道,α為大于或等于1且小于或等于N-1的任意整數(shù),β為大于或等于2且小于或等于M的任意整數(shù)。
M×N乘法累加器陣列320中的第一乘法累加窗口包括A×C個(gè)處理單元,第i行第j列的處理單元標(biāo)記為PEi,j,i按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,對(duì)應(yīng)于i的每一取值,j按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到C。第一乘法累加窗口的處理單元PEX,Y用于將PEX,Y的卷積數(shù)據(jù)和PEX,Y的卷積參數(shù)進(jìn)行乘法運(yùn)算,當(dāng)C大于或等于2時(shí),處理單元PEX,Y還用于將PEX,Y的卷積參數(shù)傳輸至PEX,Y+1,將PEX,Y的卷積數(shù)據(jù)傳輸至PEX-1,Y+1,分別作為PEX,Y+1和PEX-1,Y+1進(jìn)行乘法運(yùn)算的乘數(shù),其中,X為大于或等于2且小于或等于A的整數(shù),Y為大于或等于1且小于或等于C-1的整數(shù),PEX,Y的卷積數(shù)據(jù)為數(shù)據(jù)緩存模塊310傳輸?shù)亩鄠€(gè)卷積數(shù)據(jù)中的一個(gè)卷積數(shù)據(jù),PEX,Y的卷積參數(shù)為數(shù)據(jù)緩存模塊310傳輸?shù)亩鄠€(gè)卷積參數(shù)中的一個(gè)卷積參數(shù)。
第一乘法累加窗口用于將PEi,J進(jìn)行乘法運(yùn)算得到的乘積進(jìn)行加法運(yùn)算以獲得卷積結(jié)果,其中,J為大于或等于1且小于或等于C的整數(shù)。
輸出控制模塊330用于輸出卷積結(jié)果。
因此,本發(fā)明實(shí)施例的卷積運(yùn)算芯片通過對(duì)任意一個(gè)處理單元增加一條數(shù)據(jù)傳輸通道,使得相鄰處理單元之間能夠直接傳輸卷積數(shù)據(jù)和卷積參數(shù),同時(shí),這些數(shù)據(jù)在傳輸過程中都處于第一乘法累加窗口中,不再經(jīng)過RAM,可以減少RAM的訪問次數(shù),降低功耗。
應(yīng)理解,卷積運(yùn)算芯片300還包括陣列控制模塊340,用于從M×N乘法累加器陣列320中根據(jù)第一卷積參數(shù)矩陣確定用于卷積運(yùn)算的第一乘法累加窗口,其中,根據(jù)第一卷積參數(shù)矩陣的行數(shù)確定第一乘法累加窗口的行數(shù)。具體地,第一卷積參數(shù)矩陣為A行B列,則選擇用于卷積運(yùn)算的第一乘法累加窗口的行數(shù)也為A,第一乘法累加窗口的列數(shù)C可以為大于或等于1且小于或等于N的正整數(shù)。
在本發(fā)明實(shí)施例中,為盡可能地提高M(jìn)AC陣列的利用率以及卷積運(yùn)算效率,陣列控制模塊320可以根據(jù)第一卷積參數(shù)矩陣的行數(shù)和第一卷積數(shù)據(jù)矩陣的行數(shù)確定第一乘法累加窗口的列數(shù)。具體而言,陣列控制模塊320可以根據(jù)如下的公式(1)確定用于卷積運(yùn)算的第一乘法累加窗口的列數(shù)C:
C=D-A+1 (1)。
C的上述取值是一種可選的方式,當(dāng)然C也可以選取大于或小于公式(1)所計(jì)算得到的值,此時(shí)通過調(diào)整卷積矩陣和卷積參數(shù)的輸入,仍然可以實(shí)現(xiàn)卷積運(yùn)算,本發(fā)明實(shí)施例對(duì)此不作限定。
因此,使用上述方案確定用于卷積運(yùn)算的第一乘法累加窗口的行數(shù)和列數(shù),使得乘法累加器中處理單元的使用與卷積參數(shù)矩陣的大小解耦,可以根據(jù)需要靈活調(diào)整第一乘法累加窗口的行數(shù)和列數(shù),能夠提高資源的利用率,從而提高設(shè)備的運(yùn)算性能。
例如,假設(shè)第一卷積參數(shù)矩陣為3行4列,則第一卷積窗口的行數(shù)確定為3行,同時(shí),
假設(shè)第一卷積數(shù)據(jù)矩陣為3行,則確定第一乘法累加窗口的列數(shù)C=3-3+1=1列;
假設(shè)第一卷積數(shù)據(jù)矩陣為4行,則確定第一乘法累加窗口的列數(shù)C=4-3+1=2列;
假設(shè)第一卷積數(shù)據(jù)矩陣為5行,則確定第一乘法累加窗口的列數(shù)C=5-3+1=3列;
假設(shè)第一卷積數(shù)據(jù)矩陣為6行,則確定第一乘法累加窗口的列數(shù)C=6-3+1=4列;
…
應(yīng)理解,如果第一卷積數(shù)據(jù)矩陣尺寸較大,例如包括256行數(shù)據(jù),使得按照以上公式計(jì)算出的C超出了乘法累加器的最大列數(shù)N,則可以將該256行數(shù)據(jù)分為多次計(jì)算。
以乘法累加器陣列為8行8列為例進(jìn)行說明。3行8列的第一乘法累加窗口可以同時(shí)對(duì)10行卷積數(shù)據(jù)進(jìn)行卷積,因此對(duì)于256行卷積數(shù)據(jù)可以做26次卷積運(yùn)算,其中前25次每一次對(duì)10行卷積數(shù)據(jù)進(jìn)行卷積,第26次對(duì)剩余的6行數(shù)據(jù)進(jìn)行卷積。
為了加快運(yùn)算效率以及提高陣列使用率,可以同時(shí)激活多行處理單元作為乘法累加窗口,例如,可以在M行N列的乘法累加器陣列中選擇激活連續(xù)的floor((M/A)*A行處理單元。在8行8列的乘法累加器陣列中,可以激活連續(xù)的floor((8/3)*3=6行處理單元,其中3行8列乘法累加窗口可以用于做25次的卷積運(yùn)算,該25次卷積運(yùn)算每次針對(duì)不同的10行數(shù)據(jù)進(jìn)行,剩余的3行4列乘法累加窗口可以對(duì)剩余的6行數(shù)據(jù)進(jìn)行卷積運(yùn)算;也可以是相鄰的兩個(gè)3行8列乘法累加窗口分工做該26次卷積運(yùn)算,每一3行8列乘法累加窗口都可以做針對(duì)10行數(shù)據(jù)的卷積運(yùn)算,以及都可以做針對(duì)剩余6行數(shù)據(jù)的卷積運(yùn)算,本發(fā)明實(shí)施例對(duì)此不作限定。
假設(shè)D×E卷積數(shù)據(jù)矩陣包括D*E個(gè)卷積數(shù)據(jù)ap,q,其中,p按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到D,對(duì)應(yīng)于p的每一取值,q按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到E。所述A×B卷積參數(shù)矩陣包括A*B個(gè)卷積參數(shù)bp’,q’,p’按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,對(duì)應(yīng)于p’的每一取值,q’按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到B。數(shù)據(jù)緩存模塊310內(nèi)的緩存器用于將D*E個(gè)卷積數(shù)據(jù)和A*B個(gè)卷積參數(shù)進(jìn)行緩存;在第nB+P時(shí)鐘周期,數(shù)據(jù)緩存模塊310中的計(jì)數(shù)器確定PEi,1的卷積數(shù)據(jù)為ai,n+P,PEi,1的卷積參數(shù)為bi,P,其中,P取值為大于或等于1且小于或等于B的整數(shù),i為變量,i按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A。該計(jì)數(shù)器在第nB+J’+Z-1時(shí)鐘周期,確定PEA,J’的卷積數(shù)據(jù)為aA+J’-1,n+Z,PEA,J’的卷積參數(shù)為bA,Z,其中,Z取值為大于或等于1且小于或等于B的整數(shù)。
第一乘法累加窗口具體執(zhí)行以下步驟。第t時(shí)鐘周期,第1列處理單元PEi,1將PEi,1的卷積數(shù)據(jù)和PEi,1的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得乘積其中,PEi,1的卷積數(shù)據(jù)和PEi,1的卷積參數(shù)由數(shù)據(jù)緩存模塊310傳輸至PEi,1而獲得;將PEx,1的卷積參數(shù)傳輸至PEx,2,將PEx,1的卷積數(shù)據(jù)傳輸至PEx-1,2,分別作為PEx,2和PEx-1,2在第t+1時(shí)鐘周期進(jìn)行乘法運(yùn)算的乘數(shù),x按照從小到大的順序每次取一個(gè)整數(shù),依次從2取值到A;在t分別取[nB+1,nB+B]區(qū)間內(nèi)每一整數(shù)的情況下,將對(duì)應(yīng)于t所有取值的所有所述乘積利用如下公式(2)進(jìn)行加法運(yùn)算獲得卷積結(jié)果S1:
其中,i為變量,i按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,n為大于或等于0并且小于或等于(E-B)的整數(shù)。
由公式(2)可知,加法運(yùn)算是將t在[nB+1,nB+B]區(qū)間的每一整數(shù)取值下的A(由變量i變化獲得)個(gè)先進(jìn)行求和,再將t作為變量得到的B個(gè)進(jìn)行求和。
具體地,第一卷積數(shù)據(jù)矩陣為:
第一卷積參數(shù)矩陣為:
n=0時(shí),在第1至B時(shí)鐘周期,數(shù)據(jù)緩存模塊310向處理單元PE1,1傳輸?shù)木矸e數(shù)據(jù)分別為a1,1,a1,2,a1,3,…,a1,B,向處理單元PE1,1傳輸?shù)木矸e參數(shù)分別為b1,1,b1,2,b1,3,…,b1,B;數(shù)據(jù)緩存模塊310向處理單元PE2,1傳輸?shù)木矸e數(shù)據(jù)分別為a2,1,a2,2,a2,3,…,a2,B,向處理單元PE2,1傳輸?shù)木矸e參數(shù)分別為b2,1,b2,2,b2,3,…,b2,B;
…
數(shù)據(jù)緩存模塊310向處理單元PEA,1傳輸?shù)木矸e數(shù)據(jù)分別為aA,1,aA,2,aA,3,…,aA,B,向處理單元PEA,1傳輸?shù)木矸e參數(shù)分別為bA,1,bA,2,bA,3,…,bA,B。
n=1時(shí),在第B+1至2B時(shí)鐘周期,數(shù)據(jù)緩存模塊310向處理單元PE1,1傳輸?shù)木矸e數(shù)據(jù)分別為a1,2,a1,3,a1,4,…,a1,B+1,向處理單元PE1,1傳輸?shù)木矸e參數(shù)分別為b1,1,b1,2,b1,3,…,b1,B;數(shù)據(jù)緩存模塊310向處理單元PE2,1傳輸?shù)木矸e數(shù)據(jù)分別為a2,2,a2,3,a2,4,…,a2,B+1,向處理單元PE2,1傳輸?shù)木矸e參數(shù)分別為b2,1,b2,2,b2,3,…,b2,B;
…
數(shù)據(jù)緩存模塊310向處理單元PEA,1傳輸?shù)木矸e數(shù)據(jù)分別為aA,2,aA,3,aA,4,…,aA,B+1,向處理單元PEA,1傳輸?shù)木矸e參數(shù)分別為bA,1,bA,2,bA,3,…,bA,B;
…
對(duì)于除了第一列以外的其它列的處理單元而言,第T時(shí)鐘周期,第J’列處理單元PEi,J’將PEi,J’的卷積數(shù)據(jù)和PEi,J’的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得乘積其中,i按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A,J’為大于或等于2且小于或等于C的整數(shù),PEi,J’的卷積參數(shù)由PEi,J’-1的卷積參數(shù)傳輸至PEi,J’而獲得,PEh,J’的卷積數(shù)據(jù)由PEh+1,J’-1的卷積數(shù)據(jù)傳輸至PEh,J’而獲得,PEA,J’的卷積參數(shù)和PEA,J’的卷積數(shù)據(jù)由數(shù)據(jù)緩存模塊310傳輸至PEA,J’而獲得,h按照從小到大的順序每次取一個(gè)整數(shù),依次從1取值到A-1。具體地,計(jì)數(shù)器在第nB+J’+Z-1時(shí)鐘周期,確定PEA,J’的卷積數(shù)據(jù)為aA+J’-1,n+Z,PEA,J’的卷積參數(shù)為bA,Z,其中,Z取值為大于或等于1且小于或等于B的整數(shù)。
在T分別取[nB+J’,nB+J’+B-1]區(qū)間內(nèi)每一整數(shù)的情況下,將對(duì)應(yīng)于T所有取值的所有所述乘積通過如下公式(3)進(jìn)行加法運(yùn)算獲得卷積結(jié)果SJ’:
由公式(3)可知,加法運(yùn)算是將T在[nB+J’,nB+J’+B-1]區(qū)間的每一整數(shù)取值下的A(由變量i變化獲得)個(gè)先進(jìn)行求和,再將T作為變量得到的B個(gè)進(jìn)行求和。
具體地,第T時(shí)鐘周期,處理單元PE1,2中的卷積參數(shù)由上一時(shí)鐘周期內(nèi)PE1,1的卷積參數(shù)傳輸至PE1,2而獲得,處理單元PE1,2中的卷積數(shù)據(jù)由上一時(shí)鐘周期內(nèi)處理單元PE2,1的卷積數(shù)據(jù)傳輸而來;處理單元PE2,2中的卷積參數(shù)由上一時(shí)鐘周期內(nèi)PE2,1的卷積參數(shù)傳輸至PE2,2而獲得,處理單元PE2,2中的卷積數(shù)據(jù)由上一時(shí)鐘周期內(nèi)處理單元PE3,1的卷積數(shù)據(jù)傳輸而來;
…
處理單元PEA-1,2中的卷積參數(shù)由上一時(shí)鐘周期內(nèi)PEA-1,1的卷積參數(shù)傳輸至PEA-1,2而獲得,處理單元PEA-1,2中的卷積數(shù)據(jù)由上一時(shí)鐘周期內(nèi)處理單元PEA,1的卷積數(shù)據(jù)傳輸而獲得;處理單元PEA,2的卷積參數(shù)和卷積數(shù)據(jù)由數(shù)據(jù)緩存模塊310傳輸而獲得。
處理單元PE1,J’中的卷積參數(shù)由上一時(shí)鐘周期內(nèi)PE1,J’-1的卷積參數(shù)傳輸至PE1,J’而獲得,處理單元PE1,J’中的卷積數(shù)據(jù)由上一時(shí)鐘周期內(nèi)處理單元PE2,J’-1的卷積數(shù)據(jù)傳輸而獲得;處理單元PE2,J’中的卷積參數(shù)由上一時(shí)鐘周期內(nèi)PE2,J’-1的卷積參數(shù)傳輸至PE2,J’而獲得,處理單元PE2,J’中的卷積數(shù)據(jù)由上一時(shí)鐘周期內(nèi)處理單元PE3,J’-1的卷積數(shù)據(jù)傳輸而來;
…
處理單元PEA-1,J’中的卷積參數(shù)由上一時(shí)鐘周期內(nèi)PEA-1,J’-1的卷積參數(shù)傳輸至PEA-1,J’而獲得,處理單元PEA-1,J’中的卷積數(shù)據(jù)由上一時(shí)鐘周期內(nèi)處理單元PEA,J’-1的卷積數(shù)據(jù)傳輸而獲得;處理單元PEA,J’的卷積參數(shù)和卷積數(shù)據(jù)由數(shù)據(jù)緩存模塊310傳輸而獲得。
對(duì)于第一乘法累加窗口中的任意一列處理單元,例如,第J列處理單元,在第nB+J時(shí)鐘周期,將乘積傳輸至PE2,J,與乘積進(jìn)行加法運(yùn)算,獲得卷積中間結(jié)果其中,乘積為PE1,J在第nB+J時(shí)鐘周期將PE1,J的卷積數(shù)據(jù)和PE1,J的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得的乘積,乘積為PE2,J在第nB+J時(shí)鐘周期將PE2,J的卷積數(shù)據(jù)和PE2,J的卷積參數(shù)進(jìn)行乘法運(yùn)算獲得的乘積;將PEf,J進(jìn)行加法運(yùn)算得到的卷積中間結(jié)果傳輸至PEf+1,J,其中,f按照從小到大的順序每次取一個(gè)整數(shù),依次從2取值到A-1;將卷積中間結(jié)果與PEf+1,J進(jìn)行乘法運(yùn)算獲得的乘積進(jìn)行加法運(yùn)算,獲得卷積中間結(jié)果將在PEA,J內(nèi)獲得的卷積中間結(jié)果傳輸給輸出控制模塊330用于緩存;在第nB+J+1時(shí)鐘周期向PE1,J傳輸卷積中間結(jié)果作為在第nB+J+1時(shí)鐘周期進(jìn)行加法運(yùn)算的累加初始值。
將第(n+1)B+J-1時(shí)鐘周期獲得的卷積中間結(jié)果確定為第J卷積結(jié)果SJ。
圖4至圖6為本發(fā)明實(shí)施例的的卷積運(yùn)算芯片進(jìn)行卷積運(yùn)算的過程原理圖。假設(shè)第一卷積數(shù)據(jù)矩陣為如下矩陣:
第一卷積參數(shù)矩陣為如下矩陣:
M×N乘法累加器陣列320為8行8列的平鋪陣列,即M等于8,N等于8??梢钥闯觯谝痪矸e數(shù)據(jù)矩陣為一個(gè)5行13列的矩陣,第一卷積參數(shù)矩陣為一個(gè)3行3列的矩陣,在此例中,A=3,B=3,D=5,E=13,M=8,N=8。
可以知道,3行3列的第一卷積參數(shù)矩陣與5行13列的第一卷積數(shù)據(jù)矩陣經(jīng)過卷積運(yùn)算后,得到的卷積結(jié)果矩陣的尺寸為3行11列。
陣列控制模塊340根據(jù)第一卷積數(shù)據(jù)矩陣和第一參數(shù)矩陣的尺寸確定第一乘法累加窗口的尺寸,具體如下:
如果第一卷積參數(shù)矩陣的尺寸為3行3列,則將會(huì)采用連續(xù)的3行處理單元作為卷積運(yùn)算的處理單元,即確定第一乘法累加窗口的行數(shù)為A=3行;同時(shí),第一卷積數(shù)據(jù)矩陣為5行13列,則根據(jù)公式C=D-A+1,確定第一乘法累加窗口的列數(shù)為C=3列。因此,在8行8列的乘法累加器陣列中,第一乘法累加窗口為3行3列。
應(yīng)理解,3×3第一乘法累加窗口在8×8乘法累加器320中的位置不受限制,可以位于陣列的邊緣,也可以位于陣列的中間,本發(fā)明實(shí)施例對(duì)此不作限制。
第一卷積參數(shù)矩陣和第一卷積數(shù)據(jù)矩陣分別輸入數(shù)據(jù)緩存模塊310后,數(shù)據(jù)緩存模塊310即對(duì)上述矩陣進(jìn)行緩存和并輸入第一乘法累加窗口。
數(shù)據(jù)緩存模塊310將第一卷積參數(shù)矩陣中的卷積參數(shù)按照時(shí)鐘周期的順序進(jìn)行排列,即:
數(shù)據(jù)緩存模塊310將第一卷積參數(shù)矩陣中的第一行卷積參數(shù)按照時(shí)鐘周期的順序排列為k11,k12,k13,k11,k12,k13,k11…
數(shù)據(jù)緩存模塊310將第一卷積參數(shù)矩陣中的第一行卷積參數(shù)按照時(shí)鐘周期的順序排列為k21,k22,k23,k21,k22,k23,k21…
數(shù)據(jù)緩存模塊310將第一卷積參數(shù)矩陣中的第一行卷積參數(shù)按照時(shí)鐘周期的順序排列為k31,k32,k33,k31,k32,k33,k31…
也就是說,在第一時(shí)鐘周期,第一乘法累加窗口的第一列處理單元中的卷積參數(shù)從第一行到第三行分別為k11,k21和k31;在第二時(shí)鐘周期,第一乘法累加窗口的第一列處理單元中的卷積參數(shù)從第一行到第三行分別為k12,k22和k32;在第三時(shí)鐘周期,第一乘法累加窗口的第一列處理單元中的卷積參數(shù)從第一行到第三行分別為k13,k23和k33;
…
數(shù)據(jù)緩存模塊310將第一卷積數(shù)據(jù)矩陣中的卷積數(shù)據(jù)按照時(shí)鐘周期的順序進(jìn)行排列,即:
數(shù)據(jù)緩存模塊310將第一卷積數(shù)據(jù)矩陣中的第一行卷積數(shù)據(jù)按照時(shí)鐘周期的順序排列為0,1,2,1,2,3,2,3,4,3,4…
數(shù)據(jù)緩存模塊310將第一卷積數(shù)據(jù)矩陣中的第二行卷積數(shù)據(jù)按照時(shí)鐘周期的順序排列為13,14,15,14,15,16,15,16,17,16,17…
數(shù)據(jù)緩存模塊310將第一卷積數(shù)據(jù)矩陣中的第三行卷積數(shù)據(jù)按照時(shí)鐘周期的順序排列為26,27,28,27,28,29,28,29,30,29,30…
數(shù)據(jù)緩存模塊310將第一卷積數(shù)據(jù)矩陣中的第四行卷積數(shù)據(jù)按照時(shí)鐘周期的順序排列為39,40,41,40,41,42,41,42,43,42,43…
數(shù)據(jù)緩存模塊310將第一卷積數(shù)據(jù)矩陣中的第五行卷積數(shù)據(jù)按照時(shí)鐘周期的順序排列為52,53,54,53,54,55,54,55,56,56,57…
也就是說,在第一時(shí)鐘周期,第一乘法累加窗口的第一列處理單元中的卷積數(shù)據(jù)從第一行到第三行分別為0,13和26;在第二時(shí)鐘周期,第一乘法累加窗口的第一列處理單元中的卷積數(shù)據(jù)從第一行到第三行分別為1,14和27;在第三時(shí)鐘周期,第一乘法累加窗口的第一列處理單元中的卷積參數(shù)從第一行到第三行分別為2,15和28。
圖4為發(fā)明實(shí)施例的卷積運(yùn)算芯片在第一時(shí)鐘周期的運(yùn)算過程原理圖。如圖4所示,在第一時(shí)鐘周期,將第一列處理單元PEi,1(其中,i的分別取值1,2,3)中的卷積數(shù)據(jù)和卷積參數(shù)分別進(jìn)行乘法運(yùn)算,得到的乘法結(jié)果分別為其中,和分別為處理單元PE1,1、PE2,1和PE3,1在第一時(shí)鐘周期內(nèi)的乘法結(jié)果;
將通過數(shù)據(jù)通道傳輸至處理單元PE2,1,與相加得到卷積中間結(jié)果
將得到的卷積中間結(jié)果通過數(shù)據(jù)通道傳輸?shù)教幚韱卧狿E3,1,與相加得到卷積中間結(jié)果并將卷積中間結(jié)果傳輸給輸出控制模塊330用于緩存;
第一列處理單元PEi,1(其中,i的分別取值1,2,3)中的卷積數(shù)據(jù)和卷積參數(shù)在第一時(shí)鐘周期參與卷積運(yùn)算后,分別沿著不同的數(shù)據(jù)通道傳輸?shù)狡渌奶幚韱卧?。第一列處理單元PEi,1(其中,i的分別取值1,2,3)中的卷積參數(shù)分別通過數(shù)據(jù)通道傳輸?shù)降诙刑幚韱卧狿Ei,2(其中,i的分別取值1,2,3)的對(duì)應(yīng)位置,即PE1,1中的卷積參數(shù)k11傳輸至PE1,2,PE2,1中的卷積參數(shù)k21傳輸至PE2,2,PE3,1中的卷積參數(shù)k31傳輸至PE3,2分別作為PE1,2、PE2,2和PE3,2在下一時(shí)鐘周期內(nèi)進(jìn)行卷積運(yùn)算的乘數(shù)。同時(shí)將第一列處理單元PEi,1(其中,i的分別取值1,2,3)中的卷積數(shù)據(jù)分別通過不同的數(shù)據(jù)通道傳輸?shù)降诙刑幚韱卧膶?duì)應(yīng)位置,即PE2,1中的卷積數(shù)據(jù)13傳輸至PE1,2,PE3,1中的卷積數(shù)據(jù)26傳輸至PE2,2,數(shù)據(jù)緩存模塊通過數(shù)據(jù)通道向PE3,2傳輸卷積數(shù)據(jù)39,分別作為PE1,2、PE2,2和PE3,2在下一時(shí)鐘周期進(jìn)行卷積運(yùn)算的另一個(gè)乘數(shù);
應(yīng)理解,處理單元PE1,1的卷積數(shù)據(jù)0被傳輸至第一乘法累加窗口以外,不再參與后續(xù)卷積運(yùn)算。
圖5為本發(fā)明實(shí)施例的的卷積運(yùn)算芯片在第二時(shí)鐘周期的運(yùn)算過程原理圖。如圖5所示,在第二時(shí)鐘周期,在第一列處理單元PEi,1(其中,i的分別取值1,2,3)中將數(shù)據(jù)緩存模塊310輸入的卷積數(shù)據(jù)和卷積參數(shù)按照上述方法進(jìn)行乘法運(yùn)算,得到乘法結(jié)果和分別為1*k12、14*k22和27*k32;
將輸出控制模塊330中緩存的卷積中間結(jié)果在此時(shí)鐘周期內(nèi)被傳輸?shù)教幚韱卧狿E1,1中,與相加得到卷積中間結(jié)果
同理,將第一列卷積中間結(jié)果傳輸至PE2,1,與相加,可以得到卷積中間結(jié)果將卷積中間結(jié)果傳輸至PE3,1,與相加,可以得到卷積中間結(jié)果將卷積中間結(jié)果傳輸至輸出控制模塊用于緩存;
同時(shí),第二列處理單元PEi,2(其中,i的分別取值1,2,3)在第二時(shí)鐘周期開始進(jìn)行卷積運(yùn)算,過程與第一列處理單元的運(yùn)算過程類似,在此不作詳述,在此時(shí)鐘周期內(nèi)第二列處理單元PEi,2(其中,i的分別取值1,2,3)輸出卷積中間結(jié)果傳輸至輸出控制模塊330用于緩存;
第二列處理單元PEi,2(其中,i的分別取值1,2,3)中的卷積數(shù)據(jù)和卷積參數(shù)在參與卷積運(yùn)算后,分別沿著不同的數(shù)據(jù)通道傳輸?shù)狡渌奶幚韱卧?。第二列處理單元PEi,2(其中,i的分別取值1,2,3)中的卷積參數(shù)分別通過數(shù)據(jù)通道傳輸?shù)降谌刑幚韱卧狿Ei,3(其中,i的分別取值1,2,3)的對(duì)應(yīng)位置,即PE1,2中的卷積參數(shù)k11傳輸至PE1,3,PE2,2中的卷積參數(shù)k21傳輸至PE2,3,PE3,2中的卷積參數(shù)k31傳輸至PE3,3分別作為PE1,3、PE2,3和PE3,3在下一時(shí)鐘周期內(nèi)進(jìn)行卷積運(yùn)算的乘數(shù)。同時(shí)將第二列處理單元PEi,2(其中,i的分別取值1,2,3)中的卷積數(shù)據(jù)分別通過不同的數(shù)據(jù)通道傳輸?shù)降谌刑幚韱卧膶?duì)應(yīng)位置,即PE2,2中的卷積數(shù)據(jù)26傳輸至PE1,3,PE3,2中的卷積數(shù)據(jù)39傳輸至PE2,3,數(shù)據(jù)緩存模塊310通過數(shù)據(jù)通道向PE3,3傳輸卷積數(shù)據(jù)52,分別作為PE1,3、PE2,3和PE3,3在下一時(shí)鐘周期進(jìn)行卷積運(yùn)算的另一個(gè)乘數(shù)。
應(yīng)理解,處理單元PE1,2的卷積數(shù)據(jù)13被傳輸至第一乘法累加窗口以外,不再參與后續(xù)卷積運(yùn)算。
同時(shí),第一列處理單元PEi,1(其中,i的分別取值1,2,3)中的卷積數(shù)據(jù)和卷積參數(shù)在第二時(shí)鐘周期參與卷積運(yùn)算后,也分別沿著不同的數(shù)據(jù)通道按照前述的類似方式傳輸?shù)降诙械奶幚韱卧?,在此不作詳述?/p>
圖6為本發(fā)明實(shí)施例的卷積運(yùn)算芯片在第三時(shí)鐘周期的運(yùn)算過程原理圖。如圖6所示,在第三時(shí)鐘周期,在第一列處理單元PEi,1(其中,i的分別取值1,2,3)中將數(shù)據(jù)緩存模塊310輸入的卷積數(shù)據(jù)和卷積參數(shù)按照上述方法進(jìn)行乘法運(yùn)算,得到乘法結(jié)果和分別為2*k13、15*k23和28*k33;將輸出控制模塊330中緩存的卷積中間結(jié)果傳輸至處理單元PE1,1中,與相加得到卷積中間結(jié)果將第一列卷積中間結(jié)果傳輸至PE2,1,與相加,可以得到卷積中間結(jié)果將卷積中間結(jié)果傳輸至PE3,1,與相加,可以得到卷積中間結(jié)果
在第三時(shí)鐘周期第一列處理單元經(jīng)過卷積運(yùn)算輸出的卷積中間結(jié)果即為第一卷積結(jié)果,該第一卷積結(jié)果輸出后作為卷積結(jié)果矩陣的第一行第一列的元素。
同理,第二列處理單元PEi,2(其中,i的分別取值1,2,3)在第三時(shí)鐘周期接收從第一列處理單元PEi,1(其中,i的分別取值1,2,3)傳輸?shù)木矸e參數(shù)為k12,k22和k32,第二列處理單元PEi,2(i=1,2)在第三時(shí)鐘周期接收從第一列處理單元PEi,1(i=2,3)傳輸?shù)木矸e數(shù)據(jù)14和27,第二列處理單元PE3,2從數(shù)據(jù)緩存模塊接收卷積數(shù)據(jù)40,經(jīng)過類似運(yùn)算過程得到卷積中間結(jié)果第三列處理單元PEi,3(i=1,2,3)在第三時(shí)鐘周期開始進(jìn)行卷積運(yùn)算,第三列處理單元PEi,3(其中,i的分別取值1,2,3)在第三時(shí)鐘周期接收從第二列處理單元PEi,2(其中,i的分別取值1,2,3)傳輸?shù)木矸e數(shù)據(jù)k11,k21和k31,第三列處理單元PEi,3(i=1,2)在第三時(shí)鐘周期接收從第二列處理單元PEi,2(i=2,3)傳輸?shù)木矸e數(shù)據(jù)26和39,第三列處理單元PE3,3從數(shù)據(jù)緩存模塊310接收卷積數(shù)據(jù)52,經(jīng)過類似運(yùn)算過程輸出的卷積中間結(jié)果為
類似地,在第四時(shí)鐘周期,第一列處理單元從數(shù)據(jù)緩存模塊310接收的卷積參數(shù)從PE1,1到PE3,1分別為k11,k21和k31,接收的卷積數(shù)據(jù)從PE1,1到PE3,1分別為1,14和27,進(jìn)行卷積運(yùn)算后輸出卷積中間結(jié)果
第二列處理單元PEi,2(i=1,2)接收從第一列處理單元PEi,1(i=2,3)傳輸?shù)木矸e數(shù)據(jù)15和28,第二列處理單元PE3,2從數(shù)據(jù)緩存模塊310傳輸?shù)木矸e數(shù)據(jù)41,第二列處理單元PEi,2(其中,i的分別取值1,2,3)接收從第一列處理單元PEi,1(i=1,2,3)傳輸?shù)木矸e參數(shù)為k13,k23和k33,經(jīng)過類似的卷積運(yùn)算過程后輸出卷積中間結(jié)果
在第四時(shí)鐘周期第二列處理單元經(jīng)過卷積運(yùn)算輸出的卷積中間結(jié)果即為第二卷積結(jié)果,該第二卷積結(jié)果輸出后作為卷積結(jié)果矩陣的第二行第一列的元素。
第三列處理單元PEi,3(其中,i的分別取值1,2,3)在第三時(shí)鐘周期接收從第二列處理單元PEi,2(其中,i的分別取值1,2,3)傳輸?shù)木矸e參數(shù)為k12,k22和k32,第三列處理單元PEi,2(i=1,2)在第四時(shí)鐘周期接收從第二列處理單元PEi,1(i=2,3)傳輸?shù)木矸e數(shù)據(jù)27和40,第三列處理單元PE3,3從數(shù)據(jù)緩存模塊310接收卷積數(shù)據(jù)53,經(jīng)過類似運(yùn)算過程得到卷積中間結(jié)果
類似地,在第五時(shí)鐘周期,第一列處理單元從數(shù)據(jù)緩存模塊310接收的卷積參數(shù)從PE1,1到PE3,1分別為k12,k22和k32,接收的卷積數(shù)據(jù)從PE1,1到PE3,1分別為2,15和28,進(jìn)行卷積運(yùn)算后輸出卷積中間結(jié)果
第二列處理單元PEi,2(i=1,2)接收從第一列處理單元PEi,1(i=2,3)傳輸?shù)木矸e數(shù)據(jù)14和27,第二列處理單元PE3,2從數(shù)據(jù)緩存模塊310傳輸?shù)木矸e數(shù)據(jù)40,第二列處理單元PEi,2(其中,i的分別取值1,2,3)接收從第一列處理單元PEi,1(其中,i的分別取值1,2,3)傳輸?shù)木矸e參數(shù)為k11,k21和k31,經(jīng)過類似的卷積運(yùn)算過程后輸出卷積中間結(jié)果
第三列處理單元PEi,3(其中,i的分別取值1,2,3)在第五時(shí)鐘周期接收從第二列處理單元PEi,2(i=1,2,3)傳輸?shù)木矸e參數(shù)為k13,k23和k33,第三列處理單元PEi,2(i=1,2)在第五時(shí)鐘周期接收從第二列處理單元PEi,1(i=2,3)傳輸?shù)木矸e數(shù)據(jù)28和41,第三列處理單元PE3,3從數(shù)據(jù)緩存模塊310接收卷積數(shù)據(jù)54,經(jīng)過類似運(yùn)算過程得到卷積中間結(jié)果
在第五時(shí)鐘周期第三列處理單元經(jīng)過卷積運(yùn)算輸出的卷積中間結(jié)果即為第三卷積結(jié)果,該第三卷積結(jié)果輸出后作為卷積結(jié)果矩陣的第三行第一列的元素。
因此,第一列處理單元在第一至第三時(shí)鐘周期內(nèi)經(jīng)過卷積運(yùn)算輸出第一卷積結(jié)果,作為卷積結(jié)果矩陣第一行第一列的元素;第二列處理單元在第二至第四時(shí)鐘周期內(nèi)經(jīng)過卷積運(yùn)算輸出第二卷積結(jié)果,作為卷積結(jié)果矩陣第二行第一列的元素;第三列處理單元在第三至第五時(shí)鐘周期內(nèi)經(jīng)過卷積運(yùn)算輸出第三卷積結(jié)果,作為卷積結(jié)果矩陣第三行第一列的元素。
本發(fā)明實(shí)施例的卷積運(yùn)算芯片中通過對(duì)任意一個(gè)處理單元增加一條數(shù)據(jù)傳輸通道,使得相鄰處理單元之間能夠直接傳輸卷積數(shù)據(jù)和卷積參數(shù),同時(shí),這些數(shù)據(jù)在傳輸過程中都處于第一乘法累加窗口中,沒有經(jīng)過RAM,可以減少RAM的訪問次數(shù),降低功耗。
應(yīng)理解,卷積結(jié)果還可以通過其它的方式得到。例如,在第一列處理單元中,在第一時(shí)鐘周期分別通過乘法運(yùn)算得到和將上述乘法結(jié)果傳輸?shù)捷敵隹刂颇K當(dāng)中用于緩存;在第二時(shí)鐘周期分別通過乘法運(yùn)算得到和將上述乘法結(jié)果傳輸?shù)捷敵隹刂颇K當(dāng)中用于緩存;在第三時(shí)鐘周期分別通過乘法運(yùn)算得到和設(shè)置在第三時(shí)鐘周期在處理單元PE3,1內(nèi)進(jìn)行加法運(yùn)算,將作為卷積結(jié)果輸出;再例如,在第一列處理單元中,在第一時(shí)鐘周期分別通過乘法運(yùn)算得到和將上述乘法結(jié)果傳輸?shù)捷敵隹刂颇K當(dāng)中用于緩存;在第二時(shí)鐘周期分別通過乘法運(yùn)算得到和將輸出控制模塊中緩存的和分別傳輸?shù)絇E1,1、PE2,1和PE3,1中,與和分別進(jìn)行加法運(yùn)算,在PE1,1內(nèi)得到卷積中間結(jié)果在PE2,1得到卷積中間結(jié)果在PE3,1內(nèi)得到卷積中間結(jié)果分別將上述卷積中間結(jié)果傳輸?shù)捷敵隹刂颇K當(dāng)中用于緩存;在第三時(shí)鐘周期分別通過乘法運(yùn)算得到和將輸出控制模塊中緩存的卷積中間結(jié)果分別傳輸?shù)絇E1,1、PE2,1和PE3,1中,與和分別相加,在PE1,1內(nèi)得到卷積中間結(jié)果在PE2,1得到卷積中間結(jié)果在PE3,1內(nèi)得到卷積中間結(jié)果將第三時(shí)鐘周期得到的卷積中間結(jié)果設(shè)置在PE3,1內(nèi)進(jìn)行加法運(yùn)算,將最終加法結(jié)果作為卷積結(jié)果輸出。
應(yīng)理解,在第一乘法累加窗口中的任意兩個(gè)處理單元之間的數(shù)據(jù)通道上可以設(shè)置寄存器。寄存器可以分為第一寄存器,第二寄存器和第三寄存器。第一寄存器設(shè)置于處理單元PEX,Y+1與處理單元PEX,Y之間,用于處理單元PEX,Y的卷積參數(shù)的寄存與傳輸;第二寄存器設(shè)置于處理單元PEX,Y+1與處理單元PEX+1,Y之間,用于處理單元PEX+1,Y的卷積數(shù)據(jù)的寄存與傳輸;第三寄存器設(shè)置于處理單元PEX,Y+1與處理單元PEX+1,Y+1之間,用于卷積中間結(jié)果的寄存與傳輸,其中,X為大于或等于2且小于或等于A的整數(shù),Y為大于或等于1且小于或等于C-1的整數(shù)。
具體地,處理單元PEX+1,Y中的卷積參數(shù)和卷積數(shù)據(jù)在一個(gè)時(shí)鐘周期內(nèi)進(jìn)行卷積運(yùn)算后,該處理單元PEX+1,Y(最后一列處理單元除外)的卷積參數(shù)通過數(shù)據(jù)通道傳輸?shù)降谝患拇嫫髦屑拇妫糜趨⑴c下一個(gè)時(shí)鐘周期處理單元PEX+1,Y+1的卷積運(yùn)算;處理單元PEX+1,Y(第一行或最后一列處理單元除外)的卷積數(shù)據(jù)通過數(shù)據(jù)通道傳輸?shù)降诙拇嫫髦屑拇妫糜趨⑴c下一個(gè)時(shí)鐘周期處理單元PEX,Y+1的卷積運(yùn)算。同理,處理單元PEX,Y中的卷積參數(shù)和卷積數(shù)據(jù)在一個(gè)時(shí)鐘周期內(nèi)進(jìn)行卷積運(yùn)算后,該處理單元PEX,Y(最后一列處理單元除外)的卷積參數(shù)通過數(shù)據(jù)通道傳輸?shù)降谝患拇嫫髦屑拇妫糜趨⑴c下一個(gè)時(shí)鐘周期處理單元PEX,Y+1的卷積運(yùn)算;處理單元PEX,Y(第一行或最后一列處理單元除外)的卷積數(shù)據(jù)通過數(shù)據(jù)通道傳輸?shù)降诙拇嫫髦屑拇?,用于參與下一個(gè)時(shí)鐘周期處理單元PEX-1,Y+1的卷積運(yùn)算。在處理單元PEX,Y進(jìn)行乘法運(yùn)算完成后,將乘法結(jié)果或卷積中間結(jié)果寄存在處理單元PEX,Y與處理單元PEX+1,Y之間的第三寄存器中,使得在處理單元PEX,Y中得到的乘法結(jié)果或卷積中間結(jié)果與處理單元PEX+1,Y的乘法結(jié)果能夠節(jié)拍對(duì)齊。
也就是說,處理單元PEX,Y+1與處理單元PEX,Y之間的第一寄存器用于寄存處理單元PEX,Y傳輸過來的卷積參數(shù),處理單元PEX,Y+1與處理單元PEX+1,Y之間的第二寄存器用于寄存處理單元PEX+1,Y傳輸過來的卷積數(shù)據(jù),第一寄存器和第二寄存器還用于在處理單元PEX,Y+1進(jìn)行乘法運(yùn)算時(shí)使處理單元PEX,Y傳輸過來的卷積參數(shù)和處理單元PEX+1,Y傳輸過來的卷積數(shù)據(jù)節(jié)拍對(duì)齊,確保在下一個(gè)時(shí)鐘周期內(nèi)二者能夠進(jìn)行卷積運(yùn)算。
因此,通過在處理單元之間的數(shù)據(jù)通道上設(shè)置寄存器,使得對(duì)于任意一個(gè)處理單元,在進(jìn)行卷積運(yùn)算時(shí)卷積數(shù)據(jù)和卷積參數(shù)能夠節(jié)拍對(duì)齊,確保了卷積運(yùn)算的順利進(jìn)行;同時(shí),由于除第一列處理單元外的處理單元的卷積數(shù)據(jù)和卷積參數(shù)都是通過相鄰處理單元之間的數(shù)據(jù)通道上傳輸,不需要占用外部總線來傳輸,所以能夠降低外部傳輸?shù)膸挕?/p>
應(yīng)理解,在M行N列的乘法累加器陣列中,除了包括第一乘法累加窗口外,還可以同時(shí)包括第二乘法累加窗口,且第一乘法累加窗口和第二乘法累加窗口之間沒有共同的處理單元,也就是說在乘法累加器陣列中可以同時(shí)進(jìn)行多組不同的卷積運(yùn)算。
當(dāng)?shù)谝痪矸e數(shù)據(jù)矩陣與第二卷積數(shù)據(jù)矩陣相同,第一卷積參數(shù)矩陣與第二卷積參數(shù)矩陣不同,其中,第二卷積數(shù)據(jù)矩陣為數(shù)據(jù)緩存模塊310向所述第二乘法累加窗口傳輸?shù)木矸e數(shù)據(jù)所屬的卷積數(shù)據(jù)矩陣,第二卷積參數(shù)矩陣為數(shù)據(jù)緩存模塊310向第二乘法累加窗口傳輸?shù)木矸e參數(shù)所屬的卷積參數(shù)矩陣。例如,第二卷積參數(shù)矩陣為:
第一卷積數(shù)據(jù)矩陣為5行13列,第二卷積參數(shù)矩陣的元素個(gè)數(shù)、元素值與第一卷積參數(shù)矩陣的元素個(gè)數(shù)、元素值均不相同。第二卷積參數(shù)矩陣與第二卷積數(shù)據(jù)矩陣在乘法累加器中進(jìn)行卷積運(yùn)算時(shí),確定的第二乘法累加窗口為2行4列,得到的卷積結(jié)果矩陣為4行9列。
當(dāng)?shù)谝痪矸e數(shù)據(jù)矩陣與第二卷積數(shù)據(jù)矩陣不同,第一卷積參數(shù)矩陣與第二卷積參數(shù)矩陣相同時(shí),其中,第二卷積數(shù)據(jù)矩陣為數(shù)據(jù)緩存模塊310向第二乘法累加窗口傳輸?shù)木矸e數(shù)據(jù)所屬的卷積數(shù)據(jù)矩陣,第二卷積參數(shù)矩陣為數(shù)據(jù)緩存模塊310向第二乘法累加窗口傳輸?shù)木矸e參數(shù)所屬的卷積參數(shù)矩陣。例如,第二卷積數(shù)據(jù)矩陣為:
第一卷積參數(shù)矩陣為3行3列,第二卷積數(shù)據(jù)矩陣中的元素個(gè)數(shù)、元素值與第一卷積數(shù)據(jù)矩陣中的元素個(gè)數(shù)、元素值均不相同。第二卷積參數(shù)矩陣與第二卷積數(shù)據(jù)矩陣在乘法累加器中進(jìn)行卷積運(yùn)算時(shí),確定的第二乘法累加窗口為3行4列,得到的卷積結(jié)果矩陣為4行11列。
應(yīng)理解,在M行N列的乘法累加器陣列中可以同時(shí)包括多個(gè)第一乘法累加窗口和多個(gè)第二乘法累加窗口,本發(fā)明在此不作限定。
當(dāng)然,在M行N列的乘法累加器陣列中還可以同時(shí)進(jìn)行卷積數(shù)據(jù)矩陣和卷積參數(shù)矩陣均不相同的卷積運(yùn)算,用于卷積運(yùn)算的乘法累加窗口均獨(dú)立于第一乘法累加窗口和第二乘法累加窗口。
因此,通過靈活設(shè)置乘法累加窗口的尺寸,使得在同一乘法累加器陣列中可以同時(shí)進(jìn)行多種不同的卷積運(yùn)算,提升了陣列的利用率。
應(yīng)理解,在實(shí)際產(chǎn)品型SoC中,通常包括4片本發(fā)明實(shí)施例的乘法累加器陣列,每個(gè)乘法累加器陣列為15行14列,其中,4片乘法累加器陣列既可以相互關(guān)聯(lián)也可以相互獨(dú)立。
應(yīng)理解,在本發(fā)明實(shí)施例中,“與A相應(yīng)的B”表示B與A相關(guān)聯(lián),根據(jù)A可以確定B。但還應(yīng)理解,根據(jù)A確定B并不意味著僅僅根據(jù)A確定B,還可以根據(jù)A和/或其它信息確定B。
另外,本文中術(shù)語(yǔ)“系統(tǒng)”和“網(wǎng)絡(luò)”在本文中常被可互換使用。本文中術(shù)語(yǔ)“和/或”,僅僅是一種描述關(guān)聯(lián)對(duì)象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:?jiǎn)为?dú)存在A,同時(shí)存在A和B,單獨(dú)存在B這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對(duì)象是一種“或”的關(guān)系。
本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例中描述的各方法步驟和單元,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各實(shí)施例的步驟及組成。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。本領(lǐng)域普通技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或步驟可以用硬件、處理器執(zhí)行的軟件程序,或者二者的結(jié)合來實(shí)施。軟件程序可以置于隨機(jī)存取存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
盡管通過參考附圖并結(jié)合優(yōu)選實(shí)施例的方式對(duì)本發(fā)明進(jìn)行了詳細(xì)描述,但本發(fā)明并不限于此。在不脫離本發(fā)明的精神和實(shí)質(zhì)的前提下,本領(lǐng)域普通技術(shù)人員可以對(duì)本發(fā)明的實(shí)施例進(jìn)行各種等效的修改或替換,而這些修改或替換都應(yīng)在本發(fā)明的涵蓋范圍內(nèi)。