專利名稱:面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及向量處理器以及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種大矩陣相乘的向量化實現(xiàn)方法。
背景技術(shù):
在許多科學(xué)計算任務(wù)和應(yīng)用中都會涉及到矩陣乘法運算,如圖像處理,通信系統(tǒng)中的信號編解碼等,對于規(guī)模較大的矩陣相乘計算任務(wù),由于涉及到大量的乘法和加法運算,需要占用大量的計算時間。如何在處理器上簡單而高效的實現(xiàn)矩陣乘法運算一直是業(yè)界的研究熱點。在傳統(tǒng)的標(biāo)量處理器上,研究人員已經(jīng)提出了多種有效的矩陣相乘實現(xiàn)方法,以減少數(shù)據(jù)在運算過程中的排序操作對完成整個矩陣相乘的運算的影響。但是,隨著高清視頻編解碼、3G無線通信、雷達(dá)信號處理等高密集、實時運算應(yīng)用的不斷涌現(xiàn),單芯片難以滿足這類應(yīng)用的高密度實時計算需求,向量處理器得到了廣泛應(yīng)用。如圖1所示,為一個向量處理器的典型結(jié)構(gòu),其具有處理器和程序存儲器和數(shù)據(jù)存儲器(兩者均可以為任意的可訪問存儲器,包括外部高速緩沖存儲器、外部RAM等)。向量處理器的處理器分為標(biāo)量處理部件和向量處理部件兩個部分,通常向量處理部件內(nèi)有K個并行處理單元(PE),這些處理單元都有各自的運算部件和寄存器,處理單元間能通過規(guī)約指令進行的數(shù)據(jù)交互,如并行處理單元之間的數(shù)據(jù)相加、比較等。標(biāo)量處理單元主要負(fù)責(zé)流控和邏輯判斷指令的處理,而向量處理單元主要負(fù)責(zé)密集型的數(shù)據(jù)計算。向量處理單元運算所用的數(shù)據(jù)由向量數(shù)據(jù)存儲單元提供。一般地,如圖2所示,向量數(shù)據(jù)存儲單元的BANK(存儲體)的個數(shù)與向量處理單元的處理單元個數(shù)K是一致的。申請?zhí)枮椤?00380107095. 7”的專利文獻,公開了英特爾公司提出的一個專利使用 SIMD寄存器的小矩陣有效乘法,將被乘數(shù)矩陣A的對角線載入處理器的不同寄存器中,并將乘數(shù)矩陣B載入至少一個在縱向按序排列的寄存器中。通過移動一個元素,有選擇地將寄存器中的乘數(shù)矩陣B的每列中的乘法和加法元素同已移動的一列中的上個元素一起移動至該列的前端。將被乘數(shù)矩陣A的對角線乘以乘數(shù)矩陣B的列,它們的結(jié)果被加到結(jié)果矩陣C的列的結(jié)果和上。該方法在矩陣規(guī)模較小的情況下是能獲得比較好的效果,但是隨著矩陣規(guī)模的逐漸增大,難以取得好的性能表現(xiàn)。因此,如何在向量處理器上實現(xiàn)高效的大矩陣乘法運算是當(dāng)前面臨的一個困難。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)存在的問題,本發(fā)明提供一種原理簡單、操作方便、能充分利用向量處理器的多級并行性特點且易于實現(xiàn)的面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法。為解決上述技術(shù)問題,本發(fā)明采用以下技術(shù)方案—種面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法,包括以下步驟
(1)輸入被乘數(shù)矩陣A和乘數(shù)矩陣B ;通過DMA控制器將被乘數(shù)矩陣A和乘數(shù)矩陣B分別搬運到向量存儲單元中;在搬運過程中,將乘數(shù)矩陣B進行重排序,即將乘數(shù)矩陣 B中的第1 η行依次排序為第1 η列;(2)將被乘數(shù)矩陣A —行中的元素和乘數(shù)矩陣B中一列中的元素分別加載到K個并行處理單元中,并一一對應(yīng)相乘;將相乘的結(jié)果在一指定的并行處理單元中歸約求和; 將求和結(jié)果作為一個結(jié)果矩陣元素存儲到向量存儲單元中;(3)順移到被乘數(shù)矩陣A的下一行和乘數(shù)矩陣B的下一列,重復(fù)步驟( 直至完成所有數(shù)據(jù)幀的計算,得到由結(jié)果矩陣元素組成的結(jié)果矩陣C。作為本發(fā)明的進一步改進所述搬運過程中,被乘數(shù)矩陣A的每一行組織成一個數(shù)據(jù)幀,乘數(shù)矩陣B的每一列組織成一個數(shù)據(jù)幀,當(dāng)所述數(shù)據(jù)幀的元素個數(shù)不等于向量處理器中并行處理單元的個數(shù)K 的倍數(shù)時,在數(shù)據(jù)幀尾部補0使得每個數(shù)據(jù)幀的元素個數(shù)等于并行處理單元的個數(shù)K的倍數(shù)。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于本發(fā)明的面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法,通過在DMA控制器搬運數(shù)據(jù)的過程中實現(xiàn)乘數(shù)矩陣B的數(shù)據(jù)重排序,同時還充分利用向量處理器中的向量部件多個并行處理單元能同時進行相同運算操作的特點來進行大量的同類型操作,從而大大的提高了計算矩陣乘法的效率,且步驟簡單,易于實現(xiàn)。
圖1是典型的向量處理器結(jié)構(gòu)示意圖。圖2是圖1的向量處理器中的向量數(shù)據(jù)存儲單元的結(jié)構(gòu)示意圖。圖3是本發(fā)明的總流程示意圖。圖4是本發(fā)明實施例1中用DMA控制器實現(xiàn)乘數(shù)矩陣B元素重排序示意圖。圖5是本發(fā)明實施例2中的被乘數(shù)矩陣A和乘數(shù)矩陣B的元素在圖2所示的向量數(shù)據(jù)存儲單元中的存放形式示意圖;圖5(1)為本發(fā)明實施例2中的被乘數(shù)矩陣A的元素在圖2所示的向量數(shù)據(jù)存儲單元中的存放形式示意圖;圖5( 為本發(fā)明實施例2中的乘數(shù)矩陣B的元素在圖2所示的向量數(shù)據(jù)存儲單元中的存放形式示意圖。圖6為本發(fā)明實施例2的被乘數(shù)矩陣A (16 X 16)和乘數(shù)矩陣B (16 X 16)加載到K 個并行處理單元中的示意圖。圖7是本發(fā)明實施例2的被乘數(shù)矩陣A (16 X 16)和乘數(shù)矩陣B (16 X 16)的矩陣乘法實現(xiàn)步驟示意圖。圖8為本發(fā)明實施例3中的被乘數(shù)矩陣A和乘數(shù)矩陣B的元素在圖2所示的向量數(shù)據(jù)存儲單元中的存放形式示意圖;圖8(1)為本發(fā)明實施例3中的被乘數(shù)矩陣A的元素在圖2所示的向量數(shù)據(jù)存儲單元中的存放形式示意圖;圖8( 為本發(fā)明實施例3中的乘數(shù)矩陣B的元素在圖2所示的向量數(shù)據(jù)存儲單元中的存放形式示意圖。圖9是本發(fā)明實施例3的被乘數(shù)矩陣A (26 X 22)和乘數(shù)矩陣B (22 X 27)加載到K 個并行處理單元中的示意圖。圖10是本發(fā)明實施例3的被乘數(shù)矩陣A 06X22)和乘數(shù)矩陣B (22 X 27)的矩陣乘法實現(xiàn)步驟示意圖。
具體實施例方式以下將結(jié)合說明書附圖和具體實施例對本發(fā)明作進一步詳細(xì)說明。實施例1 如圖3所示,本發(fā)明的面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法,包括以下步驟1、輸入被乘數(shù)矩陣A和乘數(shù)矩陣B ;通過DMA控制器將被乘數(shù)矩陣A和乘數(shù)矩陣 B分別搬運到向量存儲單元中,搬運過程中,如圖4所示,將乘數(shù)矩陣B進行重排序,即將乘數(shù)矩陣B中的第1 η行依次排序為第1 η列。通過DMA控制器的配置,可以將被乘數(shù)矩陣A的每一行組織成一個數(shù)據(jù)幀,乘數(shù)矩陣B的每一列組織成一個數(shù)據(jù)幀,整個乘數(shù)矩陣B共可分成ρ個數(shù)據(jù)幀。當(dāng)數(shù)據(jù)幀的元素個數(shù)不等于向量處理器中并行處理單元的個數(shù)K的倍數(shù)時,在數(shù)據(jù)幀尾部補0使得每個數(shù)據(jù)幀的元素個數(shù)等于并行處理單元的個數(shù)K的倍數(shù)。2、將被乘數(shù)矩陣A的一行數(shù)據(jù)幀和乘數(shù)矩陣B的一列數(shù)據(jù)幀中的元素分別加載到 K個并行處理單元中,并一一對應(yīng)相乘;相乘的結(jié)果在一指定的并行處理單元中歸約求和; 求和結(jié)果作為一個結(jié)果矩陣元素存儲到向量存儲單元中。3、順移到被乘數(shù)矩陣A的下一行和乘數(shù)矩陣B的下一列,重復(fù)步驟2到3直至完成所有數(shù)據(jù)幀的計算,得到由結(jié)果矩陣元素組成的結(jié)果矩陣C。對于m*n的被乘數(shù)矩陣A乘以n*p的乘數(shù)矩陣B的運算,可得到m*p的矩陣C。其
在數(shù)學(xué)公式上可表示為:
權(quán)利要求
1.一種面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法,具特征在于包括以下步驟(1)輸入被乘數(shù)矩陣A和乘數(shù)矩陣B;通過DMA控制器將被乘數(shù)矩陣A和乘數(shù)矩陣B分別搬運到向量存儲單元中;在搬運過程中,將乘數(shù)矩陣B進行重排序,即將乘數(shù)矩陣B中的第1 η行依次排序為第1 η列;(2)將被乘數(shù)矩陣A—行中的元素和乘數(shù)矩陣B中一列中的元素分別加載到K個并行處理單元中,并一一對應(yīng)相乘;將相乘的結(jié)果在一指定的并行處理單元中歸約求和;將求和結(jié)果作為一個結(jié)果矩陣元素存儲到向量存儲單元中;(3)順移到被乘數(shù)矩陣A的下一行和乘數(shù)矩陣B的下一列,重復(fù)步驟( 直至完成所有數(shù)據(jù)幀的計算,得到由結(jié)果矩陣元素組成的結(jié)果矩陣C。
2.根據(jù)權(quán)利要求1所述的面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法,其特征在于,所述搬運過程中,被乘數(shù)矩陣A的每一行組織成一個數(shù)據(jù)幀,乘數(shù)矩陣B的每一列組織成一個數(shù)據(jù)幀,當(dāng)所述數(shù)據(jù)幀的元素個數(shù)不等于向量處理器中并行處理單元的個數(shù)K的倍數(shù)時,在數(shù)據(jù)幀尾部補0使得每個數(shù)據(jù)幀的元素個數(shù)等于并行處理單元的個數(shù)K的倍數(shù)。
全文摘要
本發(fā)明公開了一種面向向量處理器的大矩陣相乘的向量化實現(xiàn)方法,包括以下步驟(1)輸入被乘數(shù)矩陣A和乘數(shù)矩陣B;通過DMA控制器將被乘數(shù)矩陣A和乘數(shù)矩陣B分別搬運到向量存儲單元中;搬運時,將乘數(shù)矩陣B中的第1~n行依次排序為第1~n列;(2)將被乘數(shù)矩陣A的一行和乘數(shù)矩陣B的一列中的元素分別加載到K個并行處理單元中,并一一對應(yīng)相乘;相乘的結(jié)果在一指定的并行處理單元中歸約求和;求和結(jié)果作為一個結(jié)果矩陣元素存儲到向量存儲單元中;(3)順移到被乘數(shù)矩陣A的下一行和乘數(shù)矩陣B的下一列,重復(fù)步驟(2)直至完成所有數(shù)據(jù)幀的計算,得到由結(jié)果矩陣元素組成的結(jié)果矩陣C。本發(fā)明原理簡單且操作方便,能提高計算效率。
文檔編號G06F17/16GK102411558SQ201110338108
公開日2012年4月11日 申請日期2011年10月31日 優(yōu)先權(quán)日2011年10月31日
發(fā)明者劉仲, 劉衡竹, 彭元喜, 曾詠濤, 陳書明, 陳海燕, 陳勝剛, 陳躍躍, 龔國輝 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)