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