專利名稱:向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法及相應(yīng)的裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器體系結(jié)構(gòu)技術(shù)領(lǐng)域,特別涉及一種向量復(fù)數(shù)乘法運(yùn)算的指令 執(zhí)行方法及相應(yīng)的裝置。
背景技術(shù):
隨著處理器技術(shù)的不斷發(fā)展,其應(yīng)用的領(lǐng)域也不斷拓展。為了滿足高性能計(jì)算及 數(shù)字信號(hào)處理等高端應(yīng)用的需求,結(jié)合通用CPU(中央處理器)和DSP(數(shù)字信號(hào)處理器) 融合的技術(shù)趨勢(shì),越來(lái)越多的通用處理器被用在快速傅里葉變換(FFT)、濾波(FIR)等數(shù)據(jù) 密集計(jì)算的專用數(shù)字信號(hào)處理等領(lǐng)域。數(shù)據(jù)密集計(jì)算領(lǐng)域?qū)π酒臄?shù)據(jù)處理能力提出的要 求越來(lái)越高,各種通用處理器都實(shí)現(xiàn)了 SIMD (Single InstructionMultiple Data,單指令 流多數(shù)據(jù)流)向量指令集。向量復(fù)數(shù)乘法運(yùn)算是許多數(shù)字信號(hào)處理算法的核心計(jì)算單位, 因此提高向量復(fù)數(shù)乘法的效率對(duì)通用處理器用在專用領(lǐng)域和數(shù)字信號(hào)處理領(lǐng)域的效率提 升都起著至關(guān)重要的作用。目前復(fù)數(shù)乘法運(yùn)算普遍采用乘法器加加法器來(lái)實(shí)現(xiàn),例如參見(jiàn)中國(guó)專利申請(qǐng) 200610166578“一種浮點(diǎn)復(fù)數(shù)乘法”。這種實(shí)現(xiàn)方法的缺點(diǎn)在于1、流水線級(jí)數(shù)長(zhǎng),流水線啟 動(dòng)時(shí)間較長(zhǎng),易導(dǎo)致指令窗口不夠和各控制隊(duì)列的堵塞;2、乘法和加法是分別的運(yùn)算單元, 增加了處理器的面積,提高了處理器的硬件實(shí)現(xiàn)成本;以及3、為了增加向量復(fù)數(shù)乘法運(yùn)算 的峰值,需要并行地增加相應(yīng)的運(yùn)算功能部件,從而使得在指令向量化后的實(shí)現(xiàn)代價(jià)增加 更加明顯。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明目的在于克服現(xiàn)有的向量復(fù)數(shù)乘法運(yùn)算流水線長(zhǎng)、實(shí)現(xiàn)代價(jià)大 的不足,提供一種短流水、效率高、硬件開(kāi)銷小、易于實(shí)現(xiàn)的向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行 方法及相應(yīng)的裝置。為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供了 一種向量復(fù)數(shù)乘法運(yùn)算(a+b j) * (c+dj) 的指令執(zhí)行方法,其設(shè)計(jì)相互配對(duì)的兩條指令來(lái)共同完成操作,其中第一條指令做向量 復(fù)數(shù)乘法操作,其操作數(shù)包括所述(a+bj)和所述(c+dj),用于計(jì)算出所述向量復(fù)數(shù)乘法 運(yùn)算(a+bj)*(c+dj)的部分結(jié)果;第二條指令做向量復(fù)數(shù)乘加操作,其操作數(shù)包括所述 (a+bj)、所述(c+dj)以及所述第一條指令的執(zhí)行結(jié)果,用于計(jì)算出所述向量復(fù)數(shù)乘法運(yùn)算 (a+bj)*(c+dj)的剩余部分結(jié)果,并將所述剩余部分結(jié)果與所述部分結(jié)果相加,以獲得所述 向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的最終結(jié)果。對(duì)于上述向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,優(yōu)選地,通過(guò)執(zhí)行所述第一條指令 計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果為ac+adj,通過(guò)執(zhí)行所述第 二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的剩余部分結(jié)果為-bd+bcj ;或 者,通過(guò)執(zhí)行所述第一條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果 為-bd+bcj,通過(guò)執(zhí)行所述第二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的剩余部分結(jié)果為ac+adj。對(duì)于上述向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,優(yōu)選地,通過(guò)執(zhí)行所述第一條指令 計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果為ac+bcj,通過(guò)執(zhí)行所述第 二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的剩余部分結(jié)果為-bd+adj ;或 者,通過(guò)執(zhí)行所述第一條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果 為-bd+adj,通過(guò)執(zhí)行所述第二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的 剩余部分結(jié)果為ac+bcj。對(duì)于上述向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,優(yōu)選地,所述第一條指令和所述第 二條指令復(fù)用向量乘加功能部件。對(duì)于上述向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,進(jìn)一步優(yōu)選地,當(dāng)所述向量乘加功 能部件為256位寬時(shí),所述向量乘加功能部件并行執(zhí)行八個(gè)單精度浮點(diǎn)復(fù)數(shù)的四次向量乘 法/乘加運(yùn)算或者四個(gè)雙精度浮點(diǎn)復(fù)數(shù)的兩次向量乘法/乘加運(yùn)算。對(duì)于上述向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,更進(jìn)一步優(yōu)選地,每發(fā)射一條操作 數(shù)為256位的指令到所述向量乘加功能部件,所述向量乘加功能部件的操作如下首先, 以32位為單位,通過(guò)多路選擇的方式生成進(jìn)入相應(yīng)的64位乘加功能模塊的操作數(shù);然后, 根據(jù)所述指令給出與如下至少之一有關(guān)的控制信號(hào)是做向量乘法操作還是做向量乘加操 作、乘加操作的乘法結(jié)果是否取負(fù)、是浮點(diǎn)單精度運(yùn)算還是浮點(diǎn)雙精度運(yùn)算;以及,各所述 乘加功能模塊根據(jù)所述控制信號(hào)對(duì)所述操作數(shù)做相應(yīng)的操作,并將各所述乘加模塊的運(yùn)算 結(jié)果拼成256位輸出。另一方面,本發(fā)明還提供了一種向量乘加功能部件,用于執(zhí)行向量復(fù)數(shù)乘法操作 或向量復(fù)數(shù)乘加操作,其包括操作數(shù)選擇模塊,用于在接收到所發(fā)射過(guò)來(lái)的向量乘加/向 量乘法指令之后,以32位為單位通過(guò)多路選擇的方式生成進(jìn)入下述相應(yīng)的64位乘加功能 模塊的操作數(shù);控制模塊,用于根據(jù)所述指令的指令碼,生成與如下至少之一有關(guān)的控制信 號(hào)是做向量乘法操作還是做向量乘加操作、乘加操作的乘法結(jié)果是否取負(fù)、是浮點(diǎn)單精度 運(yùn)算還是浮點(diǎn)雙精度運(yùn)算;以及,乘加功能模塊,用于根據(jù)所述控制信號(hào)對(duì)輸入其中的操作 數(shù)做相應(yīng)的操作。對(duì)于上述向量乘加功能部件,優(yōu)選地,當(dāng)所述向量乘加功能部件為256位寬時(shí),所 述向量乘加功能部件并行執(zhí)行八個(gè)單精度浮點(diǎn)復(fù)數(shù)的四次向量乘法/乘加運(yùn)算或者四個(gè) 雙精度浮點(diǎn)復(fù)數(shù)的兩次向量乘法/乘加運(yùn)算。通過(guò)設(shè)計(jì)兩條指令配對(duì)來(lái)完成操作,本發(fā)明使得向量復(fù)數(shù)乘法運(yùn)算的流水長(zhǎng)度為 乘加運(yùn)算的流水級(jí)。并且,通過(guò)使兩條指令復(fù)用向量乘加功能部件,本發(fā)明能夠避免芯片復(fù) 雜度的擴(kuò)大,從而大大節(jié)省了芯片的面積和成本。
圖1是本發(fā)明的向量單精度復(fù)數(shù)乘法指令VCPMULPS的指令編碼格式圖;圖2是本發(fā)明的向量單精度復(fù)數(shù)乘法指令VCPMULPS的操作圖;圖3是本發(fā)明的向量單精度復(fù)數(shù)乘加指令VCPMULADDPS的指令編碼格式圖;圖4是本發(fā)明的向量單精度復(fù)數(shù)乘加指令VCPMULADDPS的操作圖;圖5是本發(fā)明的向量雙精度復(fù)數(shù)乘法指令VCPMULPD的指令編碼格式5
圖6是本發(fā)明的向量雙精度復(fù)數(shù)乘法指令VCPMULPD的操作圖;圖7是本發(fā)明的向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD的指令編碼格式圖;圖8是本發(fā)明的向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD的操作圖;圖9是本發(fā)明的向量乘加功能部件框圖。
具體實(shí)施例方式如上所述,本發(fā)明旨在降低向量復(fù)數(shù)乘法運(yùn)算的流水長(zhǎng)度及硬件實(shí)現(xiàn)成本,且其 發(fā)明思路主要是利用兩條指令配對(duì)來(lái)完成向量復(fù)數(shù)乘法運(yùn)算操作,其中,第一條指令做向 量復(fù)數(shù)乘法操作,第二條指令做向量復(fù)數(shù)乘加操作。并且,這兩條指令復(fù)用向量乘加功能部 件,以及兩個(gè)浮點(diǎn)單精度和一個(gè)浮點(diǎn)雙精度復(fù)用一個(gè)向量乘加功能部件。參考圖9所示本發(fā)明的向量乘加功能部件的框圖,以操作數(shù)為256位為例詳細(xì)解 釋向量乘加功能部件的操作如下每周期發(fā)射一條向量乘法或向量乘加指令到向量乘加功 能部件900。乘加功能模塊920由四個(gè)64位乘加子模塊921 924構(gòu)成,通過(guò)操作數(shù)的選 擇來(lái)實(shí)現(xiàn)向量復(fù)數(shù)乘。也即,經(jīng)過(guò)操作數(shù)選擇模塊910以多路選擇器的形式進(jìn)行選擇,將選 擇好的每個(gè)64位的源操作數(shù)送到相應(yīng)的乘加子功能模塊921 924中去??刂颇K930 根據(jù)指令碼給出與例如是做乘法操作還是乘加操作、乘加操作的乘法結(jié)果是否取負(fù)、是單 精度運(yùn)算還是雙精度運(yùn)算等有關(guān)的控制信號(hào)。乘加子功能模塊921 924根據(jù)控制信號(hào)對(duì) 操作數(shù)做相應(yīng)的操作,并且各乘加子功能模塊921 924的運(yùn)算結(jié)果拼成256位輸出。本發(fā)明的上述及其它特征、優(yōu)點(diǎn)和有益技術(shù)效果,將通過(guò)如下參照附圖進(jìn)行的優(yōu) 選實(shí)施例介紹得到更充分的闡述。一方面,針對(duì)浮點(diǎn)單精度向量復(fù)數(shù)乘法運(yùn)算,本發(fā)明設(shè)計(jì)由向量單精度復(fù)數(shù)乘法 指令VCPMULPS和向量單精度復(fù)數(shù)乘加指令VCPMULADDPS配對(duì)來(lái)共同完成。其中向量單精度復(fù)數(shù)乘法指令VCPMULPS vd, vs, vt的指令編碼格式如圖1所示 VCPMULPS為指令名,vd為目的向量寄存器,vs和vt為源向量寄存器。另外,向量單精度復(fù)數(shù)乘法指令VCPMULPS的指令操作如圖2所示。其中,以256位 浮點(diǎn)向量寄存器為例具體而言,由于每個(gè)復(fù)數(shù)包括實(shí)部和虛部?jī)刹糠?,浮點(diǎn)單精度復(fù)數(shù)實(shí) 部和虛部都是32位,因此,256位向量寄存器包括4個(gè)浮點(diǎn)單精度復(fù)數(shù)。也即,源向量寄存 器vs和vt分別存放了四個(gè)單精度浮點(diǎn)格式的復(fù)數(shù),作為四次復(fù)數(shù)乘法運(yùn)算輸入的8個(gè)點(diǎn)。 作為復(fù)數(shù)乘法運(yùn)算的第一步,向量單精度復(fù)數(shù)乘法指令VCPMULPS執(zhí)行向量乘法運(yùn)算,并將 運(yùn)算結(jié)果作為復(fù)數(shù)乘法運(yùn)算的部分和寄存在256位的目的寄存器vd中。并且,寄存在目的 寄存器vd中的指令VCPMULPS的運(yùn)算結(jié)果將作為向量單精度復(fù)數(shù)乘加指令VCPMULADDPS的 源操作數(shù)之一,以參與作為復(fù)數(shù)乘法運(yùn)算的第二步的向量乘加運(yùn)算,從而得到復(fù)數(shù)乘法運(yùn) 算的最終結(jié)果。向量單精度復(fù)數(shù)乘加指令VCPMULADDPS vd, vs, vt, vr的指令編碼格式如圖3所 示VCPMULADDPS為指令名,vd為目的向量寄存器,vs、vt和vr為源向量寄存器。其中,源 向量寄存器vr存放了與之配對(duì)的向量單精度復(fù)數(shù)乘法指令VCPMULPS的運(yùn)算結(jié)果;源向量 寄存器vs、vt存放的操作數(shù)內(nèi)容分別和向量單精度復(fù)數(shù)乘法指令VCPMULPS中寄存器vs、 vt的操作數(shù)內(nèi)容相同。另外,向量單精度復(fù)數(shù)乘加指令VCPMULADDPS的指令操作如圖4所示。其中,四次復(fù)數(shù)乘法運(yùn)算的輸入取自于向量單精度復(fù)數(shù)乘加指令VCPMULPS中256位向量寄存器vs和 vt表示的8個(gè)復(fù)數(shù)點(diǎn)。作為復(fù)數(shù)乘法運(yùn)算的第二步,向量單精度復(fù)數(shù)乘加指令VCPMULADDPS 執(zhí)行向量的乘加運(yùn)算,源操作數(shù)之一 vr取自于第一條指令的執(zhí)行結(jié)果,并將運(yùn)算結(jié)果作為 復(fù)數(shù)乘法運(yùn)算的最終結(jié)果寄存在256位目的寄存器vd中。 綜上,單精度向量復(fù)數(shù)乘法運(yùn)算由向量單精度復(fù)數(shù)乘法指令VCPMULPS和向量單 精度復(fù)數(shù)乘法指令VCPMULADDPS配對(duì)共同完成,并以256位向量寄存器為例,具體列出用以 完成八個(gè)單精度浮點(diǎn)數(shù)的四次復(fù)數(shù)乘法運(yùn)算的操作如下VCPMULPS
vd
-vs
*vt
;
vd
-vs
*vt
;
vd
—vs[127096]*vt
;
vd[127096]—vs[127096]*vt[127096];
vd[159128]-vs[191160]*vt[159128];
vd[191160]-vs[191160]*vt[191160];
vd[223192]-vs[255224]*vt[223192];
vd[255224]-vs[255224]*vt[255224];
VCPMULADDPS
vd
-vr
+vs
*vt
vd
-vr
-vs
*vt
vd
—vr
+vs
*vt[127096]
vd[127096]—vr[127096]-vs
*vt
vd[159128]-vr [159128]+vs[159128]*vt[191160]
vd[191160]-vr[191160]-vs[159128]*vt[159128]
vd[223192]-vr[223192]+vs[223192]*vt[255224]
vd[255224]-vr [255224]-vs [223192]*vt[223192]
下面列舉一個(gè)具體的應(yīng)用示例,以說(shuō)明如何上述經(jīng)s
VCPMULPS和向量單精度乘加指令VCPMULADDPS來(lái)共同完成單精度向量復(fù)數(shù)乘法運(yùn)算的實(shí) 現(xiàn)過(guò)程。假定要進(jìn)行四次向量單精度復(fù)數(shù)乘法運(yùn)算(xl+x0i)*(yl+y0i)、 (X3+X2i)*(y3+y2i)、(x5+x4i)*(y5+y4i)以及(x7+x6i)*(y7+y6i),并假定相應(yīng)的運(yùn)算結(jié) 果為(zl+zOi)、(z3+z2i)、(z5+z4i)、(z7+z6i)。第一條指令,即向量單精度復(fù)數(shù)乘法指令VCPMULPS vd, vs, vt的指令操作圖如圖 2 所示,其操作結(jié)果為 w0 = xl*yO、wl = xl*yl> w2 = x3*y2、w3 = x3*y3、w4 = x5*y4、w5 =x5*y4> w6 = x7*y6> w7 = x7*y7。第二條指令,即向量單精度復(fù)數(shù)乘加指令VCPMULADDPS vd, vs, vt, vr的指令 操作圖如圖4所示,其中vr源操作數(shù)來(lái)自第一條指令的操作結(jié)果,其操作結(jié)果為zO = xOyl+xlyO、zl = xlyl_x0y0、z2 = x2y3+x3y2、z3 = x3y3_x2y2、z4 = x4y5+x5y4、z5 = x5y5~x4y4> z6 = x6y7+x7y6> z7 = x7y7_x6y6。實(shí)現(xiàn)過(guò)程如下連續(xù)發(fā)射配對(duì)的兩條指令,即向量單精度復(fù)數(shù)乘法指令和向量單精度復(fù)數(shù)乘加指令,到向量乘加功能部件。通過(guò)操作碼判斷第一條指令為指令VCPMULPS w, x, y。操作數(shù)選擇邏輯將最低一個(gè)乘加部件的操作數(shù)opaO、opbO、opcO置為{xl,xl}、 {yl,y0}和64’ b0,控制位置為做乘法操作,單精度。{yl,y0}表示拼接操作,即高32位為 yl、低32位為y0,64,b0表示64個(gè)0。次低一個(gè)乘加部件的操作數(shù)opal、opbl、opcl置為{x3, x3}、{y3,y2}和64,b0, 控制位置為做乘法操作,單精度。次高一個(gè)乘加部件的操作數(shù)opa2、opb2、opc2置為{x5, x5}、{y5,y4}和64,b0, 控制位置為做乘法操作,單精度。最高一個(gè)乘加部件的操作數(shù)opa2、opb2、opc2置為{x7, x7}、{y7,y6}和64,b0, 控制位置為做乘法操作,單精度。四個(gè)乘加部件各執(zhí)行一個(gè)雙精度操作0pa*0pb+0pC,或者兩個(gè)單精度操作 opa[63 32]*opb [63 32] +opc [63 32]和 opa[31:0]*opb [31:0] +opc [31:0]。因?yàn)椴僮鲾?shù) 為單精度,因此每個(gè)乘加部件執(zhí)行兩個(gè)乘加。輸出結(jié)果w為{x7*y7,x7*y6,x5*y5,x5*y4, x3*y3, x3*y2, xl氺yl, xl*y0}。通過(guò)操作碼判斷第二條指令為指令VCPMULADDPS z,x,y, w。操作數(shù)選擇邏輯將最低一個(gè)乘加部件的操作數(shù)opaO、opbO、opcO置為{x0,x0}、 {y0,yl}和{xl*yl,xl*y0},控制位置為單精度,第一個(gè)單精度做乘加、乘法取負(fù),第二個(gè)單 精度做乘加。次低一個(gè)乘加部件的操作數(shù)opal、opbl、opcl 置為{x2, x2}、{y2,y3}、{x3*y3, x3*y2},控制位置為單精度,第一個(gè)單精度做乘加、乘法取負(fù),第二個(gè)單精度做乘加。次高一個(gè)乘加部件的操作數(shù)opa2、opb2、opc2 置為{x4, x4}、{y4,y5}和{x5*y5, x5*y4},控制位置為單精度,第一個(gè)單精度做乘加、乘法取負(fù),第二個(gè)單精度做乘加。最高一個(gè)乘加部件的操作數(shù)opa2、opb2、opc2 置為{x6, x6}、{y7,y6}和{x7*y7, x7*y6},控制位置為單精度,第一個(gè)單精度做乘加、乘法取負(fù),第二個(gè)單精度做乘加。四個(gè)乘加部件各執(zhí)行一個(gè)雙精度操作opa*0pb+0pC,如果是乘加、乘法取負(fù)則把 opa*opb取負(fù),即結(jié)果為-opa*opb+opc ;或者兩個(gè)單精度操作opa[63:32]*opb[63:32]+op c [63 32],如果是乘加、乘法取負(fù)則把opa [63 32] *opb [63 32]取負(fù),S卩結(jié)果為-opa [63 32 ]*opb [63 32] +opc [63 32],和 opa [31:0] *opb [31:0] +opc [31:0],如果是乘加、乘法取負(fù)則 把 opa[31:0]*opb[31:0]取負(fù),即結(jié)果為-opa[31:0]*opb[31:0] +opc[31:0]。因?yàn)椴僮鲾?shù)為單精度,因此每個(gè)乘加部件執(zhí)行兩個(gè)乘加。輸出結(jié)果z為 {x7y7-x6y6, x6y7+x7y6, x5y5-x4y4, x4y5+x5y4, x3y3-x2y2, x2y3+x3y2, xlyl-xOyO, xOyl+xlyO}。由此可見(jiàn),通過(guò)設(shè)計(jì)由向量單精度復(fù)數(shù)乘法指令和向量單精度復(fù)數(shù)乘加指令配對(duì) 完成單精度向量復(fù)數(shù)乘法運(yùn)算,能夠有效降低向量復(fù)數(shù)乘法運(yùn)算的流水長(zhǎng)度;并通過(guò)使向 量單精度復(fù)數(shù)乘法指令和向量單精度復(fù)數(shù)乘加指令使用相同的向量乘加部件,即向量單精 度復(fù)數(shù)乘法指令和向量單精度復(fù)數(shù)乘加指令復(fù)用向量乘加部件,能夠有效減小芯片的面積 以及處理器的硬件實(shí)現(xiàn)成本。另一方面,針對(duì)浮點(diǎn)雙精度向量復(fù)數(shù)乘法運(yùn)算,本發(fā)明設(shè)計(jì)由向量雙精度復(fù)數(shù)乘法指令VCPMULPD和向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD配對(duì)來(lái)共同完成。其中向量雙精度復(fù)數(shù)乘法指令VCPMULPD vd, vs, vt的指令編碼格式如圖5所示 VCPMULPD為指令名,vd為目的向量寄存器,vs和vt為源向量寄存器。另外,向量雙精度復(fù)數(shù)乘法指令VCPMULPS的指令操作如圖6所示。其中,以256位 浮點(diǎn)向量寄存器為例具體而言,由于每個(gè)復(fù)數(shù)包括實(shí)部和虛部?jī)刹糠郑↑c(diǎn)雙精度復(fù)數(shù)實(shí) 部和虛部都是64位,因此,256位向量寄存器包括2個(gè)浮點(diǎn)雙精度復(fù)數(shù)。也即,源向量寄存 器vs和vt分別存放了兩個(gè)雙精度浮點(diǎn)格式的復(fù)數(shù),作為兩次復(fù)數(shù)乘法運(yùn)算輸入的4個(gè)點(diǎn)。 作為復(fù)數(shù)乘法運(yùn)算的第一步,向量雙精度復(fù)數(shù)乘法指令VCPMULPD執(zhí)行向量的乘法運(yùn)算,并 將運(yùn)算結(jié)果作為復(fù)數(shù)乘法運(yùn)算的部分和寄存在256位的目的寄存器vd中。并且,寄存在目 的寄存器vd中的指令VCPMULPD的運(yùn)算結(jié)果將作為向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD 的源操作數(shù)之一,以參與作為復(fù)數(shù)乘法運(yùn)算的第二步的向量乘加運(yùn)算,從而得到復(fù)數(shù)乘法 運(yùn)算的最終結(jié)果。向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD vd, vs, vt, vr的指令編碼格式如圖7所 示VCPMULADDPS為指令名,vd為目的向量寄存器,vs、vt和vr為源向量寄存器。其中,源 向量寄存器vr存放了與之配對(duì)的向量雙精度復(fù)數(shù)乘法指令VCPMULPD的運(yùn)算結(jié)果;源向量 寄存器vs、vt存放的操作數(shù)內(nèi)容分別和向量雙精度復(fù)數(shù)乘法指令VCPMULPS中寄存器vs、 vt的操作數(shù)內(nèi)容相同。另外,向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD的指令操作如圖8所示。其中,兩次 復(fù)數(shù)乘法運(yùn)算的輸入取自于向量雙精度復(fù)數(shù)乘加指令VCPMULPD中256位向量寄存器vs和 vt表示的4個(gè)復(fù)數(shù)點(diǎn)。作為復(fù)數(shù)乘法運(yùn)算的第二步,向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD 執(zhí)行向量的乘加運(yùn)算,源操作數(shù)之一 vr取自于第一步的運(yùn)算結(jié)果,并將運(yùn)算結(jié)果作為復(fù)數(shù) 乘法運(yùn)算的最終結(jié)果寄存在256位目的寄存器vd中。綜上,雙精度向量復(fù)數(shù)乘法運(yùn)算由向量雙精度復(fù)數(shù)乘法指令VCPMULPD和向量雙 精度復(fù)數(shù)乘法指令VCPMULADDPD配對(duì)共同完成,并以256位向量寄存器為例,具體列出用以 完成四個(gè)雙精度浮點(diǎn)數(shù)的兩次復(fù)數(shù)乘法運(yùn)算的操作如下VCPMULPD:vd
— vs [127064]*vt
;vd[127:064] — vs[127064]*vt[127064];vd[191:128] — vs[255192]*vt[191128];vd[255:192] — vs[255192]*vt[255192];VCPMULADDPD:vd
— vr
+vs
*vt[127064];vd[127:064] — vr[127064]-vs
*vt
;vd[191:128] — vr[191128]+vs[191128]*vt[255192];vd[255:192] — vr[255192]-vs[191128]*vt[191128];下面列舉一個(gè)具體的應(yīng)用示例,以說(shuō)明如何上述經(jīng)由向量雙精度乘法指令 VCPMULPD和向量雙精度乘加指令VCPMULADDPD來(lái)共同完成雙精度向量復(fù)數(shù)乘法運(yùn)算的實(shí) 現(xiàn)過(guò)程。假定要進(jìn)行兩次向量雙精度復(fù)數(shù)乘法運(yùn)算(xl+x0i)*(yl+y0i)和(X3+X2i)*(y3+y2i),并假定操作結(jié)果為(zl+zOi)、(z3+z2i)。第一條指令,即向量雙精度復(fù)數(shù)乘法指令VCPMULPD vd, vs, vt的指令操作圖如圖 6 所示,其操作結(jié)果為 w0 = xl*yO、wl = xl*yl、w2 = x3*y2、w3 = x3*y3。第二條指令,即向量雙精度復(fù)數(shù)乘加指令VCPMULADDPD vd, vs, vt, vr的指令 操作圖如圖8所示,其中vr源操作數(shù)來(lái)自第一條指令的操作結(jié)果,其操作結(jié)果為zO = x0氺yl+xl氺y0、zl = xl氺yl—x0氺y0、z2 = x2*y3+x3*y2> z3 = x3氺y3—x2氺y2。實(shí)現(xiàn)過(guò)程如下連續(xù)發(fā)射配對(duì)的兩條指令,即向量雙精度復(fù)數(shù)乘法指令和向量雙 精度復(fù)數(shù)乘加指令,到向量乘加功能部件。通過(guò)操作碼判斷第一條指令為指令VCPMULPD w, x, y。操作數(shù)選擇邏輯將最低一個(gè)乘加部件的操作數(shù)opaO、opbO、opcO置為xl、y0和 64’ b0,控制位置為做乘法操作,雙精度??刂莆恢脼樽龀朔ú僮?,雙精度。次低一個(gè)乘加部件的操作數(shù)opal、opbl、opcl置為xl、yl和64’ b0,控制位置為 做乘法操作,雙精度。次高一個(gè)乘加部件的操作數(shù)opa2、opb2、opc2置為x3、y2和64’ b0,控制位置為
做乘法操作,雙精度。最高一個(gè)乘加部件的操作數(shù)opa2、opb2、opc2置為x3、y3和64’ b0,控制位置為
做乘法操作,雙精度。四個(gè)乘加部件各執(zhí)行一個(gè)雙精度操作0pa*0pb+0pc,或者兩個(gè)單精度操作 opa[63 32]*opb [63 32] +opc [63 32]和 opa[31 0]*opb [31 0]+opc [31 0]。因?yàn)椴僮鲾?shù)為 雙精度,因此每個(gè)乘加部件執(zhí)行一個(gè)乘加。輸出結(jié)果w為{x3*y3,x3*y2,xl*yl,xl*y0}。通過(guò)操作碼判斷第二條指令為指令VCPMULADDPD z, x, y, w。操作數(shù)選擇邏輯將最低一個(gè)乘加部件的操作數(shù)opaO、opbO、opcO置為x0、yl和 xl*y0,控制位置為雙精度,做乘加,結(jié)果為X0*yl+Xl*y0。次低一個(gè)乘加部件的操作數(shù)opal、opbl、opCl置為x0、y0、xl*yl,控制位置為雙精 度,做乘加、乘法取負(fù),結(jié)果為xl*yl-x0*y0。次高一個(gè)乘加部件的操作數(shù)0pa2、0pb2、0pC2置為X2、y3和x3*y2,控制位置為雙 精度,做乘加,結(jié)果為x2*y3+x3*y2。最高一個(gè)乘加部件的操作數(shù)0pa2、0pb2、0pC2置為X2、y2和x3*y3,控制位置為雙 精度,做乘加、乘法取負(fù),結(jié)果為x3*y3-x2*y2。輸出結(jié)果z 為輸出結(jié)果 z 為{x3y3-x2y2, x2y3+x3y2, xlyl-xOyO,xOyl+xlyO}。由此可見(jiàn),通過(guò)設(shè)計(jì)由向量雙精度復(fù)數(shù)乘法指令和向量雙精度復(fù)數(shù)乘加指令配對(duì) 完成雙精度向量復(fù)數(shù)乘法運(yùn)算,能夠有效降低向量復(fù)數(shù)乘法運(yùn)算的流水長(zhǎng)度;并通過(guò)使向 量雙精度復(fù)數(shù)乘法指令和向量雙精度復(fù)數(shù)乘加指令使用相同的向量乘加部件,即向量雙精 度復(fù)數(shù)乘法指令和向量雙精度復(fù)數(shù)乘加指令復(fù)用向量乘加部件,能夠有效減小芯片的面積 以及處理器的硬件實(shí)現(xiàn)成本。需要聲明的是,上述發(fā)明內(nèi)容及具體實(shí)施方式
僅旨在證明本發(fā)明所提供技術(shù)方案 的實(shí)際應(yīng)用,不應(yīng)解釋為對(duì)本發(fā)明保護(hù)范圍的限定。本領(lǐng)域技術(shù)人員在本發(fā)明的精神和原 理內(nèi),當(dāng)可作各種修改、等同替換、或改進(jìn)。本發(fā)明的保護(hù)范圍以所附權(quán)利要求書(shū)為準(zhǔn)。
權(quán)利要求
一種向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的指令執(zhí)行方法,其特征在于,設(shè)計(jì)相互配對(duì)的兩條指令來(lái)共同完成操作,其中第一條指令做向量復(fù)數(shù)乘法操作,其操作數(shù)包括所述(a+bj)和所述(c+dj),用于計(jì)算出所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果;第二條指令做向量復(fù)數(shù)乘加操作,其操作數(shù)包括所述(a+bj)、所述(c+dj)以及所述第一條指令的執(zhí)行結(jié)果,用于計(jì)算出所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的剩余部分結(jié)果,并將所述剩余部分結(jié)果與所述部分結(jié)果相加,以獲得所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的最終結(jié)果。
2.根據(jù)權(quán)利要求1所述的向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,其特征在于,通過(guò)執(zhí)行 所述第一條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果為ac+adj,通 過(guò)執(zhí)行所述第二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的剩余部分結(jié)果 為-bd+bcj ;或者,通過(guò)執(zhí)行所述第一條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié) 果為-bd+bcj,通過(guò)執(zhí)行所述第二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj) 的剩余部分結(jié)果為ac+adj。
3.根據(jù)權(quán)利要求1所述的向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,其特征在于,通過(guò)執(zhí)行 所述第一條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果為ac+bcj,通 過(guò)執(zhí)行所述第二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的剩余部分結(jié)果 為-bd+adj ;或者通過(guò)執(zhí)行所述第一條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié) 果為-bd+adj,通過(guò)執(zhí)行所述第二條指令計(jì)算出的所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj) 的剩余部分結(jié)果為ac+bcj。
4.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,其特征在 于,所述第一條指令和所述第二條指令復(fù)用向量乘加功能部件。
5.根據(jù)權(quán)利要求4所述的向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,其特征在于,當(dāng)所述向 量乘加功能部件為256位寬時(shí),所述向量乘加功能部件并行執(zhí)行八個(gè)單精度浮點(diǎn)復(fù)數(shù)的四 次向量乘法/乘加運(yùn)算或者四個(gè)雙精度浮點(diǎn)復(fù)數(shù)的兩次向量乘法/乘加運(yùn)算。
6.根據(jù)權(quán)利要求5所述的向量復(fù)數(shù)乘法運(yùn)算的指令執(zhí)行方法,其特征在于,每發(fā)射一 條操作數(shù)為256位的指令到所述向量乘加功能部件首先,以32位為單位,通過(guò)多路選擇的方式生成進(jìn)入相應(yīng)的64位乘加功能模塊的操作數(shù);然后,根據(jù)所述指令給出與如下至少之一有關(guān)的控制信號(hào)是做向量乘法操作還是做 向量乘加操作、乘加操作的乘法結(jié)果是否取負(fù)、是浮點(diǎn)單精度運(yùn)算還是浮點(diǎn)雙精度運(yùn)算;以 及各所述乘加功能模塊根據(jù)所述控制信號(hào)對(duì)所述操作數(shù)做相應(yīng)的操作,并將各所述乘加 模塊的運(yùn)算結(jié)果拼成256位輸出。
7.一種向量乘加功能部件,用于執(zhí)行向量復(fù)數(shù)乘法操作或向量復(fù)數(shù)乘加操作,其特征 在于,包括操作數(shù)選擇模塊,用于在接收到所發(fā)射過(guò)來(lái)的向量乘加/向量乘法指令之后,以32位為單位通過(guò)多路選擇的方式生成進(jìn)入下述相應(yīng)的64位乘加功能模塊的操作數(shù);控制模塊,用于根據(jù)所述指令的指令碼,生成與如下至少之一有關(guān)的控制信號(hào)是做向 量乘法操作還是做向量乘加操作、乘加操作的乘法結(jié)果是否取負(fù)、是浮點(diǎn)單精度運(yùn)算還是 浮點(diǎn)雙精度運(yùn)算;以及乘加功能模塊,用于根據(jù)所述控制信號(hào)對(duì)輸入其中的操作數(shù)做相應(yīng)的操作。
8.根據(jù)權(quán)利要求7所述的向量乘加功能部件,其特征在于,當(dāng)所述向量乘加功能部件 為256位寬時(shí),所述向量乘加功能部件并行執(zhí)行八個(gè)單精度浮點(diǎn)復(fù)數(shù)的四次向量乘法/乘 加運(yùn)算或者四個(gè)雙精度浮點(diǎn)復(fù)數(shù)的兩次向量乘法/乘加運(yùn)算。
全文摘要
本發(fā)明涉及處理器中向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的指令執(zhí)行方法及相應(yīng)的裝置,其特征在于,設(shè)計(jì)兩條指令配對(duì)完成所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj),其中第一條指令做向量乘法,其操作數(shù)包括所述(a+bj)和所述(c+dj),用于計(jì)算出所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的部分結(jié)果;第二條指令做向量乘加,其操作數(shù)包括所述(a+bj)、所述(c+dj)以及所述第一條指令的執(zhí)行結(jié)果,用于計(jì)算出所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的剩余部分結(jié)果,并將所述剩余部分結(jié)果與所述部分結(jié)果相加,以獲得所述向量復(fù)數(shù)乘法運(yùn)算(a+bj)*(c+dj)的最終結(jié)果。通過(guò)設(shè)計(jì)由兩條指令配對(duì)來(lái)完成操作,本發(fā)明使得向量復(fù)數(shù)乘法運(yùn)算的流水長(zhǎng)度為乘加運(yùn)算的流水級(jí)。另外,通過(guò)使兩條指令復(fù)用向量乘加功能部件,本發(fā)明能夠大大節(jié)省芯片的面積和成本。
文檔編號(hào)G06F7/57GK101825998SQ20101010018
公開(kāi)日2010年9月8日 申請(qǐng)日期2010年1月22日 優(yōu)先權(quán)日2010年1月22日
發(fā)明者劉宏偉, 張曉春, 郇丹丹 申請(qǐng)人:北京龍芯中科技術(shù)服務(wù)中心有限公司