亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于數據通信處理器的矩陣計算裝置和方法

文檔序號:6340066閱讀:207來源:國知局
專利名稱:用于數據通信處理器的矩陣計算裝置和方法
技術領域
本發(fā)明涉及微處理器體系結構技術領域,尤其涉及一種用于數據通信處理器的矩陣計算裝置和方法。
背景技術
目前廣泛應用于數據通訊領域的各種各樣的微處理器中,大都要求具有較強的數據處理或數據運算能力,在這些數據處理或數據運算中,一個相當多的要求就是具有相當高效的矩陣運算能力。矩陣運算最終會分解為矩陣元素的乘法加法運算,乘法加法運算通常由乘法加法單元(MAC,簡稱乘加)來實現。因此在矩陣運算方面,乘加運算的效率對矩陣運算能力起到關鍵的決定作用。大多現代處理器在做矩陣運算中都依賴于向量指令的執(zhí)行,對矩陣運算本身沒有進行很好的處理和優(yōu)化,只是單單地依次用一個矩陣的行元素乘以另一個矩陣相應的列元素,再對乘積求和等方式進行的。對于常見的矩陣向量乘法運算,只能獲得很少的峰值運算效率,而在多處理器系統中,單個處理器的運算效率更低。由于處理器的存儲運算帶寬受到很大的限制,因此很難獲得高的數據吞吐量。因此,單純依賴于提高單個運算單元MAC的運算速度已經很難獲得很大的矩陣乘法性能的提高。

發(fā)明內容
本發(fā)明公開了一種計算效率高的用于數據通信處理器的矩陣計算裝置和方法。為了解決上述問題,本發(fā)明用于數據通信處理器的矩陣計算裝置的技術方案包括
矩陣預處理單元,將兩個要進行相乘的矩陣中的一個矩陣A表示為{非零元素值,行地址,列地址};
矩陣運算指令形成單元,根據經所述矩陣預處理單元處理過的矩陣A和另一個矩陣B, 形成矩陣運算的傳送指令和運算指令;
輸入輸出控制單元,用于緩沖所述傳送指令和所述運算指令以及矩陣計算結果; 至少一個矩陣計算元,用于根據所述輸入輸出控制單元傳送過來的所述傳送指令和所述運算指令進行矩陣相乘并把結果輸出給所述輸入輸出控制單元。所述矩陣計算元包括數據路徑隊列DPATH_CQUE、矩陣A隊列A_MQUE、列向量b隊列B_VQUE、乘法加法單元MAC和結果隊列RES_VQUE,其中
所述數據路徑隊列DPATH_CQUE用于存放從所述輸入輸出控制單元傳送的所述傳送指
令;
所述矩陣A隊列A_MQUE用于存放從所述輸入輸出控制單元傳送的所述運算指令;
所述列向量b隊列B_VQUE,用于存放所述另一個矩陣B的列向量;
所述乘法加法單元MAC,用于把所述矩陣A隊列A_MQUE中的行向量和所述列向量b隊列中的列向量進行乘法加法運算并將結果存入所述結果隊列RES_VQUE。所述數據路徑隊列DPATH_CQUE包括選擇地址域、接收使能域、接收選擇域、右送選擇域和左送選擇域,其中
所述選擇地址域用于選擇要從所述結果隊列RES_VQUE中讀出的內容所在的讀取地
址;
所述接收使能域用于指示是否向所述列向量b隊列B_VQUE中寫入; 所述接收選擇域用于選擇寫入所述列向量b隊列B_VQUE的內容是來自左方的矩陣計算元還是來自右方的矩陣計算元;
所述右送選擇域用于選擇是將來自左方的矩陣計算元的數據還是將所述結果隊列 RES_VQUE中所述讀取地址處的內容送至右方矩陣計算元;
所述左送選擇域用于選擇是將來自右方矩陣計算元的數據還是將所述結果隊列RES_ VQUE中所述讀取地址處的內容送至左方矩陣計算元。在所述矩陣A隊列A_MQUE中存放的所述運算指令包括寫結果域、非零元素值域、 行地址域和列地址域,其中
所述寫結果域用于指示所述乘法加法單元MAC的計算結果是否要寫入所述結果隊列 RES_VQUE。所述輸入輸出控制單元包括DPATH指令FIFO和AB指令FIFO。所述輸入輸出控制單元只要所述DPATH指令FIFO和AB指令FIFO未滿,就繼續(xù)接收新的指令序列直到所述DPATH指令FIFO和AB指令FIFO滿或者指令發(fā)送完畢。優(yōu)選地,矩陣A隊列A_MQUE中加入空指令,其形式為{寫結果標志置位,0,0,0}。優(yōu)選地,所述矩陣預處理單元和所述矩陣運算指令形成單元可以由編譯軟件實現。相應地,本發(fā)明用于數據通信處理器的矩陣計算方法的技術方案包括
矩陣預處理步驟,將兩個要進行相乘的矩陣中的一個矩陣A表示為{非零元素值,行地址,列地址};
矩陣運算指令形成步驟,根據經矩陣預處理的矩陣A和另一個矩陣B,形成矩陣運算的傳送指令和運算指令;
矩陣計算步驟,用于根據所述傳送指令和所述運算指令進行矩陣相乘。所述矩陣計算步驟進一步包括
將所述傳送指令載入數據路徑隊列DPATH_CQUE ;
將所述計算指令中與矩陣A對應的部分載入矩陣A隊列A_MQUE,與矩陣B對應的部分載入列向量b隊列B_VQUE ;
在矩陣A隊列A_MQUE的控制下由乘法加法單元MAC將矩陣A隊列A_MQUE中的非零值與以該非零值的列地址為索引的列向量b隊列B_VQUE的值進行相乘。優(yōu)選地,本發(fā)明用于數據通信處理器的矩陣計算方法還包括在所述矩陣計算元的矩陣A隊列A_MQUE中加入空指令,其形式為{寫結果標志置位,0,0,0}。所述矩陣預處理步驟還包括將矩陣B分解為一個個的列向量。與現有技術相比,本發(fā)明用于數據通信處理器的矩陣計算裝置和方法的有益效果為首先,由于本發(fā)明對矩陣進行了預處理,把值為0的矩陣元素在進行矩陣相乘之前就去掉了,也就是使為0的矩陣元素不參與運算,因此大大提高了矩陣計算效率。其次,本發(fā)明采用矩陣運算指令形成單元,其能夠根據要相乘的矩陣形成該矩陣運算的傳送指令和運算指令,即形成矩陣運算的指令流,由該指令流中的指令去完成相應的矩陣運算動作,這樣極大的提高了矩陣乘法的適應性和靈活性,從而可以適應任何階數的矩陣乘法運算。


