專利名稱:浮點向量乘加運算裝置和方法
技術領域:
本發(fā)明涉及微處理器中的運算部件設計技術領域,特別是涉及一種浮點向量乘加
運算裝置和方法。
背景技術:
在微處理器中,浮點向量乘加部件的應用極大的提高了浮點運算速度。 浮點向量乘加部件通過浮點向量乘加指令,將一個浮點操作數(shù)AO和浮點向量
(B0,B1,……Bn-1)相乘,將其乘積累加到第三個浮點向量(C0,C1,……Cn_l),即 (C0,C1, ......Cn-1) = (C0, Cl, ......Cn_l)+A0* (B0, Bl, ......Bn_l) 其中,各浮點操作數(shù)存放在相應的寄存器中。 浮點向量部件一種很重要的應用就是進行圖1中a所示的矩陣運算。
在現(xiàn)有的技術中,圖1中的矩陣運算是通過shuffle指令和向量乘加指令組合使 用來完成的。設A0, Al,……An-1已經(jīng)按次序存放在寄存器REG—A中,BO, Bl,……Bn_l 存放在寄存器REG—B中,COO,COl,……C0(n-1)存放在寄存器REG—CO中,C10,C11,…… Cl(n-l)存放在寄存器REG—C1中,……,C(n-l)O, C(n-l)l,……C(n-l) (n-l)存放在寄 存器REG—C(n-1)中。 首先,向量乘加指令進行(COO, COl, ......C0(n-1))+= AO*(BO, Bl, ......Bn_l)
的運算,如圖1中b所示。然后shuffle指令對向量(AO, Al,……An-l)進行移位,得到 (Al,……An-1,0),接下來向量乘加指令進行(ClO,Cll,……Cl(n-l))+ = A1*(B0,B1,……
Bn-l)的運算,如圖1中c所示;......;shuffle指令對向量(An-2, An_l, ......0)進行移
位,得到(An-l,O,……O),然后向量指令進行(C(n-l)O,C(n-l)l,……C(n_l) (n_l)) + = A(n-1)*(B0, Bl, ......Bn-1)的運算,如圖l中d所示。 由此可以看出,使用現(xiàn)有技術,每執(zhí)行兩條指令( 一條移位指令, 一條運算指令) 才能完成一次向量乘加操作,效率很低。
發(fā)明內容
本發(fā)明的目的在于提供一種浮點向量乘加運算裝置和方法,克服現(xiàn)有技術中的缺 陷,把shuffle移位指令和向量乘加指令融合成一條新的向量乘加指令,省去在進行浮點 向量運算時的移位指令,減少程序長度,提高微處理器在執(zhí)行向量乘加運算時的運算效率 和速度。 為了實現(xiàn)所述目的,本發(fā)明提供一種浮點向量乘加運算裝置,包括一個乘數(shù)選擇 單元,n個乘法單元,n個加法單元; 乘數(shù)選擇單元,用于根據(jù)第四源操作數(shù)的值m,選擇第二源操作數(shù)浮點向量的第 m+1部分輸出到n個乘法單元;其中,m《n_l ; 乘法單元,用于將所選擇的第二源操作數(shù)浮點向量的第m+l部分與第三源操作數(shù) 浮點向量的n個部分分別進行相乘操作,并將相乘操作的運算結果輸出到相應的n個加法單元; 加法單元,用于將相乘操作的運算結果的n個部分和第一源操作數(shù)浮點向量的n 個部分分別進行加法操作,得到乘加結果。 為實現(xiàn)本發(fā)明目的還提供一種浮點向量乘加運算方法,包括如下步驟
步驟A,根據(jù)第四源操作數(shù)的值m,選擇具有n個部分的第二源操作數(shù)浮點向量的 第m+1部分輸出到n個乘法單元;第三源操作數(shù)浮點向量輸出到相應的n個乘法單元;其 中,m《n_l ; 步驟B,將所選擇的第二源操作數(shù)浮點向量的第m+1部分與第三源操作數(shù)浮點向 量的n個部分分別進行相乘操作,并將相乘操作的運算結果輸出到相應的n個加法單元;
步驟C,將相乘操作的運算結果和第一源操作數(shù)浮點向量的n個部分分別進行加 法操作,得到乘加結果。 本發(fā)明的有益效果使用本發(fā)明的浮點向量乘加運算裝置和方法,僅需要在向量 乘加指令中通過第四源操作數(shù)指定乘數(shù),避免了現(xiàn)有技術中每執(zhí)行完一條向量乘加指令, 就要通過一條shuffle移位指令重新設置乘數(shù)的缺陷,減少了程序長度,提高了運算效率 和速度。
圖1是使用現(xiàn)有技術進行浮點向量乘加運算的示意圖; 圖2是本發(fā)明實施例的浮點向量乘加運算裝置結構示意圖; 圖3是本發(fā)明實施例的浮點向量乘加運算方法流程圖; 圖4是本發(fā)明實施例的浮點向量乘加指令執(zhí)行的示意圖; 圖5是本發(fā)明實施例中浮點向量乘加運算矩陣示意圖; 圖6是本發(fā)明實施例中用浮點向量乘加運算指令實現(xiàn)圖5矩陣乘法的偽代碼示意 圖7是使用現(xiàn)有技術計算圖5中矩陣運算的偽代碼示意圖,
具體實施例方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對 本發(fā)明的浮點向量乘加運算裝置和方法進行進一步詳細說明。應當理解,此處所描述的具 體實施例僅僅用以解釋本發(fā)明而不是對本發(fā)明的限制。 本發(fā)明實施例的浮點向量乘加運算裝置融合了現(xiàn)有向量乘加運算方法中的 shuffle部件和向量乘加部件,當向量乘加指令中第四源操作數(shù)為0時,執(zhí)行C = C+A0*B的 運算;當?shù)谒脑床僮鲾?shù)為1時,執(zhí)行C = C+A1*B的運算;……;當?shù)谒脑床僮鲾?shù)為n-l時, 執(zhí)行C = C+A(n-1)*B的運算。避免了現(xiàn)有技術中必需通過shuffle指令對向量A進行移 位來設置乘數(shù)。 如圖2所示,為本發(fā)明實施例的浮點向量乘加運算裝置結構示意圖。該裝置實現(xiàn) 的功能是 目的操作數(shù)<_第一源操作數(shù)+第二源操作數(shù)某一部分(由第四源操作數(shù)選擇)* 第三源操作數(shù)。
該裝置包括一乘數(shù)選擇單元1, n個乘法單元2, n個加法單元3。 乘數(shù)選擇單元l,用于根據(jù)第四源操作數(shù)的值m,選擇第二源操作數(shù)浮點向量的第
m+1部分輸出到n個乘法單元2 ; 其中,m《n-l。 當?shù)谒脑床僮鲾?shù)的值為0時,選擇第二源操作數(shù)浮點向量的第一部分;當?shù)谒脑?操作數(shù)的值為1時,選擇第二源操作數(shù)浮點向量的第二部分;……;當?shù)谒脑床僮鲾?shù)為n-1 時,選擇第二源操作數(shù)浮點向量的第n部分。 乘法單元2,用于將所選擇的第二源操作數(shù)浮點向量的第m+1部分與第三源操作 數(shù)浮點向量的n個部分分別進行相乘操作,并將相乘操作的運算結果輸出到相應的n個加 法單元3。 加法單元3,用于將相乘操作的運算結果的n個部分和第一源操作數(shù)浮點向量的n 個部分分別進行加法操作,得到乘加結果。 所述第一源操作數(shù)浮點向量,第二源操作數(shù)浮點向量和第三源操作數(shù)浮點向量存 放在寄存器中,所述第四源操作數(shù)為立即數(shù); 所述加法操作的結果作為整個乘加運算的最后結果,保存在第一源操作數(shù)中,即 將加法操作的結果存入所述第一源操作數(shù)存放寄存器的相應位置,即第一源操作數(shù)為目的 操作數(shù)。 較佳地,所述乘數(shù)選擇單元1為一個多路選擇器。
較佳地,所述乘法單元2由多個并行的乘法子單元構成。
較佳地,所述加法單元3由多個并行的加法子單元構成。 基于圖2所示的浮點向量乘加運算裝置,圖3示出本發(fā)明實施例的浮點向量乘加 運算方法的流程圖,所述浮點向量乘加運算方法包括如下步驟 步驟S100,將具有n個加數(shù)的浮點向量存放在第一源操作數(shù)寄存器中,具有n個乘 數(shù)的浮點向量存放在第二源操作數(shù)寄存器中,具有n個被乘數(shù)的浮點向量存放在第三源操 作數(shù)寄存器中,把將要參與運算的乘數(shù)在第二源操作數(shù)寄存器中的位置號,存放在第四源 操作數(shù)中。 步驟S200,根據(jù)第四源操作數(shù)的值m,選擇具有n個部分的第二源操作數(shù)浮點向量 的第m+l部分作為乘數(shù)輸出到n個乘法單元2 ;第三源操作數(shù)浮點向量輸出到相應的n個 乘法單元2 ;其中,m《n-l。 步驟S300,將所選擇的第二源操作數(shù)浮點向量的第m+l部分與第三源操作數(shù)浮點 向量的n個部分分別進行相乘操作,并將相乘操作的運算結果輸出到相應的n個加法單元 3。 步驟S400,把第一源操作數(shù)寄存器中的n個加數(shù)輸出到相應的加法單元3,當步驟 S300中的乘法運算結果輸入到加法單元3之后,進行加法運算,加法運算的結果作為整個 乘加運算的最后結果,保存在第一源操作數(shù)中。 作為一種可實施方式,所述方法可以以計算機向量乘加指令的方式實現(xiàn),如圖4 所示,為本發(fā)明實施例的浮點向量乘加指令執(zhí)行的示意圖。所述乘加指令的格式為操作碼 第一源操作數(shù)(目的操作數(shù)),第二源操作數(shù),第三源操作數(shù),第四源操作數(shù)。所述乘加指令 用于實現(xiàn)如下功能
目的操作數(shù)<_第一源操作數(shù)+第二源操作數(shù)某一部分(由第四源操作數(shù)選擇)* 第三源操作數(shù)。 其中,第一源操作數(shù),第二源操作數(shù)和第三源操作數(shù)存放在寄存器中,第四操作數(shù) 為立即數(shù),所述第一源操作數(shù)為目的操作數(shù)。 下邊以一個實施例方式來說明使用本發(fā)明浮點向量乘加運算方法的過程。設寄存 器長度為256bit,每個數(shù)據(jù)元素為8字節(jié)的雙精度數(shù)。以圖5所示的矩陣乘法為例,設AO, Al, A2, A3已經(jīng)按次序存放在寄存器REG_A中,B0, Bl, B2, B3存放在寄存器REG_B中,COO, C01, C02, C03存放在寄存器REG—C0中,CIO, Cll, C12, C13存放在寄存器REG—C1中,C20, C21, C22, C23存放在寄存器REG_C2中,C30, C31, C32, C33存放在寄存器REG_C3中。圖6 為使用本發(fā)明的浮點向量乘加運算方法進行運算的偽代碼。 在第一步驟中,第四源操作數(shù)的值為O,此時乘數(shù)選擇單元l選擇第二源操作數(shù) REG_A中的AO,然后AO與第三源操作數(shù)REG_B中的B0, Bl, B2, B3同時進行乘法運算,運算 結果輸出到四個加法單元3,分別與第一源操作數(shù)REG—C0中的C00,C01,C02,C03進行加法 運算,最后結果保存在第一源操作數(shù)REGJX)中。 在第二步驟中,第四源操作數(shù)的值為l,此時乘數(shù)選擇單元l選擇第二源操作數(shù) REG_A中的Al,然后Al與第三源操作數(shù)REG_B中的B0, Bl, B2, B3同時進行乘法運算,運算 結果輸出到四個加法單元3,分別與第一源操作數(shù)REG_C1中的C10,C11,C12,C13進行加法 運算,最后結果保存在第一源操作數(shù)REG—C1中。 在第三步驟中,第四源操作數(shù)的值為2,此時乘數(shù)選擇單元1選擇第二源操作數(shù) REG_A中的A2,然后A2與第三源操作數(shù)REG_B中的B0, Bl, B2, B3同時進行乘法運算,運算 結果輸出到四個加法單元3,分別與第一源操作數(shù)REG_C2中的C20,C21,C22,C23進行加法 運算,最后結果保存在第一源操作數(shù)REG_C2中。 在第四步驟中,第四源操作數(shù)的值為3,此時乘數(shù)選擇單元1選擇第二源操作數(shù) REG_A中的A3,然后A3與第三源操作數(shù)REG_B中的B0, Bl, B2, B3同時進行乘法運算,運算 結果輸出到四個加法單元3,分別與第一源操作數(shù)REG—C3中的C30,C31,C32,C33進行加法 運算,最后結果保存在第一源操作數(shù)REG—C3中。 經(jīng)過四個步驟,寄存器REG_C0, REG_C1, REG_C2, REG_C3中保存的值即為最終結 果。圖7是使用現(xiàn)有技術計算圖5中矩陣運算的偽代碼示意圖,與圖6比較可以看出,本發(fā) 明的效率遠高于現(xiàn)有技術。 使用本發(fā)明實施例的浮點向量乘加運算裝置和方法,當進行圖1中所示類型的運 算時,把向量(A0,A1,……An-1)存放在第二源操作數(shù)中,然后只需執(zhí)行連續(xù)的n條向量乘 加指令即可。其中,n條指令中第四源操作數(shù)的值分別O,l,……n-l,用來指定每條指令中 所使用的乘數(shù)。避免了現(xiàn)有技術中,每執(zhí)行完一條向量乘加指令,就要執(zhí)行一條shuffle移 位指令重新設置乘數(shù)的缺陷,減少了程序長度,提高了運算效率和速度。
最后應當說明的是,很顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變 型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要 求及其等同技術的范圍之內,則本發(fā)明也意圖包含這些改動和變型。
權利要求
一種浮點向量乘加運算裝置,其特征在于,包括一個乘數(shù)選擇單元,n個乘法單元,n個加法單元;乘數(shù)選擇單元,用于根據(jù)第四源操作數(shù)的值m,選擇第二源操作數(shù)浮點向量的第m+1部分輸出到n個乘法單元;其中,m≤n-1;乘法單元,用于將所選擇的第二源操作數(shù)浮點向量的第m+1部分與第三源操作數(shù)浮點向量的n個部分分別進行相乘操作,并將相乘操作的運算結果輸出到相應的n個加法單元;加法單元,用于將相乘操作的運算結果和第一源操作數(shù)浮點向量的n個部分分別進行加法操作,得到乘加結果。
2. 根據(jù)權利要求1所述的浮點向量乘加運算裝置,其特征在于,所述第一源操作數(shù)浮 點向量,第二源操作數(shù)浮點向量和第三源操作數(shù)浮點向量存放在寄存器中,所述第四源操 作數(shù)為立即數(shù);所述乘加結果存入所述第一源操作數(shù)存放寄存器的相應位置,即第一源操作數(shù)為目的 操作數(shù)。
3. 根據(jù)權利要求1或2所述的浮點向量乘加運算裝置,其特征在于,所述第四源操作數(shù) 的值選擇第二源操作數(shù)浮點向量的相應部分,為當?shù)谒脑床僮鲾?shù)的值為0時,選擇第二源操作數(shù)浮點向量的第一部分;當?shù)谒脑床僮?數(shù)的值為1時,選擇第二源操作數(shù)浮點向量的第二部分;……;當?shù)谒脑床僮鲾?shù)為n-l時, 選擇第二源操作數(shù)浮點向量的第n部分。
4. 根據(jù)權利要求1或2所述的浮點向量乘加運算裝置,其特征在于,所述乘數(shù)選擇單元 為一個多路選擇器。
5. 根據(jù)權利要求1或2所述的浮點向量乘加運算裝置,其特征在于,所述乘法單元由多 個并行的乘法子單元構成。
6. 根據(jù)權利要求1或2所述的浮點向量乘加運算裝置,其特征在于,所述加法單元由多 個并行的加法子單元構成。
7. —種浮點向量乘加運算方法,其特征在于,包括如下步驟步驟A,根據(jù)第四源操作數(shù)的值m,選擇具有n個部分的第二源操作數(shù)浮點向量的第 m+1部分輸出到n個乘法單元;第三源操作數(shù)浮點向量輸出到相應的n個乘法單元;其中, m《n_l ;步驟B,將所選擇的第二源操作數(shù)浮點向量的n個部分與第三源操作數(shù)浮點向量的n個 部分分別進行相乘操作,并將相乘操作的運算結果輸出到相應的n個加法單元;步驟C,將相乘操作的運算結果和第一源操作數(shù)浮點向量的n個部分分別進行加法操 作,得到乘加結果。
8. 根據(jù)權利要求7所述的浮點向量乘加運算方法,其特征在于,還包括如下步驟 將具有n個加數(shù)的浮點向量存放在第一源操作數(shù)寄存器中,具有n個乘數(shù)的浮點向量存放在第二源操作數(shù)寄存器中,具有n個被乘數(shù)的浮點向量存放在第三源操作數(shù)寄存器 中,把將要參與運算的乘數(shù)在第二源操作數(shù)寄存器中的位置號,存放在第四源操作數(shù)中。
全文摘要
本發(fā)明公開一種浮點向量乘加運算裝置和方法。該裝置包括一個乘數(shù)選擇單元,n個乘法單元,n個加法單元;乘數(shù)選擇單元,用于根據(jù)第四源操作數(shù)的值m,選擇第二源操作數(shù)浮點向量的第m+1部分輸出到n個乘法單元;其中,m≤n-1;乘法單元,用于將所選擇的第二源操作數(shù)浮點向量的第m+1部分與第三源操作數(shù)浮點向量的n個部分分別進行相乘操作,并將相乘操作的運算結果輸出到相應的n個加法單元;加法單元,用于將相乘操作運算結果的n個部分和第一源操作數(shù)浮點向量的n個部分分別進行加法操作,得到乘加結果。其可以省去浮點向量運算中的shuffle移位指令,減少程序長度,提高微處理器在執(zhí)行乘加運算時的運算效率和速度。
文檔編號G06F7/57GK101706712SQ20091024161
公開日2010年5月12日 申請日期2009年11月27日 優(yōu)先權日2009年11月27日
發(fā)明者朱海濤, 胡偉武, 陳云霽 申請人:北京龍芯中科技術服務中心有限公司