專利名稱:運算裝置和運算方法
技術領域:
本發明涉及一種運算裝置和一種運算方法,用于執行使用CPU的算術邏輯運算。
背景技術:
CPU(Central Processing Unit,中央處理單元)就是用于計算機等的運算單元(算術邏輯單元),其中,有一些運算單元具有一組被稱為多媒體指令的指令(下文稱之為MM指令或簡單地稱之為指令)。該MM指令用于劃分CPU具有的運算元素區,以便同時執行多個操作。
圖1示出常規CPU的結構的一個例子。該常規CPU包括算術邏輯單元(ALU)130,用作執行數據處理的算術邏輯裝置;移位處理單元(SHT)140,用作按向左和向右的方向移動數據的移位處理裝置;以及寄存器單元(REG)150,例如累加器等,其中,上述各單元連接到,例如64位總線160、170、180,以便相互傳送數據。
圖2示出上述常規CPU中的64位×64位乘法器的乘法運算。也就是說,將寄存器A的64位的字s和寄存器B的64位的字t相乘,產生128位的乘積s*t,并將該乘積存儲到寄存器C中。
圖3示出將上述的64位的字s和t分別分割成4個字段,從而形成相應的4個位字段,以便執行確認字段(ack(acknowledge)field)的位的乘法,即16位×16位的乘法的情況。也就是說,將寄存器A的相應的16位的s0、s1、s2、s3和寄存器B的相應的16位的t0、t1、t2、t3相乘,產生分別由32位構成的乘積s0*t0、s1*t1、s2*t2以及s3*t3,并將乘積存儲到寄存器C中。
通過四分CPU具有的乘法器,以構成四個并行的乘法器,可實現上述的四路并行乘法運算。此外,與上述類似,還可將CPU具有的加法器四分,以便構成四路并行加法器。
圖4示出上述常規CPU中的128位+128位的加法器的加法運算。也就是說,將寄存器A的相應的32位的s與寄存器B中的相應的32位的t相加,產生128位的和s+t,并將該和存儲到寄存器C中。
圖5示出將上述相應的字分割為四份,以便執行相應的32位+相應的32位的加法的情況。也就是說,將寄存器A的相應的32位的s0、s1、s2、s3與寄存器B的相應的32位的t0、t1、t2、t3相加,產生分別由32位構成的和s0+t0、s1+t1、s2+t2、s3+t3,并將該和存儲到寄存器C中。
當參加操作的數據的寬度為如上所述的16位或32位左右時,如果使用由分割單個的運算元素而形成的并行的運算元素,則有可能高速地執行運算處理。用于執行圖3和圖5所示的并行操作的指令就是為此使用的多媒體(MM)指令的一部分。
下面簡要地說明使用MM指令的常規的并行操作的一個更加實際的例子。
一開始,說明通過使用克萊姆(Cramer)公式來求解由如下公式(1)所示的n個聯立線性方程的情況。
a00X0+a01X1+…+a0nXn=b0a10X0+a11X1+…+a1nXn=b1…(1)an0X0+an1X1+…+annXn=bnXj=a00...b0...a0n.........an0...bn...ann/a00......a0n......an0......ann(0≤j≤n)---(2)]]>第j列用b0b1...bn]]>替換。
當使用該克萊姆公式時,如上述公式(2)所示,依次替換n×n行列式的第j列,由此有可能得到公式(1)的聯立線性方程的解。也就是說,如果該行列式能夠計算,就有可能求解該聯立線性方程。
通常,如公式(3)所示,n×n行列式可通過使用具有比n低的階的小行列式來展開。在這種情況下,Δij是這樣的表達式在從n×n行列式中去掉第i行和第j列所得到的表達式前加上由(-1)i+j給出的符號。a00......a0n......an0......ann=a0jΔ0j+a1jΔ1j+...anjΔnj]]>去掉第j列…(3)Δij=(-1)i+ja00.........a0n...............an0.........ann]]>去掉第i行也就是說,如果依次計算出較低階的小行列式,則原行列式就可被計算出。于是,如果能夠計算出最低階的行列式,即2×2行列式,則任意階的行列式都可類似地計算出。為計算2×2行列式,用公式(4)表示的展開式就夠用了。a00a01a10a11=a00*a11-a01*a10---(4)]]>此外,在計算3×3矩陣的行列式的情況下,由公式(3)表示的展開式可改寫為公式(5)a00a01a02a10a11a12a20a21a22=a00a11a12a21a22-a10a01a02a21a22+a20a01a02a11a12---(5)]]>圖6示出將3×3矩陣的相應的行向量(a00,a01,a02)、(a10,a11,a12)、(a20,a21,a22)分別以64位存儲到寄存器A0、A1、A2中的情況。對于這樣存儲的行向量,通過使用常規的MM指令來計算2×2的小行列式的過程將在下面描述。
圖7示出對于圖6的3×3矩陣的行向量,通過使用常規MM指令來計算2×2的小行列式的過程。
一開始,用指令“SRL B,A1,16”將存儲在A1中的行向量右移16位,并存儲到寄存器B中。
然后,用指令“ANDI B,0x000000000000ffff”來產生上述存儲在寄存器B中的行向量與000000000000ffff的乘積(AND),并再次存儲到寄存器B中,這樣,僅有a11被存儲到寄存器B的低16位,即位0至位15中。
然后,用指令“SLL C,A1,16”將存儲在寄存器A1中的行向量左移16位,并存儲到寄存器C中。
然后,用指令“ANDI C,0x00000000ffff0000”來產生上述存儲在寄存器C中的行向量與00000000ffff0000的乘積(AND),并且接著將其存儲到寄存器C中。這樣,僅將a12存儲到寄存器C的位16至位31這16位中。
然后,用指令“OR D,B,C”產生存儲在寄存器B中的數據與存儲在寄存器C中的數據之和(OR),并存儲到寄存器D中。這樣,a12、a11就被存儲到寄存器D的低32位中。
然后,用指令“PMUL E,A0,D”將寄存器A0中存儲的行向量與寄存器D中存儲的數據并行地相乘,并將結果存儲到寄存器E中。也就是說,a01*a12被存儲到寄存器E的高32位中,而a02*a11被存儲到其低32位中。
然后,用指令“SRL F,E,32”將存儲在寄存器E中的數據右移32位,并存儲到寄存器F中。也就是說,僅有a01*a12被存儲到寄存器F的低32位中。
然后,用指令“ANDI E,0x00000000ffffffff”產生上述存儲在寄存器E中的數據與00000000ffffffff的乘積(AND),并再次存儲到寄存器E中。這樣,僅有a02*a11被存儲到寄存器E的低32位中。
然后,用指令“SUB G,F,E”,將存儲在寄存器F中的數據減去存儲在寄存器E中的數據,從而產生其差。將這樣產生的差存儲到寄存器G中。這樣,2×2矩陣的行列式a01*a12-a02*a11就被存儲到寄存器G的低32位中。
如上所述,在使用常規MM指令來計算2×2矩陣的行列式的情況下,需要上述9個步驟。
下面將說明第二個更加實際的例子,即確定三角形的法向量,在該例子中,使用常規MM指令來執行并行操作。
三維空間的三個點確定一個三角形。此外,三角形的面積和法向量由外積向量的絕對值和歸一化向量給出。這樣的兩個三維向量的外積是由公式(6)給出的三維向量。
(a00a01a02)×(a10a11a12)=(a01a02a11a12a02a00a12a10a00a01a10a11)---(6)]]>圖8示出將兩個三維向量(a00,a01,a02)、(a10,a11,a12)作為兩個分別由64位構成的字存儲到寄存器A0、A1中的情況。下面將說明有關通過使用常規MM指令、對如此存儲的兩個三維向量計算外積的過程。
圖9示出通過使用常規MM指令、對圖8的兩個三維向量計算外積的過程。
一開始,用指令“SRL B,A0,16”將存儲在寄存器A0中的行向量右移16位,并存儲到寄存器B中。
然后,用指令“SLL C,A0,32”將存儲在寄存器A0中的行向量左移32位,并存儲到寄存器C中。
然后,用指令“OR D,B,C”來產生存儲在寄存器B中的數據與存儲在寄存器C中的數據之和(OR),并存儲到寄存器D中。這樣,分別由16位構成的a01、a02、a00、a01被存儲到寄存器D中。
然后,用指令“SLL E,A1,16”將存儲在寄存器A1中的行向量左移16位,并存儲到寄存器E中。
然后,用指令“SRL F,A1,32”將存儲在寄存器A1中的行向量右移32位,并存儲到寄存器F中。
然后,用指令“OR G,E,F”產生存儲在寄存器E中的數據與存儲在寄存器F中的數據之和(OR),并存儲到寄存器G中。這樣,分別由16位構成的a10、a11、a12、a10被存儲到寄存器G中。
然后,用指令“PMUL H,D,G”將存儲在寄存器D中的數據和存儲在寄存器G中的數據并行地相乘,并將結果存儲到寄存器H中。也就是說,分別由32位構成的a01*a10、a02*a11、a00*a12、a01*a10被存儲到寄存器H中。
然后,用指令“SLL B,A0,16”將存儲在寄存器A0中的行向量左移16位,并存儲到寄存器B中。
然后,用指令“SRL C,A0,32”將存儲在寄存器A0中的行向量右移32位,并存儲到寄存器C中。
然后,用指令“OR D,B,C”產生存儲在寄存器B中的數據與存儲在寄存器C中的數據之和(OR),并存儲到寄存器D中。這樣,分別由16位構成的a00、a01、a02、a00被存儲到寄存器D中。
然后,用指令“SRL E,A1,16”將存儲在寄存器A1中的行向量右移16位,并存儲到寄存器E中。
然后,用指令“SLL F,A1,32”將存儲在寄存器A1中的行向量左移32位,并存儲到寄存器F中。
然后,用指令“OR G,E,F”產生存儲在寄存器E中的數據與存儲在寄存器F中的數據之和(OR),并存儲到寄存器G中。這樣,分別由16位構成的a11、a12、a10、a11被存儲到寄存器G中。
然后,用指令“PMUL J,D,G”將存儲在寄存器D中的數據與存儲在寄存器G中的數據并行地相乘,并將結果存儲到寄存器J中。也就是說,分別由32位構成的a00*a11、a01*a12、a02*a10、a00*a11被存儲到寄存器J中。
然后,用指令“PSUB K,J,H”將存儲在寄存器J中的數據并行地減去存儲在寄存器H中的數據,并將結果存儲到寄存器K中。也就是說,分別由32位構成的a00*a11-a01*a10、a01*a12-a02*a11、a02*a10-a00*a12、a00*a11-a10*a10被存儲到寄存器K中。
如上所述,在使用常規MM指令來計算兩個三維向量的外積的情況下,需要上述的15個步驟。
下面將說明第三個更加實際的例子,即,計算兩個向量的內積,在該例子中,使用常規的MM指令來執行并行操作。
兩個矢量的內積代表了它們之間的相關程度。像這樣的兩個向量的內積,例如兩個四維向量的內積由公式(7)給出。
(a0a1a2a3)*(b1b2b3)=a0*b0+a1*b1+a2*b2+a3*b3...(7)
圖10示出將兩個64位字的四維向量(a0,a1,a2,a3)和(b0,b1,b2,b3)作為兩個字分別存儲到寄存器A、B中的情況。下面將說明使用常規MM指令、對如此存儲的兩個四維向量計算內積的過程。
圖11示出使用常規MM指令、對圖10的兩個四維向量計算內積的過程。在該例子中,標有記號x的部分表示所存儲的數與該操作無關。
一開始,用指令“PMUL C,A,B”將存儲在寄存器A中的數據和存儲在寄存器B中的數據并行地相乘,并將結果存儲到寄存器C中。也就是說,分別由16位構成的a0*b0、a1*b1、a2*b2、a3*b3被存儲到寄存器C中。
然后,用指令“SLL D,C,16”將存儲在寄存器C中的數據左移16位,并存儲到寄存器D中。
然后,用指令“PADD E,C,D”將存儲在寄存器C中的數據與存儲在寄存器D中的數據并行地相加,并將結果存儲到寄存器E中。這樣,在寄存器E中,16位的a2*b2+a3*b3被存儲到位16至31,而16位的a0*b0+a1*b1被存儲到位48至位63。
然后,用指令“SLL F,E,32”將存儲在寄存器E中的數據左移32位,并存儲到寄存器F中。這樣,在寄存器F中,僅有a2*b2+a3*b3被存儲到最高的16位中,而低位的兩個16位的數據值都變為零。
然后,用指令“PADD G,E,F”將存儲在寄存器E中的數據與存儲在寄存器F中的數據并行地相加,并將結果存儲到寄存器G中。這樣,在寄存器G中,a0*b0+a1*b1+a2*b2+a3*b3被存儲到最高的16位中,而a2*b2+a3*b3被存儲到位16至位31中。
如上所述,在使用常規MM指令來計算兩個四維向量的內積的情況下,需要上述的5個步驟。
同時,在該使用常規MM指令的運算裝置和運算方法中,當n位的多個字段的數據被存儲到寄存器中時,僅在這些字段的相同(對應)的位字段之間執行操作。也就是說,由于不能直接在由多個字段構成的參加操作的字中的多個字段之間執行算術操作,所以在如上所述的執行并行操作的過程中,為了在兩個期望的字段之間執行操作,就必須執行額外的字段操作,這樣,不能使運算速度充分提高。
本發明的公開本發明就是鑒于上述問題而提出的,其目的是提供一種運算裝置和一種運算方法,該裝置和方法能夠用比常規運算裝置的步驟數少的步驟數、高速地執行并行操作。
本發明的運算裝置包括算術邏輯裝置,用于對參加操作的、由多個由M位(M≥1)構成的字段所組成的字、執行算術邏輯運算;移位處理器,用于對參加操作的字執行預定位數的移位操作;以及寄存器,用于存儲參加操作的字和已執行完操作的字,并且能夠在同一個參加操作的字內的多個字段之間執行并行操作。
此外,本發明的運算方法是下述的運算方法以字段為單位,對參加操作的、由多個由M位構成的字段所組成的字、執行算術邏輯運算,其中,該方法包括在同一個參加操作的字內交換兩個或多個字段的步驟。
根據上述的運算裝置和運算方法,由于不必執行額外的字段操作,所以可以用比現有技術少的步驟數高速地執行并行操作。
附圖的簡要描述圖1是常規CPU的結構的一個例子的示意圖。
圖2是說明用64位×64位乘法器進行乘法運算的示意圖。
圖3是說明用四分的64位×64位乘法器進行并行乘法運算的示意圖。
圖4是說明用64位×64位的加法器進行加法運算的示意圖。
圖5是說明用四分的64位×64位加法器進行并行加法運算的示意圖。
圖6是將3×3矩陣的行向量分別作為64位的字存儲到寄存器中的情況的示意圖。
圖7是用常規MM指令對3×3矩陣的行向量計算2×2的小行列式的過程的示意圖。
圖8是將兩個三維向量分別作為64位的字存儲到寄存器的情況的示意圖。
圖9是用常規MM指令對兩個三維向量計算外積的過程的示意圖。
圖10是將兩個四維向量分別作為兩個字存儲到寄存器中的情況的示意圖。
圖11是用常規MM指令對兩個四維向量計算內積的過程的示意圖。
圖12是作為本發明的運算裝置的一種形式的CPU的結構的一個例子的示意圖。
圖13是具有MM指令的CPU的基本結構的一個例子的示意圖。
圖14A、B、C是說明指令“PMUL”和“PADD”的示意圖。
圖15A至E是說明本發明的運算裝置的MM指令的示意圖。
圖16是數據交換單元(EXC電路)的結構的一個例子的示意圖。
圖17是說明EXC電路的多路復用器(MUX)的示意圖。
圖18是發送到MUX的兩個命令及其操作的示意圖。
圖19是發送到EXC電路的EXC命令與要實現的MM指令之間的對應關系的示意圖。
圖20是用于實現指令“PEXC”的電路的示意圖。
圖21是用于實現指令“PEXH”的電路的示意圖。
圖22是用于實現指令“PROT3”的電路的示意圖。
圖23是用于實現指令“PHADD”的電路的示意圖。
圖24是用于實現指令“PHSUB”的電路的示意圖。
圖25是用本發明的運算裝置,對分別存儲的3×3矩陣的行向量計算2×2的小行列式的過程的示意圖。
圖26是用本發明的運算裝置,對兩個三維向量計算外積的過程的示意圖。
圖27是用本發明的運算裝置,對兩個四維向量計算內積的過程的示意圖。
圖28是應用本發明的運算裝置的圖像形成裝置的結構的一個例子的方框圖。
實施本發明的最佳方式下面將參照附圖描述本發明的運算裝置和運算方法的優選實施例。在下面的描述中,將首先說明本發明的運算裝置的實施例的結構,然后將參照該結構說明本發明的運算方法的實施例。
圖12示出作為本發明的運算裝置的一個實施例的、CPU的主要部分的結構的一個例子。該CPU的結構包括算術邏輯單元(ALU)330,用作算術邏輯裝置;移位處理單元(SHT)340;以及寄存器單元(REG)350,其中上述各單元能夠通過64位的總線(BUS)360、370、380和16位的并行總線相互傳遞數據。上述的ALU330、SHT340以及REG350在結構上分別被分割成四個部分。
同時,上述的相應的元件具有與圖13中所示的CPU的相應的部分相同的結構,前者不同于后者之處在于前者包括數據交換單元(EXC)310、320,用作字內的位字段交換裝置。也就是說,通過用作字內的位字段交換裝置的EXC310、320,可在ALU330中實現在同一個參加操作的字內的多個字段之間執行操作的運算功能。在該例子中,一個字段由M位(M≥1)構成。在下述的實施例中,一個字段有例如16位。
在對本發明的上述運算裝置所具有的新的MM指令進行說明之前,將參照本發明的運算裝置的重點單元—中央處理單元(CPU)—的結構的一個例子,對前面已作描述的MM指令“PMUL”和“PADD”再次進行描述。
圖13示出具有MM指令的CPU的基本結構的一個例子。該具有MM指令的CPU的結構的例子根據了圖1所示的、不具有新MM指令的常規CPU的結構的例子,與后者不同的是ALU230、SHT240以及REG250分別被分成四個部分。
而且,在總線260和ALU230之間提供了四個16位的并行傳送路徑265,用作總線260和ALU230之間的數據傳送路徑,以替代64位的并行傳送路徑。
圖14A至C示出在圖13的運算單元中執行的MM指令“PMUL”和“PADD”。
圖14A示出將相應的16位數據分別存儲到REG250的64位寄存器A、B的四分的相應的16位字段內的情況。
圖14B示出用指令“PMUL C,A,B”,在ALU230中,將獨立地存儲在寄存器A的四個字段中的4個數據與存儲在寄存器B中的四個數據并行地相乘,并將分別由32位構成的積存儲到REG250的寄存器C中的情況。
此外,圖14C示出用指令“PADD C,A,B”將存儲在寄存器A中的四個數據與存儲在寄存器B中的四個數據并行地相加,并把分別由16位構成的和存儲到寄存器C中的情況。
然而,在圖13的運算單元中,由上述的MM指令進行的操作是以字為單位進行的,于是就額外地需要一定數目的步驟,用于執行以字段為單位的操作。鑒于上述問題,本發明的運算單元的結構進一步包括了“字內的位字段交換指令”和“字內數據間的操作指令”,這些都是新的MM指令,并適用于用較少的步驟數來執行操作。
下面將參照圖15A至E描述本發明的運算裝置的MM指令組。
圖15A示出指令“PEXC”。也就是說,“指令PEXC B,A”用于在將四分的寄存器A的最高位字段的數據和最低位字段的數據保持原樣的情況下,交換其中央部分的兩個字段的數據,并將其存儲到寄存器B中。
圖15B示出指令“PEXH”。也就是說,指令“PEXH B,A”用于彼此交換四分的寄存器A的兩個高位字段的相應數據,且彼此交換其兩個低位字段的相應數據,并將其存儲到寄存器B中。
圖15C示出指令“PROT3”。也就是說,指令“PROT3 B,A,16”用于使四分的寄存器A的最高位字段的數據保持原樣,且以16位將三個低位字段的相應數據循環移位,并將其存儲到寄存器B中。
圖15D示出指令“PHADD”,也就是說,指令“PHADD B,A”用于將四分的寄存器A的兩個高位字段的相應數據彼此相加,且將其兩個低位字段的的相應數據彼此相加,并將其存儲到寄存器B中。
圖15E示出指令“PHSUB”,也就是說,指令“PHSUB B,A”用于使四分的寄存器A的兩個高位字段的相應數據進行減法處理,且使其兩個低位字段的相應數據進行減法處理,并將其存儲到寄存器B中。
如上所述,本發明的運算裝置除具有常規MM指令以外,還具有用于在分割的位字段之間執行交換的指令,以及用于在同一個寄存器中的不同位字段之間執行操作的指令,從而提高了操作的性能。
本發明的運算裝置除具有常規MM指令外,還具有上述的新的MM指令,下面將更加實際地描述其結構。
圖16示出圖12的數據交換單元(EXC電路)310的結構的一個例子。到該EXC電路310的相應的輸入A0至A3被傳送到相應的多路復用器(MUX)311至314。而且,相應的MUX通過傳送到其的相應的兩個命令來選擇要輸出的數據。這樣,由命令C0至C7來控制EXC310的操作。
應注意的是運里雖然只描述了EXC310,該操作同樣適用于EXC電路320。
下面將描述上述EXC電路310、320的MUX311至314。這些MUX具有四個輸入和一個輸出的結構,并且其操作受相應的兩個命令的控制。
圖17示出上述MUX311至314中的MUX311。該MUX311具有四個輸入和一個輸出的結構,并且操作受兩個命令C0、C1的控制。
圖18示出發送到MUX311的兩個命令與操作之間的對應關系。也就是說,當命令C0、C1都為0時,則使輸入A0作為輸出B0。此外,當C0為0且C1為1時,使輸入A1作為B0。類似地,當C0為1且C1為0時,使輸入A2作為輸出B0。另外,當C0、C1都為1時,使輸入A3作為輸出B0。
應注意的是這里雖然描述了MUX311,該操作同樣適用于MUX312至314。也就是說,MUX312的操作受控于命令C2、C3,MUX313的操作受控于命令C4、C5,以及MUX314的操作受控于命令C6、C7。
圖19示出發送到圖16所示的EXC電路的EXC命令C0至C7與用這些命令實現的MM指令之間的對應關系。也就是說,當C0、C1、C3和C4為0,且C2、C5、C6和C7為1時,實現指令“PEXC”。
當C0、C2、C3和C7為0,且C1、C4、C5和C6為1時,實現指令“PEXH”。
當C0、C1、C4和C7為0,且C2、C3、C5和C6為1時,實現指令“PROT3”。
當C0、C2、C3和C7為0,且C1、C4、C5和C6為1時,實現指令“PHADD”。
當C0、C2、C3和C7為0,且C1、C4、C5和C6為1時,實現指令“PHSUB”。
應注意的是上述指令“PHADD”和“PHSUB”對EXC指令來說是相同的,但在ALU的命令中是不同的。
下面,將更為實際地說明有關用于實現本發明的上述運算裝置所具有的新MM指令的電路。在下面的描述中,a0至a3為分別具有16位或32位的數據寬度的輸入數據,并作為整體組成一個字。此外,b0至b3為分別具有16位或32位的數據寬度的輸出數據,并作為整體組成一個字。
圖20示出用于實現指令“PEXC”的電路。該電路的結構包括交換電路“exchange”。對輸入到該電路的四個數據a0、a1、a2、a3來說,最高位數據a0和最低位數據a3分別保持原樣作為輸出b0和b3。此外,在最高位數據和最低位數據之間的兩個數據被彼此交換,并使a1成為b2且a2成為b1進行輸出。
圖21示出用于實現指令“PEXH”的電路。該電路的結構包括兩個交換電路“exchange”,將輸入到該電路的四個數據a0、a1、a2、a3的兩個高位數據a0、a1彼此交換,并且使a0成為b1且a1成為b0進行輸出。此外,將上述輸入的四個數據的兩個低位數據a2、a3彼此交換,并且使a2成為b3且a3成為b2進行輸出。
圖22示出用于實現指令“PROT3”的電路。在該例子中,“SELECT”是一個選擇電路。使輸入到該電路的四個數據a0、a1、a2、a3的最高位數據a0保持原樣、成為b0進行輸出。此外,其他三個數據a1、a2、a3按以下情況進行輸出,例如,通過三個輸入和一個輸出的選擇電路“SELECT”使a1成為b3,使a2成為b1,且使a3成為b2。也就是說,使上述的除最高位數據a0以外的三個數據經循環后輸出。
圖23示出用于實現指令“PHADD”的電路。該電路的結構包括兩個加法電路“ADD”。將輸入到該電路的四個數據a0、a1、a2、a3的兩個高位數據a0、a1彼此相加,并使其成為b0輸出。此外,將上述輸入的四個數據的兩個低位數據a2、a3彼此交換,并使其成為b2進行輸出。
圖24示出用于實現指令“PHSUB”的電路。該電路的結構包括兩個減法電路“SUB”。將輸入到該電路的四個數據a0、a1、a2、a3的兩個高位數據a0和a1按用數據a0減去數據a1的情況進行輸出,從而使其差成為b0。此外,將該輸入的四個數據中的兩個低位數據a2和a3按用數據a2減去數據a3的情況進行輸出,從而使其差成為b2。
如上所述,本發明的運算裝置能夠在同一個字內的不同位字段之間執行交換和/或運算,下面將說明有關用本發明的運算裝置執行操作的情況。
圖25示出使用本發明的運算裝置,對3×3矩陣的行向量計算2×2的小行列式的過程。
一開始,用前面描述的指令“PEXH D,A1”,將四分的寄存器A1的兩個高位數據彼此交換,且將其兩個低位數據也這樣彼此交換,并將其存儲到寄存器D中。
然后,用指令“PMULH E,A0,D”,以16位為單位將存儲在寄存器A0中的行向量與存儲在寄存器D中的數據并行地相乘,并將結果存儲到寄存器E中。該指令“PMULH”是以字長的一半作為單位的指令,用于執行與上述的指令“PMUL”類似的操作。這樣,a01*a12被存儲到寄存器E的高32位中,并且a02*a11被存儲到其的低32位中。
然后,用指令“PSUBW G,E”執行并行減法,用存儲在寄存器E中的高位的數據減去存儲在寄存器E中的低位數據,并將結果存儲到寄存器G中。該指令“PSUBW”是以字長為單位的指令,用于執行與操作“PSUB”類似的操作。這樣,0被存儲到寄存器G的高32位中,并且a01*a12-a02*a11被存儲到低32位中。
如上所述,為了計算2×2行列式,用常規的運算裝置需要如圖7所示的9個步驟,反之,按照本發明的運算裝置,這樣的計算僅用上述三個步驟就能實現。
圖26示出用本發明的運算裝置計算兩個三維向量的外積的過程。
一開始,用指令“PROT3 B,A0,16”,使寄存器A0的最高位數據保持原樣,且使三個低位數據以16位循環移位,并將其存儲到寄存器B中。
然后,用指令“PROT3 C,A1,32”,使寄存器A1的最高位數據保持原樣,且使三個低位數據以32位循環移位,并將其存儲到寄存器C中。
然后,用指令“PMUL D,B,C”,執行存儲在寄存器B中的行向量與存儲在寄存器C中的數據的并行乘法。將這樣得到的結果存儲到寄存器D中。也就是說,0被存儲到寄存器D的最高32位中,并且a02*a11、a00*a12以及a01*a10被依次存儲到接下來的各32位中。
然后,用指令“PROT3 B,A0,32”,使寄存器A0的最高位數據保持原樣,且使三個低位數據僅以32位循環移位,并將其存儲到寄存器B中。
然后,用指令“PROT3 C,A1,16”,使寄存器A1的最高位數據保持原樣,且使三個低位數據僅以16位循環移位,并將其存儲到寄存器C中。
然后,用指令“PMUL E,B,C”,執行存儲在寄存器B中的數據與存儲在寄存器C中的數據的并行乘法。將這樣得到的結果存儲到寄存器E中。也就是說,0被存儲到寄存器E的最高32位中,并且a01*a12、a02*a10以及a00*a11被依次存儲到接下來的各32位中。
然后,用指令“PSUB F,E,D”執行并行減法,用存儲在寄存器E中的數據減去存儲在寄存器D中的數據。將這樣得到的結果存儲到寄存器F中。也就是說,0被存儲到寄存器F的最高32位中,并且a01*a12-a02*a11、a02*a10-a00*a12、a00*a11-a01*a10被存儲到接下來的各32位中。
如上所述,為了計算兩個三維向量的外積,在常規的運算裝置中需要如圖9所示的15個步驟。反之,按照本發明的運算裝置,這樣的計算僅用7個步驟就能可實現。
圖27示出用本發明的運算裝置計算兩個四維向量的內積的過程。
一開始,用指令“PMUL C,A,B”執行存儲在寄存器A中的數據與存儲在寄存器B中的數據的并行相乘,將這樣得到的結果存儲到寄存器C中。也就是說,分別由32位構成的a0*b0、a1*b1、a2*b2、a3*b3被存儲到寄存器C中。
然后,用指令“PHADD D,C”,將寄存器C的兩個高位數據彼此相加,且將它的兩個低位數據彼此相加,并將其存儲到寄存器D中。
然后,用指令“PEXC E,D”,使寄存器D的最高位數據和最低位數據保持原樣,且互相交換其中央部分的兩個數據,并將其存儲到寄存器E中。
然后,用指令“PHADD G,E”將寄存器E的兩個高位數據彼此相加,且將它的兩個低位數據彼此相加,并將其存儲到寄存器G中。這樣,a0*b0+a1*b1+a2*b2+a3*b3被存儲到寄存器G的最高32位中。
在該例子中,圖27中標有記號x的部分表示存儲的值與該操作無關。
如上所述,為計算兩個四維向量的內積,在常規運算裝置中需要如圖11所示的5個步驟。反之,按照本發明的運算裝置,這樣的計算僅用四個步驟就能實現。
圖28示出由具有上述MM指令的、本發明的運算裝置構成的圖像形成裝置的結構的一個例子。
在圖28中,CPU1是中央處理單元,它包括微處理器等,用于通過接口3和主總線9取得輸入設備4,例如輸入臺(input pad)或操縱桿等的操作信息,而本發明的運算單元就是用于該CPU1。而且,CPU1根據如此取得的操作信息,通過主總線9向圖形處理器6發送存儲在作為第一存儲器的主存儲器2中的三維圖像。
圖形處理器6用于轉換發送的三維圖像的信息,以便產生圖像數據,并在作為第二存儲器的視頻存儲器5中描繪出由在此產生的圖像數據所形成的三維圖像。在該視頻存儲器5中描繪的三維圖像數據在掃描視頻信號時被讀出。這樣,就在顯示單元(未示出)上顯示出三維圖像。
此外,與上述顯示三維圖像同時,由CPU1取出的、在操作信息中的、與顯示的三維圖像對應的聲音信息被發送到音頻處理器7中。音頻處理器7根據該發送的語音信息,顯示存儲在音頻存儲器8中的聲音數據。
這樣的圖像形成裝置用于,例如要求以高速和較高的精度顯示三維圖像的家庭游戲機。
在家庭游戲機中,使用上述的圖像形成裝置作為顯示三維圖像的一種方法,典型的有對要顯示的物體加濃淡的濃淡處理(shading)方法、和改變任何其他二維圖像的形狀以便粘貼的紋理映射。
此外,在許多情況下,作為描繪三維空間的坐標系統,采用物體坐標系(object coordinate system)描繪與三維物體自身有關的形狀或尺寸,采用世界坐標系(world coordinate system)表示三維物體在空間中的位置,以及采用屏幕坐標系(screen coordinate system)描繪顯示在屏幕上的三維物體。在其他許多情況下,用作在屏幕坐標系上描繪三維物體的三維圖像的單位的多邊形區域,即所謂的多邊形,被作為簡單的三角形區域處理。
對于上述的三角形區域(多邊形),本發明的運算裝置適用于計算頂點坐標,或執行法向量與、來自物體屬性和光源數據的光源向量的內積的計算等。
根據如上所述的運算裝置,該裝置的結構除具有常規MM指令外,還具有能夠在操作對象(要進行計算的對象)的同一個字內的多個字段之間執行操作的MM指令。因此,能夠用比現有技術更少的步驟高速地進行并行操作。
應注意的是,本發明并不限于上述的實施例,而理所應當的是,例如,寄存器的位數和/或字段的位數不限于所示出的數目。
權利要求
1.一種運算裝置,包括算術邏輯裝置,用于對參加操作的字執行算術邏輯運算,其中該字由多個用M位(M≥1)構成的字段組成;移位處理裝置,用于以預定的位數對參加操作的字執行移位操作;以及寄存器,用于存儲參加操作的字和已執行完操作的字,其中,該裝置具有在同一個參加操作的字內的多個字段之間執行并行操作的功能。
2.如權利要求1所述的運算裝置,其中,算術邏輯裝置包括多個用于以字段為單位、對參加操作的數據執行算術邏輯運算的算術邏輯單元;移位處理裝置包括用于以字段為單位、用預定的位數、對參加操作的數據執行移位操作的移位處理單元;并且寄存器包括多個用于以字段為單位、存儲參加操作的數據和已執行完操作的數據的寄存器單元。
3.如權利要求2所述的運算裝置,還包括字段交換裝置,用于在由多個字段構成的、參加操作的字內的預定的字段之間執行交換。
4.一種運算方法,用于以字段為單位、對由多個用M位(M≥1)位構成的字段所組成的、參加操作的字執行算術邏輯運算,該方法包括在同一個參加操作的字內、交換兩個或多個字段的步驟。
5.如權利要求4所述的運算方法,其中,在參加操作的字的多個字段之間執行算術邏輯運算,在該操作中,字段的交換已經完成,并將結果存儲到一個參加操作的字段內。
全文摘要
算術邏輯單元(ALU)330、移位處理單元(SHT)340以及寄存器單元(REG)350,其每一個在結構上都被分成,例如四個部分,且它們互相之間能通過64位總線(BUS)360、370、380傳送數據。輸入到ALU330的、參加處理的字內的多個字段的數據,如有必要則由在總線360、370與ALU330之間提供的數據交換單元EXC310、320進行交換。這樣,能用比現有技術更少的步驟數實現、在同一個參加操作的字內的多個字段之間操作的功能。
文檔編號G06F9/315GK1231038SQ98800698
公開日1999年10月6日 申請日期1998年4月8日 優先權日1997年4月8日
發明者岡正昭 申請人:索尼計算機娛樂公司