參照附圖根據僅作為例子給出的如下描述,將更清楚地理解本發(fā)明,在附圖中 圖IA是一個3X3矩陣的示例;
圖IB是依據本發(fā)明用于數據通信處理器的矩陣計算裝置的將圖IA所示的矩陣進行預處理所得結果的示意圖2是本發(fā)明用于數據通信處理器的矩陣計算裝置的示意圖; 圖3是依據本發(fā)明用于數據通信處理器的矩陣計算裝置的具有三個矩陣計算元的示例示意圖4是依據本發(fā)明用于數據通信處理器的矩陣計算裝置的矩陣計算元的示意圖; 圖5是依據本發(fā)明用于數據通信處理器的矩陣計算裝置的輸入輸出控制單元的示意
圖6是一個列向量b的示例。
具體實施例方式我們知道,大多參與運算的矩陣,其有許多元素都是0元素,如圖IA所示,是一個 3\3矩陣,其六(0,0)、六(0,2)、八(1,1)、A(2,0)和A(2,1)都是0元素。由于0元素乘以任何數都是0,所以就沒有必要再對這些元素進行計算,這樣可以節(jié)省大量的運算時間,尤其對于大型矩陣的計算更是如此。如圖2所示,本發(fā)明用于數據通信處理器的矩陣計算裝置包括
矩陣預處理單元1,將兩個要進行相乘的矩陣中的一個矩陣A表示為{非零元素值,行地址,列地址};
矩陣運算指令形成單元3,根據經所述矩陣預處理單元1處理過的矩陣A和另一個矩陣 B,形成矩陣運算的傳送指令和運算指令;
輸入輸出控制單元4,用于緩沖所述傳送指令和所述運算指令以及矩陣計算結果; 至少一個矩陣計算元2,用于根據所述輸入輸出控制單元傳送過來的所述傳送指令和所述運算指令進行矩陣相乘并把結果輸出給所述輸入輸出控制單元。從上述可知,本發(fā)明用于數據通信處理器的矩陣計算裝置首先由所述矩陣預處理單元1對要進行相乘的兩個矩陣中的一個矩陣進行處理,例如設有兩個矩陣矩陣A和矩陣 B,如果AXB,則對矩陣A進行處理,得到{非零元素值,行地址,列地址},如圖IB所示,由于圖IA所示的矩陣共有4個非零元素,因此經過所述矩陣預處理單元1處理后就得到四行數據的矩陣。矩陣運算指令形成單元3基于經過處理得到的數據以及矩陣B,根據兩個矩陣相乘的原理形成這兩個矩陣相乘的傳送指令和運算指令。該傳送指令和運算指令通過數據輸入輸出控制單元3傳送給矩陣計算元2,由矩陣計算元2進行乘法加法運算最后輸出結果。 換句話說,本發(fā)明只是把矩陣A中那些非零元素與矩陣B的列向量進行了乘法加法操作,對于那些對結果沒有任何影響的零元素在相乘之前就去掉了,因此本發(fā)明用于數據通信處理器的矩陣計算裝置大大提高了矩陣計算的效率。此外,所述矩陣計算元2包括數據路徑隊列DPATH_CQUE、矩陣A隊列A_MQUE、列向量b隊列B_VQUE、乘法加法單元MAC和結果隊列RES_VQUE,其中
所述數據路徑隊列DPATH_CQUE用于存放從所述輸入輸出控制單元4傳送的所述傳送指令;
所述矩陣A隊列A_MQUE用于存放從所述輸入輸出控制單元4傳送的所述運算指令; 所述列向量b隊列B_VQUE,用于存放所述另一個矩陣B的列向量; 所述乘法加法單元MAC,用于把所述矩陣A隊列A_MQUE中的行向量和所述列向量b隊列中的列向量進行乘法加法運算并將結果存入所述結果隊列RES_VQUE。對于矩陣計算元2的個數,基于這樣的考慮通常在數據通訊的處理器中,數據傳送的位寬并不是無限的,矩陣計算元2越多,需要初始化的矩陣計算元2的個數也相應增多,由于數據傳送帶寬的問題,初始化的時間以及結果傳送的時間也相應增加,因此隨著矩陣計算元2個數的增加,矩陣計算效率會逐漸減小,硬件成本大幅增加。如果采用1個矩陣計算元,那么將無法實現并行操作,即在矩陣計算元2計算過程中,只能等待其計算完成才能進行下一步動作。而采用2個矩陣計算元2,可以改善這一情況在一個矩陣計算元2計算過程中,轉移另一個矩陣計算元2的計算結果,這樣形成了乒乓操作。當然可以加入更多的矩陣計算元2,但是,當矩陣計算元2個數增多,可能會面臨來不及轉移個別矩陣計算元2 計算結果的尷尬。另外,矩陣計算元2個數的增加,伴隨著數據路徑的延長,這在硬件設計中會帶來時序設計上的困難?;谶@些考慮,優(yōu)選為3個。如圖3所示的示例,其中只是給出了輸入輸出控制單元4和矩陣計算元2部分,本例包括三個矩陣計算元2,對于3 X 3矩陣乘法,每個矩陣計算元2可以計算一個3 X 3矩陣與一個3 X 1列向量的乘法,這樣三個矩陣計算元2就可以一次計算出一個3X3矩陣與另一個3X3矩陣的乘法運算,對于其它更高階的矩陣運算比如一個9X9矩陣與另一個9X9矩陣的乘法,可以通過矩陣拆分的方法,將兩個參與相乘的9 X 9矩陣拆分成9個3 X 3矩陣的乘法或者9個9 X 9矩陣與9 X 1列向量的乘法,視拆分算法而定,然后按照拆分算法分別對拆分的矩陣或向量進行計算,拼合,形成最終的9X9矩陣計算結果。如圖4所示,示出了一個矩陣計算元2結構的例子。從該圖4可以看出,一個矩陣計算元2,包括數據路徑隊列DPATH_CQUE、矩陣A隊列A_MQUE、列向量b隊列B_VQUE、乘法加法單元MAC和結果隊列RES_VQUE,其中所述數據路徑隊列DPATH_CQUE包括選擇地址域、接收使能域、接收選擇域、右送選擇域和左送選擇域以及若干選擇器,其中
所述選擇地址域用于選擇要從所述結果隊列RES_VQUE中讀出的內容所在的讀取地
址;
所述接收使能域用于指示是否向所述列向量b隊列B_VQUE中寫入; 所述接收選擇域用于選擇寫入所述列向量b隊列B_VQUE的內容是來自左方的矩陣計算元還是來自右方的矩陣計算元;
所述右送選擇域用于選擇是將來自左方的矩陣計算元的數據還是將所述結果隊列RES_VQUE中所述讀取地址處的內容送至右方矩陣計算元;
所述左送選擇域用于選擇是將來自右方矩陣計算元的數據還是將所述結果隊列RES_ VQUE中所述讀取地址處的內容送至左方矩陣計算元。另外,在所述矩陣A隊列A_MQUE中存放的所述運算指令包括寫結果域、非零元素值域(A(i,j)值)、行地址域和列地址域,其中
所述寫結果域用于指示所述乘法加法單元MAC的計算結果是否要寫入所述結果隊列 RES_VQUE。從該圖4還可以看出,矩陣計算元2還可以包括五個二選一選擇器,一個與門和一個或門。對于所述五個二選一選擇器,其中第一選擇器由數據路徑隊列DPATH_CQUE中傳送指令的左送選擇域控制,用于選擇將從右矩陣計算元的數據或將從本矩陣計算元結果隊列RES_VQUE的數據送出至向左端口,第二選擇器由數據路徑隊列DPATH_CQUE中傳送指令的右送選擇域控制,用于選擇將從左矩陣計算元的數據或將從本矩陣計算元結果隊列RES_ VQUE的數據送出至向右端口,第三選擇器由數據路徑隊列DPATH_CQUE中傳送指令的接收選擇域控制,用于選擇將從右矩陣計算元的數據或將從左矩陣計算元的數據送至本矩陣計算元第三選擇器的一個輸入,第四選擇器由壓入B信號控制,用于選擇將數據B或將從第三選擇器來的數據送至本矩陣計算元結果隊列RES_VQUE,第五選擇器由矩陣A隊列A_MQUE中運算指令的寫結果域控制,用于選擇將常數0或將上一次乘法加法單元MAC的計算結果送至乘法加法單元MAC中。所述與門,用于對數據路徑隊列DPATH_CQUE中傳送指令的右送選擇和左送選擇域中的邏輯值做邏輯與運算,當輸出結果為邏輯真值時寫入信號有效,將本矩陣計算元的計算結果寫入到輸入輸出控制單元的結果存儲器中。所述或門,用于對數據路徑隊列DPATH_CQUE中傳送指令的接收選擇及壓入B信號做邏輯或運算,當輸出結果為邏輯真值時,列向量b隊列B_VQUE的寫入有效,將第四選擇器的輸出結果寫入列向量b隊列B_VQUE。再如圖4所示的一個矩陣計算元2的示例結構,所述矩陣計算元2的工作過程是這樣的,首先由輸入輸出控制單元4將傳送指令存入數據路徑隊列DPATH_CQUE,將運算指令存入矩陣A隊列A_MQUE和列向量b隊列B_VQUE。其中壓入D和數據D來自輸入輸出控制單元4,用于存入傳送指令到數據路徑隊列DPATH_CQUE。當壓入D信號置位時,表示要將數據D即傳送指令寫入數據路徑隊列DPATH_CQUE當前寫指針指向的地址處,然后其寫指針自動增1,指向數據路徑隊列DPATH_CQUE下一個地址處。彈出D信號與矩陣A隊列A_MQUE 相連,由矩陣A隊列A_MQUE中運算指令的寫結果域控制,當寫結果域置位時,彈出D信號有效,同時數據路徑隊列DPATH_CQUE中當前讀指針處的指令有效。當彈出D信號有效時,表示執(zhí)行數據路徑隊列DPATH_CQUE中當前讀指針處的指令,然后讀指針自動增1,指向數據路徑隊列DPATH_CQUE中下一個地址處指令。壓入A和數據A來自輸入輸出控制單元4,用于存入運算指令到矩陣A隊列A_MQUE,當壓入A信號置位時,表示要將數據A即運算指令寫入矩陣A隊列A_MQUE中當前寫指針指向的地址處,然后寫指針自動增1。彈出A與列向量 b隊列B_VQUE相連,當置位時,表示讀出矩陣A隊列A_MQUE中當前讀指針處的指令,然后讀指針自動增1,指向矩陣A隊列A_MQUE中下一個地址處,通常,只要列向量b隊列B_VQUE非空,彈出A即有效。壓入B及數據B來自輸入輸出控制單元4,其中壓入B連到第四選擇器控制端,并與或門的一個輸入相連。當壓入B信號置位時,由第四選擇器選擇數據B,由或門輸出列向量b隊列B_VQUE的寫入信號,將列向量b寫入到列向量b隊列B_VQUE中。當數據路徑隊列DPATH_CQUE,矩陣A隊列A_MQUE,列向量b隊列B_VQUE配置完成,這個由請求A,請求D指示,當這些信號無效時,表示數據路徑隊列DPATH_CQUE和矩陣A隊列A_MQUE中已經裝好了待執(zhí)行的指令,然后由輸入輸出控制單元4通過使能信號通知矩陣計算元2開始矩陣計算指令的執(zhí)行。對于執(zhí)行的運算指令,當寫結果域置位時,表示此次乘法加法單元MAC 的計算結果要寫入結果隊列RES_VQUE中,則將乘法加法單元MAC的計算結果存入結果隊列 RES_VQUE中運算指令行地址域指向的地址處,同時寫結果域控制第五選擇器選擇常數0作為乘法加法單元MAC的輸入對乘法加法單元MAC清零,為新一輪乘法加法單元MAC的計算做準備。此時,數據路徑隊列DPATH_CQUE中當前讀指針處的指令由于運算指令寫結果域的置位而生效,指示本次計算結果是要傳到向左方的矩陣計算元還是向右的矩陣計算元,這個由傳送指令的選擇地址域和右送選擇域以及左送選擇域共同決定。當右送選擇域置位而左送選擇域清零時,表示本次要將結果隊列RES_VQUE中選擇地址指向的數據傳送到向右的矩陣計算元,傳送到向右由第二選擇器完成,由于右送選擇域控制第二選擇器,右送選擇域置位指示第二選擇器選擇結果隊列RES_VQUE中的數據并送出向右端口。當右送選擇域清零而左送選擇域置位時,表示本次要將結果隊列RES_VQUE中選擇地址指向的數據傳送到向左的矩陣計算元,傳送到向左由第一選擇器完成,由于左送選擇域控制第一選擇器,左送選擇域置位指示第一選擇器選擇結果隊列RES_VQUE中的數據并送出向左端口。另外,本矩陣計算元此時也可以接收從左方的矩陣計算元的計算結果,也可以接收從右方的矩陣計算元的計算結果,這個由傳送指令的接收選擇域和接收使能域共同決定。接收選擇域控制第三選擇器,當接收選擇域置位時,表示選擇右方矩陣計算元數據作為接收數據,當接收選擇域清零時,表示選擇左方矩陣元數據作為接收數據。由第三選擇器選擇的來自左方矩陣元數據或來自右方矩陣元數據送至第四選擇器的一個輸入,由壓入B信號控制第四選擇器控制是否將此輸入輸出。接收使能域通過或門與壓入B信號做或運算,然后直接控制列向量b隊列B_VQUE的寫入,當其置位表示將第四選擇器選擇的輸出數據寫入列向量b隊列B_ VQUE中當前寫地址處,然后寫地址自動增1。如果本次計算結果需要寫入輸入輸出控制單元4的結果存儲器中,則由矩陣A隊列A_MQUE中的運算指令的行地址域和列地址域指示當矩陣計算結果要寫入輸入輸出控制單元4的結果存儲器中的位置,由數據路徑隊列DPATH_ CQUE中的左送選擇域,右送選擇域連接至與門做邏輯與運算,共同置位使能輸入輸出控制單元4的結果存儲器的寫入。最后,當數據路徑隊列DPATH_CQUE中的指令全部執(zhí)行完畢后, 通過完成信號通知輸入輸出控制單元4本矩陣計算元計算完成。在整個計算過程中,一旦矩陣A隊列A_MQUE中指令個數少于某一閾值,即通過請求A信號向輸入輸出控制單元4的 AB指令FIFO發(fā)出請求,然后由輸入輸出控制單元4的AB指令FIFO向矩陣A隊列A_MQUE 中填入新的指令。同樣,對于數據路徑隊列DPATH_CQUE,一旦數據路徑隊列DPATH_CQUE中指令個數少于某一閾值,即通過請求D信號向輸入輸出控制單元4的DPATH指令FIFO發(fā)出請求,然后由輸入輸出控制單元4的DPATH指令FIFO向數據路徑隊列DPATH_CQUE填入新的指令。 對于具有三個矩陣計算元2來說,由矩陣計算元2的矩陣A隊列A_MQUE的A (i, j) 值域表示要計算的A矩陣元素,該元素的行地址和列地址也同時編碼在矩陣計算元2的矩陣A隊列A_MQUE中,其中行地址也作為計算結果的目標地址,而列地址用于尋址矩陣計算中的B向量b(j)。當做完矩陣A—行向量與B列向量的乘加結果(即:EA(i,j) Xb(J)所得結果即為矩陣A的行向量A(i)與B(j)列向量乘積AB(i,j))后,矩陣計算元2的矩陣A 隊列A_MQUE的行地址域指示送入結果隊列RES_VQUE中。同時,其他矩陣計算元2計算矩陣A與其它列向量的運算。運算結果各自存儲在他們的結果隊列RES_VQUE中。在每個矩陣計算元2計算結束后,由矩陣計算元2的數據路徑隊列DPATH_CQUE指示該矩陣計算元2的結果隊列RES_VQUE中的值是否要傳送至輸入輸出控制單元4。這時,只要矩陣計算元2的矩陣A隊列A_MQUE未空,矩陣計算元2就繼續(xù)進行新指令的執(zhí)行,直到矩陣A隊列A_MQUE 空為止,表示該矩陣計算元2計算結束,當所有三個矩陣計算元2全部計算完畢后,所有矩陣計算即完成。如圖5所示,示出了輸入輸出控制單元4的示意圖。從該圖5中可以看出所述輸入輸出控制單元4包括DPATH指令FIFO、AB指令FIFO和結果存儲器,其中,DPATH指令FIFO 和AB指令FIFO分別用于緩沖矩陣運算指令形成單元3所形成的傳送指令和運算指令;結果存儲器用于存放矩陣相乘的最后結果。所述輸入輸出控制單元3只要所述DPATH指令FIFO和AB指令FIFO未滿,就繼續(xù)接收新的指令序列直到所述DPATH指令FIFO和AB指令FIFO滿或者指令發(fā)送完畢。所述矩陣運算指令形成單元3及矩陣預處理單元1均可以由編譯軟件實現,也就是將需要計算的矩陣按照矩陣計算元的指令格式寫成矩陣計算元可以識別的指令。將矩陣相乘動作分解為矩陣A隊列A_MQUE中的運算指令和數據路徑DPATH_CQUE中的運算指令動作,形成可以被矩陣計算單元執(zhí)行的指令流。形成的指令流是作為DSP核的數據,DSP對這些數據不做解釋。當執(zhí)行時,由DSP核將這些數據載入矩陣計算元2中,由矩陣計算元2解釋執(zhí)行。假設矩陣mXm:
All A12 A13 …Aim A21 A22 A23 …A2m A31 A32 A33 …A3m
Ami Am2 Am3 …Amm
該矩陣以文本格式輸入到矩陣預處理單元1中,矩陣行列按照矩陣的格式輸入,矩陣元素之間以空格分隔,Amm表示第m行第m列矩陣元素。假設A,B矩陣需要做乘積運算,那么分別將A,B按照矩陣預處理單元1要求的輸入格式輸入在一文本文件或稱源文件中。對于矩陣預處理單元1,主要處理過程如下
首先,其讀入包含AB矩陣的源文件,進行第一次掃描,掃描依照先行后列從左至右的順序逐一掃描A矩陣元素,假如掃描到一個矩陣元素為非零值,則構造一個新節(jié)點{結果有效,非零元素,行地址,列地址,上一元素指針,下一元素指針},在該節(jié)點記錄該非零元素值,非零元素值的行地址,非零元素值的列地址,并把該節(jié)點鏈接到上一個節(jié)點中下一元素指針指示的地址。假如掃描到一個矩陣元素為零,那么跳過該矩陣元素,繼續(xù)下一個矩陣元素的掃描。掃描持續(xù)進行直到矩陣A的所有元素掃描完畢。經過第一次掃描,應該形成一條雙向鏈表,鏈表中所有節(jié)點記錄了矩陣A中非零元素的值及行列地址。假設此雙向鏈表為 DLl。接著進行第二次掃描,對第二個矩陣B矩陣進行處理,矩陣預處理單元1依照先列后行從左至右的順序逐一掃描B矩陣的所有元素,將矩陣B拆解為列向量依次放入一個一維數組中。假設此數組為Al。至此,包含AB矩陣的源文件已經完全轉化為矩陣預處理單元 1內部所需要的數據結構。然后,進行第三次掃描,針對Al數組中的每一列向量,該列向量對應B矩陣的一個列向量,重復掃描DLl鏈表,對于每一個掃描的DLl鏈表的節(jié)點node,由該節(jié)點node中記錄的非零元素值Aij的列地址在Al數組中查找與之相乘的列的元素bj,該bj元素對應B 矩陣某一列向量的第j行值,假如對應的bj值為非零元素,則將DLl鏈表中的節(jié)點node記錄的A矩陣的非零元素信息復制到一個新的數組中,該數組記錄的字段為{結果有效,A矩陣的非零元素值,A矩陣的非零元素行地址,A矩陣的非零元素列地址}。否則,假如Al數組中對應的bj值為零元素,那么跳過DLl鏈表中的節(jié)點node,掃描DLl鏈表的下一個節(jié)點 node。這里跳過DLl鏈表的節(jié)點node是由于發(fā)現該節(jié)點node對應的Al數組中的bj值為零元素,代表Ai j,bj兩個矩陣元素在矩陣AB相乘時結果為零,因此沒必要記錄此非零元素值。掃描繼續(xù)直到DLl鏈表所有節(jié)點掃描結束,完成后應該形成一個新的數組,記為Bi。當針對Al數組一列向量的掃描結束,繼續(xù)針對Al數組的下一個列向量進行下一次DLl鏈表的掃描,重復本段所描述的過程,直到Al數組所有列向量相關的數組都形成為止。最后,當所有掃描完成,應該會形成Bi,B2, B3…to共m個數組,該m個數據由與B矩陣每一個列向量做乘積的A矩陣的非零元素值構成。此后DLl鏈表不再使用。在上述m次掃描過程中, 對于每一個掃描的DLl鏈表的節(jié)點node,如果該節(jié)點node中記錄的非零元素值Ai j是其所在行的最后一個非零元素,這可以通過比較該node節(jié)點記錄的非零元素的行地址與下一個節(jié)點中記錄的非零元素的行地址得出,則在將該node節(jié)點信息復制到新數組B中時,將結果有效字段置1,否則,如果該節(jié)點node中記錄的非零元素值Ai j不是其所在行的最后一個非零元素,則在將該node節(jié)點信息復制到新數組B中時,將結果有效字段置0。如果該節(jié)點node是其所在行的最后一個元素,而對應的bj為零元素,則將上一個在新數組B中復制的節(jié)點node的結果有效字段置1。這樣,保證每行都有一個節(jié)點node在新數組中的結果有效字段置1。本次會重復掃描DLl鏈表m次,為敘述方便起見,將該m次重復掃描當做一次掃描。最后,對生成的Bi,B2, B3,…to數組進行分組,分組順序編號,每三個形成一組, 共m/3組,將每組的三個B數組編號寫入一個新的數組C中,數組C的元素由字段{數組Bi 標號i,數組Bj編號j,數組他編號k}構成。不足3的數組編號填入-1。然后矩陣預處理單元1分別掃描數組C元素{數組Bi標號i,數組Bj編號j,數組他編號k}指示的三個數組Bi,Bj,他。每個掃描過程相同,當掃描Bi數組時,依次檢查Bi數組的每個元素Μ , 由{結果有效,A矩陣的非零元素值,A矩陣的非零元素行地址,A矩陣的非零元素列地址} 字段構成,當該元素IAi的結果有效字段置0時,計數器增1,否則,當該元素IAi的結果有效字段置1時,將計數器值記錄在一新數組Di中,然后該計數器值清零,重復上述過程直到 Bi數組的所有元素掃描完畢。當Bi數組掃描完畢后,應該形成一個新數組Di,數組Di的元素個數為Bi數組中結果有效字段置1的元素個數,新數組Di中每個元素值記錄了 Bi數組中結果有效字段置1的元素前面那些結果有效字段置0的元素個數。同樣對Bj,Bk分
11別掃描,掃描過程與Bi相同,這樣,當Bi、Bj和他掃描完畢,應該形成了三個數組Di、Dj和 Dk0當數組C中一組掃描完畢,重復進行下一組掃描,直至數組C中所有組掃描完畢,也即完成了 81,82,83,..&11共111次的掃描,最終形成了 D1,D2,D3,…Dm共m個數組。至此矩陣預處理單元1處理完畢,其是將輸入的包含AB矩陣的源文件轉化為A數組,B數組,C數組, D數組,供矩陣運算指令形成單元3使用。后續(xù)矩陣運算指令形成單元3將使用A,B,C,D 四類數組作為輸入將AB矩陣乘法轉化為可以被矩陣計算單元執(zhí)行的指令流。
對于矩陣運算指令形成單元3,其處理過程如下
首先,讀入數組C的第一個元素cl,本次是為生成矩陣計算元2的數據路徑隊列 DPATH_CQUE的傳送指令。如果該元素不是矩陣C的最后一個元素,那么根據讀出的數組C 的元素cl U,j,k},分別讀出對應的數組Di,Dj, Dk的第一個元素值dil,djl,dkl,該元素值分別記錄了 813」,他數組中第一個結果有效字段置1的元素前面那些結果有效字段置 0的元素個數。實際上Bi數組包含的是矩陣A中與矩陣B第i列向量做乘積時的非零元素信息,同樣,Bj數組包含的是矩陣A中與矩陣B第j列向量做乘積時的非零元素信息,他數組包含的是矩陣A中與矩陣B第k列向量做乘積時的非零元素信息,這里Bi,Bj,他數組的標號被放入C數組元素cl中,表示將Bi,Bj, Bk數組作為一組,在由矩陣計算單元執(zhí)行時, 分別載入三個矩陣計算元,由三個矩陣計算元分別計算Bi數組包含的矩陣A與矩陣B第i 列向量的乘積,Bj數組包含的矩陣A與矩陣B第j列向量的乘積,Bk數組包含的矩陣A與矩陣B第k列向量的乘積。當財,8」,他數組中結果有效字段置1時,表示在由矩陣運算指令形成單元3生成矩陣A隊列A_MQUE中的運算指令時,將該矩陣A隊列A_MQUE中的運算指令的寫結果有效字段置位。這樣,當執(zhí)行此條指令時,會將計算結果寫入結果隊列RES_ VQUE。由此可知,讀出的數組Di,Dj,Dk的元素值雖然記錄了 Bi,Bj,Bk數組中結果有效字段置1的元素前面那些結果有效字段置0的元素個數,實際上的意思表示的是矩陣計算元 2在本次寫結果寫入隊列RES_VQUE前要執(zhí)行的指令條數。這個指令條數將指導矩陣運算指令形成單元3如何生成數據路徑隊列DPATH_CQUE中的傳送指令。矩陣運算指令形成單元3分別讀出對應的數組Di, Dj, Dk的第一個元素值dil, djl, dkl后,比較dil, djl, dkl, 如果dil,djl, dkl三個值均不相等,說明矩陣計算元2計算結果傳回輸入輸出控制單元4 的結果存儲器中時不會出現沖突,那么按照dil,djl, dkl三個值從小到大的順序分別為三個矩陣計算元生成三組指令,dil, djl, dkl三個值從小到大的順序實際表示的是三個矩陣計算元計算結果的完成順序。第一組指令將最小值dil即最早完成的矩陣計算元的計算結果傳回輸入輸出控制單元的結果存儲器中,第二組指令將中間值djl即次早完成的矩陣計算元的計算結果傳回輸入輸出控制單元4的結果存儲器中,第三組指令將最大值dkl即最晚完成的矩陣計算元的計算結果傳回輸入輸出控制單元的結果存儲器中,每組指令對應三條數據路徑隊列DPATH_CQUE的傳送指令,每組內的三條指令分別分布在三個矩陣計算元中,形式為{選擇地址為結果隊列地址,接收不使能,接收選擇不管,左送選擇使能,右送選擇使能},如果相應矩陣計算元要傳送結果,那么將左送選擇使能,右送選擇使能,否則左送選擇不使能,右送選擇不使能。由于每次只能有一個矩陣計算元傳送結果回輸入輸出控制單元4的結果存儲器中,否則會出現沖突,所以每組指令中只有一條指令的左送選擇使能, 右送選擇使能字段是置位的。由于沒有接收,所以每組指令的接收不使能,接收選擇不管。 對于選擇地址字段分別填入本次讀取Di,Dj, Dk時的索引值,對應矩陣計算元的寫入結果地址。假如dil,djl,dkl三個值有相等的情況,說明在矩陣計算單元計算過程中,三個矩陣計算元有同時完成的情況,那么在矩陣運算指令形成單元3形成指令時,會給相等的值加一個加權值,比如假設dil與djl相等但小于dkl,那么就會加一個加權值1給dil形成 di 1,,重新比較di 1,,d j Ldkl0如果dil',djl, dkl三個數都不相等,那么按照dil',djl, dkl三個值從小到大的順序分別為三個矩陣計算元生成三組指令,不然重復上面加權過程, 直到dil,djl,dkl三個數都不相等。重復讀出數組Di,Dj,Dk的其它值,繼續(xù)上述過程,直到數組Di,Dj, Dk全部讀完。在讀出數組Di,Dj, Dk元素的過程中,由于Di,Dj,Dk數組中元素個數未必相同,所以在讀出數組Di,Dj, Dk的過程中,若發(fā)現某一數組已經讀完,則后續(xù)對該數組生成對應的指令時僅生成空傳送指令??諅魉椭噶畹母袷綖閧選擇地址為0,接收不使能,接收選擇不管,左送選擇使能,右送選擇不使能}。當處理完數組C的元素cl U, j,k}對應的第一組指令后,繼續(xù)數組C的下一個元素的處理,重復上述過程,直至數組C的全部元素處理完畢。數組C全部元素處理完畢后,矩陣計算元的數據路徑隊列DPATH_CQUE 的運算指令也生成完畢。下面,再次讀入數組C的第一個元素Cl,本次是為生成矩陣計算元2的矩陣A隊列A_MQUE的運算指令。如果該元素不是矩陣C的最后一個元素,那么根據讀出的數組C的元素cl U,j,k},分別讀出對應的數組Bi,Bj,他的元素值。根據讀出的數組Bi,Bj,Bk的元素值{結果有效,A矩陣的非零元素值,A矩陣的非零元素行地址,A矩陣的非零元素列地址},直接映射為矩陣A隊列A_MQUE的運算指令{寫結果標志,矩陣非零值A (i, j),行地址,列地址}。如果數組Bi,Bj,他中任一個數組提前讀完,那么后續(xù)該數組的讀取直接轉化為一個矩陣A隊列A_MQUE的運算空指令,即{寫結果標志置位,矩陣非零值Aij為0,行地址為0,列地址為0},一直繼續(xù)到所有數組Bi,Bj, ma賣完為止。當數組Bi,Bj,他全部處理完畢,讀入數組C的下一個元素,重復上述處理,直至數組C全部處理完畢。至此,計算矩陣AB的矩陣A隊列A_MQUE的運算指令全部生成。本發(fā)明用于數據通信處理器的矩陣計算裝置(以具有三個矩陣計算元為例)進行矩陣相乘的過程簡述如下
(1)若要進行矩陣AXB,先由矩陣預處理單元1對矩陣A進行預處理,然后在由矩陣運算指令形成單元3得出進行矩陣相乘的傳送指令和運算指令并由外部處理器核將矩陣運算指令寫入輸入輸出控制單元4中的DPATH指令FIFO以及將運算指令寫入A B指令 FIFO。(2)第一矩陣計算元2,、第二矩陣計算元2,,和第三矩陣計算元2,,,分別把自己的指令載入到其相應的指令隊列中,具體操作過程是這樣的由第一矩陣計算元2’、第二矩陣計算元2’,和第三矩陣計算元2’ ’ ’的數據路徑隊列DPATH_CQUE載入矩陣運算的傳送指令,然后等待矩陣運算的開始。由第一矩陣計算元2’、第二矩陣計算元2’ ’和第三矩陣計算元2’ ’ ’的矩陣A隊列A_MQUE載入矩陣計算的運算指令,一旦該運算指令被載入,即可開始該矩陣計算元的計算。(3)開始執(zhí)行各個矩陣計算元(第一矩陣計算元2’、第二矩陣計算元2’,和第三矩陣計算元2’ ’ ’)的矩陣A隊列A_MQUE中的指令,其中,A(i,j)值與列地址域指示的列向量 b隊列中的B向量b(j)作乘法操作,其結果與下一次乘法操作結果作累加,其結果又作為下次累加部分。這部分實際是進行乘法加法操作,當遇到矩陣A隊列A_MQUE中的指令的寫結果域為邏輯值真時,表示一個矩陣乘法運算的結果已經完成,將其寫入該指令指示的結果隊列RES_VQUE的行地址中。(4)當一個矩陣行乘法運算完成,即矩陣A隊列A_MQUE中的指令的寫結果域為邏輯值真時,執(zhí)行數據路徑隊列DPATH_CQUE中的指令,由該指令的選擇地址和右送選擇及左送選擇域給出計算結果要傳送的方向。配合相鄰的矩陣計算元中數據路徑隊列DPATH_CQUE 中的指令,第一矩陣計算元2’、第二矩陣計算元2’ ’和第三矩陣計算元2’ ’ ’這三個矩陣計算元都可以傳送結果到輸入輸出控制單元4的結果存儲器中。這樣,當計算完成后,矩陣計算結果也被數據路徑隊列DPATH_CQUE中的指令傳送到輸入輸出控制單元4中的結果存儲器中。上述(2 )至(4 )所指示的過程重復進行,直到矩陣計算完畢。下面通過對如圖IA所示的矩陣A和如圖6所示的列向量b進行相乘來詳述本發(fā)明用于數據通信處理器的矩陣計算裝置的技術方案。由于矩陣A只與一個列向量b相乘,因此只需要一個矩陣計算元即可。首先由矩陣預處理單元1對矩陣A進行預處理后得到如圖IB所示的矩陣。接著矩陣運算指令形成單元3按照矩陣計算單元的格式將參與運算的矩陣及運算動作分解或轉化為傳送指令和計算指令并由外部處理器核分別加載至輸入輸出控制單元4的DPATH指令FIFO和A B指令FIFO。隨后,這些指令由矩陣計算元2的數據路徑隊列DPATH_CQUE,矩陣A隊列A_MQUE 及列向量b隊列B_VQUE,分別載入自己的緩沖中。載入矩陣A隊列A_MQUE的指令根據要計算的矩陣,其指令形式為{寫結果標志,矩陣非零值A (i, j),行地址,列地址},對于圖IA所示的矩陣,其指令形式為{{1,1,0,1},{0,2,1,0},{1,3,1,2},{1,4,2,2}},當寫結果標志為 1時,表示需要將結果寫入矩陣計算元2的結果隊列RES_VQUE中,其寫入地址為矩陣A隊列 A_MQUE中指令的行地址域所指示的地址。列向量b隊列B_VQUE其內容為參與計算的列向量b,其形式為{1,2,3}(見圖6)。矩陣計算元2中矩陣A隊列A_MQUE的指令首先從{1, 1,0,1}開始,依次執(zhí)行,直到{1,4,2,2}。指令執(zhí)行完畢后,矩陣計算也就計算完畢。在矩陣計算過程中,當矩陣計算元2中矩陣A隊列A_MQUE的指令的寫結果標志域置位時,執(zhí)行矩陣計算元2的數據路徑隊列DPATH_CQUE中的指令,由于矩陣A與列向量b相乘,結果有三個非零數,所以需要三條指令來傳送運算結果,其指令形式為{選擇地址,接收使能,接收選擇,右送選擇,左送選擇},選擇地址表示結果隊列地址,接收使能表示將接收選擇的內容寫入本矩陣計算元2的列向量b隊列B_VQUE中。接收選擇用于選擇來自右方還是左方的矩陣計算元。右送選擇和左送選擇同時置位表示該數據結果要傳送到輸入輸出控制單元 4的結果存儲器中。對于本例,即為{{1,0,1,1,1},{2,0,1,1,1}, {3,0,1,1,1}}用于傳送計算的三個計算結果到輸入輸出控制單元4的結果存儲器中。下面是一個計算圖IA所示的矩陣A的平方的例子。由于本例有三個列向量,安排三個矩陣計算元來計算,即第一矩陣計算元2’計算 3 X 3矩陣A與A的第一列向量3 X 1列向量A (0)的乘積,第二矩陣計算元2’ ’計算3 X 3矩陣A與A的第二列向量3X 1列向量A(I)的乘積,第三矩陣計算元2,,,計算3X 3矩陣A 與A的第三列向量3X1列向量A(2)的乘積。待第一矩陣計算元2’、第二矩陣計算元2’’ 和第三矩陣計算元2’ ’’分別計算完畢后,矩陣A的平方也計算完畢。矩陣預處理與上例相同,在此不再贅述。矩陣計算指令和矩陣傳送指令由外部處理器核加載至輸入輸出控制單元4的DPATH指令FIFO和A B指令FIFO。隨后,這些指令由第一矩陣計算元2’、第二矩陣計算元2’ ’和第三矩陣計算元2’ ’’根據自己的地址由數據路徑隊列DPATH_CQUE、矩陣A隊列A_MQUE及列向量b隊列B_VQUE,分別載入自己的緩沖中。對于第一矩陣計算元2’來說, 載入矩陣A隊列A_MQUE的指令即為矩陣A,形式為{{1,1,0,1}, {{0,2,1,0}, {1,3,1,2}}, {1,4,2,2}},列向量b隊列B_VQUE內容為參與計算的矩陣A的第1列向量,其形式為{0, 2,0}。由于本矩陣計算元列向量b隊列B_VQUE內容即A的第1列向量中僅第二行為非零元素2,按照矩陣乘法規(guī)則,載入矩陣A隊列A_MQUE的指令{0,2,1,0},{1,3,1,2},{1,4,2, 2}的執(zhí)行結果一定是零,所以這些指令是可以根據列向量b隊列B_VQUE中的零元素預先剔除的,這樣剔除后載入矩陣A隊列A_MQUE的指令僅留下{{1,1,0,1}} 一條指令。對于第二矩陣計算元2’’,載入矩陣A隊列A_MQUE的指令即為矩陣A,形式為{{1,1,0,1},{{0,2, 1,0},{1,3,1,2}},{1,4,2,2}},列向量b隊列B_VQUE內容為參與計算的矩陣A的第2列向量,其形式為{1,0,0}。由于本矩陣計算元列向量b隊列B_VQUE內容即A的第2列向量中僅第一行為非零元素1,按照矩陣乘法規(guī)則,載入矩陣A隊列A_MQUE的指令{1,1,0,1}, {1,4,2,2}的執(zhí)行結果一定是零,所以這些指令是可以根據列向量b隊列B_VQUE中的零元素預先剔除的,這樣剔除后載入矩陣A隊列A_MQUE的指令僅留下{{0,2,1,0},{1,3,1,2}} 兩條指令。對于第三矩陣計算元2’ ’ ’,載入矩陣A隊列A_MQUE的指令即為矩陣A,形式為 {{1,1,0,1}, {{0,2,1,0}, {1,3,1,2}}, {1,4,2,2}},列向量 b 隊列 B_VQUE 內容為參與計算的矩陣A的第3列向量,其形式為{0,3,4}。當三個矩陣計算元指令載入完畢,即可開始矩陣計算。矩陣計算過程其實是矩陣計算元中矩陣A隊列A_MQUE的指令流的指令執(zhí)行過程。在矩陣計算過程中,當有計算結果計算完成時,這個由矩陣A隊列A_MQUE的指令中寫結果標志域置位指示,執(zhí)行數據路徑隊列DPATH_CQUE中的指令,用于決定該計算結果傳送至何處。由于第一矩陣計算元2’的矩陣A隊列A_MQUE中僅有一條指令,所以該矩陣計算元的計算即A矩陣與A矩陣第一列向量的乘積計算應該先于其它矩陣計算元完成,這樣就需要將該矩陣計算元的計算結果先傳回輸入輸出控制單元4的結果存儲器,這樣便要求第一矩陣計算元2’的數據路徑隊列DPATH_CQUE中第一條指令為{選擇地址為結果隊列地址 1,接收不使能,接收選擇不管,左送選擇使能,右送選擇使能},用于將第一矩陣計算元2’ 的計算結果寫入到輸入輸出控制單元4的結果存儲器。此時,A矩陣與A矩陣第一列向量的乘積計算完成,結果為一個非零計算值被傳回輸入輸出控制單元4的結果存儲器中,實際應該還有兩個計算結果,但均為零,不需要傳輸。在傳送第一矩陣計算元2’計算結果時,第二矩陣計算元2’,,第三矩陣計算單元2’,,的數據路徑隊列DPATH_CQUE不應該執(zhí)行傳送指令,否則會與第一矩陣計算元2’沖突,因為此時第一矩陣計算元2’正在執(zhí)行傳送指令將其結果傳回輸入輸出控制單元4的結果存儲器,因此為保證沒有沖突出現,第二矩陣計算元 2’ ’,第三矩陣計算元2’ ’ ’的數據路徑隊列DPATH_CQUE的第一條指令均應為{選擇地址不管,接收不使能,接收選擇不管,右送選擇不使能,左送選擇不使能},作用相當于一個空指令,以保證第一矩陣計算元2’使用數據路徑的通暢。當第一矩陣計算元2’通過數據路徑成功傳送結果到輸入輸出控制單元4的結果存儲器中后,第二矩陣計算元2’’也已經計算完畢,這是事先知道的,因為第二矩陣計算元2’’的矩陣A隊列A_MQUE中有兩條指令。所以當第一矩陣計算元2’傳送完后,即可開始傳送第二矩陣計算元2’,的計算結果到輸入輸出單元4的結果存儲器中。第二矩陣計算元2’’的結果傳送需要第一矩陣計算元2’的配合,以保證第二矩陣計算元2’使用數據路徑的通暢所以第一矩陣計算元2’的數據路徑隊列DPATH_CQUE的第二條指令應該為{選擇地址不管,接收不使能,接收選擇從右即第二矩陣計算元2’’,右送選擇不使能,左送選擇不使能},用于為第二矩陣計算元2’’傳送計算結果到輸入輸出控制單元4的結果存儲器提供數據通路。自然的,第二矩陣計算元2’’的數據路徑隊列DPATH_CQUE的第二條指令應該為{選擇地址為結果隊列地址1,接收不使能, 接收選擇不管,左送選擇使能,右送選擇使能},用于將第二矩陣計算元2’的計算結果寫入到輸入輸出控制單元4的結果存儲器。當然,在傳送第二矩陣計算元2’計算結果時,第三矩陣計算單元2’ ’ ’的數據路徑隊列DPATH_CQUE不應該執(zhí)行傳送指令,否則會與第二矩陣計算元2’,沖突,因此第三矩陣計算元2’ ’ ’的數據路徑隊列DPATH_CQUE的第二條指令應為{選擇地址不管,接收不使能,接收選擇不管,右送選擇不使能,左送選擇不使能},作用相當于一個空指令,以保證第二矩陣計算元2’’使用數據路徑的通暢。此時,A矩陣與A矩陣第二列向量的乘積計算完成,結果為一個非零計算值被傳回輸入輸出控制單元4的結果存儲器中,實際應該還有兩個計算結果,但均為零,不需要傳輸。最后,第三矩陣計算元2’,, 由于矩陣A隊列A_MQUE中指令最多,所以最后計算完成,計算完成后其計算結果同樣需要傳送回輸入輸出控制單元4的結果存儲器中,由于第三矩陣計算元2’ ’ ’位于矩陣計算單元 2的最左邊,其傳送結果的數據路徑需經過第一矩陣計算元2’,第二矩陣計算元2’ ’,因此需要第一矩陣計算元2’,第二矩陣計算元2’’數據路徑的配合。這樣,第一矩陣計算元2’ 的數據路徑隊列DPATH_CQUE的第三條指令為{選擇地址不管,接收不使能,接收選擇從右即第二矩陣計算元2’ ’,右送選擇不使能,左送選擇不使能},用于為第三矩陣計算元2’ ’ ’ 傳送計算結果到輸入輸出控制單元4的結果存儲器提供數據通路。類似的,第二矩陣計算元2’ ’的數據路徑隊列DPATH_CQUE的第三條指令也為{選擇地址不管,接收不使能,接收選擇從右即第三矩陣計算元2’,’,右送選擇不使能,左送選擇不使能},用于為第三矩陣計算元2’ ’’傳送計算結果到輸入輸出控制單元4的結果存儲器提供數據通路。這樣,通過第一矩陣計算元2’,第二矩陣計算元2’’的數據路徑的配合,為第三矩陣計算元2’’’傳送計算結果到輸入輸出控制單元4的結果存儲器提過了通暢的傳送通道。當然,第三矩陣計算元 2’ ’ ’為送出計算結果,需要數據路徑隊列DPATH_CQUE的第三條指令為{選擇地址為結果隊列地址1,接收不使能,接收選擇不管,左送選擇使能,右送選擇使能},用于將第三矩陣計算元2’’’的第一個計算結果寫入到輸入輸出控制單元4的結果存儲器。由于第三矩陣計算元2’ ’ ’計算的是A矩陣與A矩陣第三列向量的乘積,應該有三個非零計算結果,此時應該均已存入第三矩陣計算元2’,,的結果隊列RES_VQUEM中,因此,還應將其它計算結果傳回輸入輸出控制單元4的結果存儲器,與傳送第一個計算結果類似,第一矩陣計算元2’,第二矩陣計算元2’’繼續(xù)為第三矩陣計算元2’’提供數據路徑,于是,第一矩陣計算元2’的數據路徑隊列DPATH_CQUE的第四第五條指令均為{選擇地址不管,接收不使能,接收選擇從右即第二矩陣計算元2’ ’,右送選擇不使能,左送選擇不使能},用于為第三矩陣計算元 2’’’傳送計算結果到輸入輸出控制單元4的結果存儲器提供數據通路。第二矩陣計算元 2”的數據路徑隊列DPATH_CQUE的第四第五條指令同樣為{選擇地址不管,接收不使能, 接收選擇從右即第三矩陣計算元2’,’,右送選擇不使能,左送選擇不使能},用于為第三矩陣計算元2’ ’’傳送計算結果到輸入輸出控制單元4的結果存儲器提供數據通路。這樣,保證第三矩陣計算元2’ ’ ’順利傳送第二第三個計算結果到輸入輸出控制單元4的結果存儲器中。當然,第三矩陣計算元2’’’為送出第二第三個計算結果,需要數據路徑隊列DPATH_ CQUE的第四指令為{選擇地址為結果隊列地址2,接收不使能,接收選擇不管,左送選擇使能,右送選擇使能},用于將第三矩陣計算元2’’’的第二個計算結果寫入到輸入輸出控制單元4的結果存儲器。第三矩陣計算元2’’’的數據路徑隊列DPATH_CQUE的第五指令為 {選擇地址為結果隊列地址3,接收不使能,接收選擇不管,左送選擇使能,右送選擇使能}, 用于將第三矩陣計算元2’ ’ ’的第三個計算結果寫入到輸入輸出控制單元4的結果存儲器。 這樣A矩陣與A矩陣第三列向量的乘積結果即三個計算值均被傳回輸入輸出控制單元4的結果存儲器中。至此,整個矩陣計算完畢。需要說明的是,為了使能各個矩陣計算元數據路徑隊列DPATH_CQUE中指令的全部執(zhí)行,需要在相應矩陣計算元的矩陣A隊列A_MQUE中加入冗余的空指令,形式為{寫結果標志置位,矩陣A (i,j)為0,行地址為0,列地址為0},這樣由于矩陣A隊列A_MQUE中指令的寫結果標志置位,產生彈出D信號,從而推進矩陣計算元數據路徑隊列DPATH_CQUE中所有指令的正常執(zhí)行。相應地,本發(fā)明還公開了一種用于數據通信處理器的矩陣計算方法,包括
矩陣預處理步驟,將兩個要進行相乘的矩陣中的一個矩陣A表示為{非零元素值,行地址,列地址};
矩陣運算指令形成步驟,根據經矩陣預處理的矩陣A和另一個矩陣B,形成矩陣運算的傳送指令和運算指令;
矩陣計算步驟,用于根據所述傳送指令和所述運算指令進行矩陣相乘。所述矩陣計算步驟進一步包括
將所述傳送指令載入數據路徑隊列DPATH_CQUE ;
將所述計算指令中與矩陣A對應的部分載入矩陣A隊列A_MQUE,與矩陣B對應的部分載入列向量b隊列B_VQUE ;
在矩陣A隊列A_MQUE的控制下由乘法加法單元MAC將矩陣A隊列A_MQUE中的非零值與以該非零值的列地址為索引的列向量b隊列B_VQUE的值進行相乘。優(yōu)選地,本發(fā)明用于數據通信處理器的矩陣計算方法還包括在所述矩陣計算元的矩陣A隊列A_MQUE中加入空指令,其形式為{寫結果標志置位,0,0,0}。此外,所述矩陣預處理步驟還包括將矩陣B分解為一個個的列向量。由于本發(fā)明用于數據通信處理器的矩陣計算方法的技術方案與本發(fā)明用于數據通信處理器的矩陣計算裝置的處理過程是相對應的,前文已經對本發(fā)明用于數據通信處理器的矩陣計算裝置的處理過程進行了詳細描述,因此在此不再對本發(fā)明用于數據通信處理器的矩陣計算方法的技術方案予以贅述。通過上述實施例的描述,本發(fā)明用于數據通信處理器的矩陣計算裝置和方法的優(yōu)點是明顯的。本發(fā)明充分利用了矩陣計算中的零元素,實現機制簡單,可行性好。以上實施例僅用以說明而非限制本發(fā)明的技術方案,盡管參照上述實施例對本發(fā)明進行了詳細說明,但本領域的普通技術人員應當理解依然可以對本發(fā)明進行修改或者等同替換,而不脫離本發(fā)明的精神和范圍的任何修改或局部替換,其均應涵蓋在本發(fā)明的權利要求范圍當中。
權利要求
1.一種用于數據通信處理器的矩陣計算裝置,其特征在于,包括矩陣預處理單元,將兩個要進行相乘的矩陣中的一個矩陣A表示為{非零元素值,行地址,列地址};矩陣運算指令形成單元,根據經所述矩陣預處理單元處理過的矩陣A和另一個矩陣B, 形成矩陣運算的傳送指令和運算指令;輸入輸出控制單元,用于緩沖所述傳送指令和所述運算指令以及矩陣計算結果; 至少一個矩陣計算元,用于根據所述輸入輸出控制單元傳送過來的所述傳送指令和所述運算指令進行矩陣相乘并把結果輸出給所述輸入輸出控制單元。
2.如權利要求1所述的用于數據通信處理器的矩陣計算裝置,其特征在于,所述矩陣計算元包括數據路徑隊列DPATH_CQUE、矩陣A隊列A_MQUE、列向量b隊列B_VQUE、乘法加法單元MAC和結果隊列RES_VQUE,其中所述數據路徑隊列DPATH_CQUE用于存放從所述輸入輸出控制單元傳送的所述傳送指令;所述矩陣A隊列A_MQUE用于存放從所述輸入輸出控制單元傳送的所述運算指令; 所述列向量b隊列B_VQUE,用于存放所述另一個矩陣B的列向量; 所述乘法加法單元MAC,用于把所述矩陣A隊列A_MQUE中的行向量和所述列向量b隊列中的列向量進行乘法加法運算并將結果存入所述結果隊列RES_VQUE。
3.如權利要求2所述的用于數據通信處理器的矩陣計算裝置,其特征在于,所述數據路徑隊列DPATH_CQUE包括選擇地址域、接收使能域、接收選擇域、右送選擇域和左送選擇域,其中所述選擇地址域用于選擇要從所述結果隊列RES_VQUE中讀出的內容所在的讀取地址;所述接收使能域用于指示是否向所述列向量b隊列B_VQUE中寫入; 所述接收選擇域用于選擇寫入所述列向量b隊列B_VQUE的內容是來自左方的矩陣計算元還是來自右方的矩陣計算元;所述右送選擇域用于選擇是將來自左方的矩陣計算元的數據還是將所述結果隊列 RES_VQUE中所述讀取地址處的內容送至右方矩陣計算元;所述左送選擇域用于選擇是將來自右方矩陣計算元的數據還是將所述結果隊列RES_ VQUE中所述讀取地址處的內容送至左方矩陣計算元。
4.如權利要求3所述的用于數據通信處理器的矩陣計算裝置,其特征在于,在所述矩陣A隊列A_MQUE中存放的所述運算指令包括寫結果域、非零元素值域、行地址域和列地址域,其中所述寫結果域用于指示所述乘法加法單元MAC的計算結果是否要寫入所述結果隊列 RES_VQUE。
5.如權利要求4所述的用于數據通信處理器的矩陣計算裝置,其特征在于,所述輸入輸出控制單元包括DPATH指令FIFO和AB指令FIFO。
6.如權利要求5所述的用于數據通信處理器的矩陣計算裝置,其特征在于,所述輸入輸出控制單元只要所述DPATH指令FIFO和AB指令FIFO未滿,就繼續(xù)接收新的指令序列直到所述DPATH指令FIFO和AB指令FIFO滿或者指令發(fā)送完畢。
7.如權利要求6所述的用于數據通信處理器的矩陣計算裝置,其特征在于,矩陣A隊列A_MQUE中加入空指令,其形式為{寫結果標志置位,0,0,0}。
8.如權利要求1至7所述的用于數據通信處理器的矩陣計算裝置,其特征在于,所述矩陣預處理單元和所述矩陣運算指令形成單元可以由編譯軟件實現。
9.一種用于數據通信處理器的矩陣計算方法,其特征在于,包括矩陣預處理步驟,將兩個要進行相乘的矩陣中的一個矩陣A表示為{非零元素值,行地址,列地址};矩陣運算指令形成步驟,根據經矩陣預處理的矩陣A和另一個矩陣B,形成矩陣運算的傳送指令和運算指令;矩陣計算步驟,用于根據所述傳送指令和所述運算指令進行矩陣相乘。
10.如權利要求9所述的用于數據通信處理器的矩陣計算方法,其特征在于,所述矩陣計算步驟進一步包括將所述傳送指令載入數據路徑隊列DPATH_CQUE ;將所述計算指令中與矩陣A對應的部分載入矩陣A隊列A_MQUE,與矩陣B對應的部分載入列向量b隊列B_VQUE ;在矩陣A隊列A_MQUE的控制下由乘法加法單元MAC將矩陣A隊列A_MQUE中的非零值與以該非零值的列地址為索引的列向量b隊列B_VQUE的值進行相乘。
11.如權利要求10所述的用于數據通信處理器的矩陣計算方法,其特征在于,還包括在所述矩陣計算元的矩陣A隊列A_MQUE中加入空指令,其形式為{寫結果標志置位,0,0, 0}。
12.如權利要求9至11所述的用于數據通信處理器的矩陣計算方法,其特征在于,所述矩陣預處理步驟還包括將矩陣B分解為一個個的列向量。
全文摘要
本發(fā)明公開了一種用于數據通信處理器的矩陣計算裝置和方法。本發(fā)明數據通信處理器的矩陣計算裝置包括矩陣預處理單元、矩陣運算指令形成單元、輸入輸出控制單元和至少一個矩陣計算元。本發(fā)明用于數據通信處理器的矩陣計算方法包括矩陣預處理步驟、矩陣運算指令形成步驟和矩陣計算步驟。由于本發(fā)明對矩陣進行了預處理,把值為0的矩陣元素在進行矩陣相乘之前就去掉了,也就是使為0的矩陣元素不參與運算,因此大大提高了矩陣計算效率。
文檔編號G06F17/16GK102541814SQ20101060724
公開日2012年7月4日 申請日期2010年12月27日 優(yōu)先權日2010年12月27日
發(fā)明者李陸軍 申請人:北京國睿中數科技股份有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1