CN101825998B - 向量复数乘法运算的处理方法及相应的装置 - Google Patents
向量复数乘法运算的处理方法及相应的装置 Download PDFInfo
- Publication number
- CN101825998B CN101825998B CN2010101001855A CN201010100185A CN101825998B CN 101825998 B CN101825998 B CN 101825998B CN 2010101001855 A CN2010101001855 A CN 2010101001855A CN 201010100185 A CN201010100185 A CN 201010100185A CN 101825998 B CN101825998 B CN 101825998B
- Authority
- CN
- China
- Prior art keywords
- vector
- complex multiplication
- instruction
- add
- multiplication operation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本发明涉及处理器中向量复数乘法运算(a+bj)*(c+dj)的指令执行方法及相应的装置,其特征在于,设计两条指令配对完成所述向量复数乘法运算(a+bj)*(c+dj),其中:第一条指令做向量乘法,其操作数包括所述(a+bj)和所述(c+dj),用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的部分结果;第二条指令做向量乘加,其操作数包括所述(a+bj)、所述(c+dj)以及所述第一条指令的执行结果,用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果,并将所述剩余部分结果与所述部分结果相加,以获得所述向量复数乘法运算(a+bj)*(c+dj)的最终结果。通过设计由两条指令配对来完成操作,本发明使得向量复数乘法运算的流水长度为乘加运算的流水级。另外,通过使两条指令复用向量乘加功能部件,本发明能够大大节省芯片的面积和成本。
Description
技术领域
本发明涉及微处理器体系结构技术领域,特别涉及一种向量复数乘法运算的处理方法及相应的装置。
背景技术
随着处理器技术的不断发展,其应用的领域也不断拓展。为了满足高性能计算及数字信号处理等高端应用的需求,结合通用CPU(中央处理器)和DSP(数字信号处理器)融合的技术趋势,越来越多的通用处理器被用在快速傅里叶变换(FFT)、滤波(FIR)等数据密集计算的专用数字信号处理等领域。数据密集计算领域对芯片的数据处理能力提出的要求越来越高,各种通用处理器都实现了SIMD(Single InstructionMultiple Data,单指令流多数据流)向量指令集。向量复数乘法运算是许多数字信号处理算法的核心计算单位,因此提高向量复数乘法的效率对通用处理器用在专用领域和数字信号处理领域的效率提升都起着至关重要的作用。
目前复数乘法运算普遍采用乘法器加加法器来实现,例如参见中国专利申请200610166578“一种浮点复数乘法”。这种实现方法的缺点在于:1、流水线级数长,流水线启动时间较长,易导致指令窗口不够和各控制队列的堵塞;2、乘法和加法是分别的运算单元,增加了处理器的面积,提高了处理器的硬件实现成本;以及3、为了增加向量复数乘法运算的峰值,需要并行地增加相应的运算功能部件,从而使得在指令向量化后的实现代价增加更加明显。
发明内容
有鉴于此,本发明目的在于克服现有的向量复数乘法运算流水线长、实现代价大的不足,提供一种短流水、效率高、硬件开销小、易于实现的向量复数乘法运算的处理方法及相应的装置。
为了实现上述发明目的,本发明提供了一种向量复数乘法运算的处理方法,其设计相互配对的两条指令来共同完成操作,其中:第一条指令做向量复数乘法操作,其操作数包括所述(a+bj)和所述(c+dj),用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的部分结果;第二条指令做向量复数乘加操作,其操作数包括所述(a+bj)、所述(c+dj)以及所述第一条指令的执行结果,用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果,并将所述剩余部分结果与所述部分结果相加,以获得所述向量复数乘法运算(a+bj)*(c+dj)的最终结果。
对于上述向量复数乘法运算的指令执行方法,优选地,通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为ac+adj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为-bd+bcj;或者,通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为-bd+bcj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为ac+adj。
对于上述向量复数乘法运算的处理方法,优选地,通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为ac+bcj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为-bd+adj;或者,通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为-bd+adj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为ac+bcj。
对于上述向量复数乘法运算的处理方法,优选地,所述第一条指令和所述第二条指令复用向量乘加功能部件。
对于上述向量复数乘法运算的处理方法,进一步优选地,当所述向量乘加功能部件为256位宽时,所述向量乘加功能部件并行执行八个单精度浮点复数的四次向量乘法/乘加运算或者四个双精度浮点复数的两次向量乘法/乘加运算。
对于上述向量复数乘法运算的处理方法,更进一步优选地,每发射一条操作数为256位的指令到所述向量乘加功能部件,所述向量乘加功能部件的操作如下:首先,以32位为单位,通过多路选择的方式生成进入相应的64位乘加功能模块的操作数;然后,根据所述指令给出与如下至少之一有关的控制信号:是做向量乘法操作还是做向量乘加操作、乘加操作的乘法结果是否取负、是浮点单精度运算还是浮点双精度运算;以及,各所述乘加功能模块根据所述控制信号对所述操作数做相应的操作,并将各所述乘加模块的运算结果拼成256位输出。
另一方面,本发明还提供了一种向量乘加功能部件,用于执行向量复数乘法操作或向量复数乘加操作,其包括:操作数选择模块,用于在接收到所发射过来的向量乘加/向量乘法指令之后,以32位为单位通过多路选择的方式生成进入下述相应的64位乘加功能模块的操作数;控制模块,用于根据所述指令的指令码,生成与如下至少之一有关的控制信号:是做向量乘法操作还是做向量乘加操作、乘加操作的乘法结果是否取负、是浮点单精度运算还是浮点双精度运算;以及,乘加功能模块,用于根据所述控制信号对输入其中的操作数做相应的操作。
对于上述向量乘加功能部件,优选地,当所述向量乘加功能部件为256位宽时,所述向量乘加功能部件并行执行八个单精度浮点复数的四次向量乘法/乘加运算或者四个双精度浮点复数的两次向量乘法/乘加运算。
通过设计两条指令配对来完成操作,本发明使得向量复数乘法运算的流水长度为乘加运算的流水级。并且,通过使两条指令复用向量乘加功能部件,本发明能够避免芯片复杂度的扩大,从而大大节省了芯片的面积和成本。
附图说明
图1是本发明的向量单精度复数乘法指令VCPMULPS的指令编码格式图;
图2是本发明的向量单精度复数乘法指令VCPMULPS的操作图;
图3是本发明的向量单精度复数乘加指令VCPMULADDPS的指令编码格式图;
图4是本发明的向量单精度复数乘加指令VCPMULADDPS的操作图;
图5是本发明的向量双精度复数乘法指令VCPMULPD的指令编码格式图;
图6是本发明的向量双精度复数乘法指令VCPMULPD的操作图;
图7是本发明的向量双精度复数乘加指令VCPMULADDPD的指令编码格式图;
图8是本发明的向量双精度复数乘加指令VCPMULADDPD的操作图;
图9是本发明的向量乘加功能部件框图。
具体实施方式
如上所述,本发明旨在降低向量复数乘法运算的流水长度及硬件实现成本,且其发明思路主要是:利用两条指令配对来完成向量复数乘法运算操作,其中,第一条指令做向量复数乘法操作,第二条指令做向量复数乘加操作。并且,这两条指令复用向量乘加功能部件,以及两个浮点单精度和一个浮点双精度复用一个向量乘加功能部件。
参考图9所示本发明的向量乘加功能部件的框图,以操作数为256位为例详细解释向量乘加功能部件的操作如下:每周期发射一条向量乘法或向量乘加指令到向量乘加功能部件900。乘加功能模块920由四个64位乘加子模块921~924构成,通过操作数的选择来实现向量复数乘。也即,经过操作数选择模块910以多路选择器的形式进行选择,将选择好的每个64位的源操作数送到相应的乘加子功能模块921~924中去。控制模块930根据指令码给出与例如是做乘法操作还是乘加操作、乘加操作的乘法结果是否取负、是单精度运算还是双精度运算等有关的控制信号。乘加子功能模块921~924根据控制信号对操作数做相应的操作,并且各乘加子功能模块921~924的运算结果拼成256位输出。
本发明的上述及其它特征、优点和有益技术效果,将通过如下参照附图进行的优选实施例介绍得到更充分的阐述。
一方面,针对浮点单精度向量复数乘法运算,本发明设计由向量单精度复数乘法指令VCPMULPS和向量单精度复数乘加指令VCPMULADDPS配对来共同完成。其中:
向量单精度复数乘法指令VCPMULPS vd,vs,vt的指令编码格式如图1所示:VCPMULPS为指令名,vd为目的向量寄存器,vs和vt为源向量寄存器。
另外,向量单精度复数乘法指令VCPMULPS的指令操作如图2所示。其中,以256位浮点向量寄存器为例具体而言,由于每个复数包括实部和虚部两部分,浮点单精度复数实部和虚部都是32位,因此,256位向量寄存器包括4个浮点单精度复数。也即,源向量寄存器vs和vt分别存放了四个单精度浮点格式的复数,作为四次复数乘法运算输入的8个点。作为复数乘法运算的第一步,向量单精度复数乘法指令VCPMULPS执行向量乘法运算,并将运算结果作为复数乘法运算的部分和寄存在256位的目的寄存器vd中。并且,寄存在目的寄存器vd中的指令VCPMULPS的运算结果将作为向量单精度复数乘加指令VCPMULADDPS的源操作数之一,以参与作为复数乘法运算的第二步的向量乘加运算,从而得到复数乘法运算的最终结果。
向量单精度复数乘加指令VCPMULADDPS vd,vs,vt,vr的指令编码格式如图3所示:VCPMULADDPS为指令名,vd为目的向量寄存器,vs、vt和vr为源向量寄存器。其中,源向量寄存器vr存放了与之配对的向量单精度复数乘法指令VCPMULPS的运算结果;源向量寄存器vs、vt存放的操作数内容分别和向量单精度复数乘法指令VCPMULPS中寄存器vs、vt的操作数内容相同。
另外,向量单精度复数乘加指令VCPMULADDPS的指令操作如图4所示。其中,四次复数乘法运算的输入取自于向量单精度复数乘加指令VCPMULPS中256位向量寄存器vs和vt表示的8个复数点。作为复数乘法运算的第二步,向量单精度复数乘加指令VCPMULADDPS执行向量的乘加运算,源操作数之一vr取自于第一条指令的执行结果,并将运算结果作为复数乘法运算的最终结果寄存在256位目的寄存器vd中。
综上,单精度向量复数乘法运算由向量单精度复数乘法指令VCPMULPS和向量单精度复数乘法指令VCPMULADDPS配对共同完成,并以256位向量寄存器为例,具体列出用以完成八个单精度浮点数的四次复数乘法运算的操作如下:
VCPMULPS:
vd[031:000]←vs[063:032]*vt[031:000];
vd[063:032]←vs[063:032]*vt[063:032];
vd[095:064]←vs[127:096]*vt[095:064];
vd[127:096]←vs[127:096]*vt[127:096];
vd[159:128]←vs[191:160]*vt[159:128];
vd[191:160]←vs[191:160]*vt[191:160];
vd[223:192]←vs[255:224]*vt[223:192];
vd[255:224]←vs[255:224]*vt[255:224];
VCPMULADDPS:
vd[031:000]←vr[031:000]+vs[031:000]*vt[063:032];
vd[063:032]←vr[063:032]-vs[031:000]*vt[031:000];
vd[095:064]←vr[095:064]+vs[095:064]*vt[127:096];
vd[127:096]←vr[127:096]-vs[095:064]*vt[095:064];
vd[159:128]←vr[159:128]+vs[159:128]*vt[191:160];
vd[191:160]←vr[191:160]-vs[159:128]*vt[159:128];
vd[223:192]←vr[223:192]+vs[223:192]*vt[255:224];
vd[255:224]←vr[255:224]-vs[223:192]*vt[223:192];
下面列举一个具体的应用示例,以说明如何上述经由向量单精度乘法指令VCPMULPS和向量单精度乘加指令VCPMULADDPS来共同完成单精度向量复数乘法运算的实现过程。
假定要进行四次向量单精度复数乘法运算(x1+x0i)*(y1+y0i)、(x3+x2i)*(y3+y2i)、(x5+x4i)*(y5+y4i)以及(x7+x6i)*(y7+y6i),并假定相应的运算结果为(z1+z0i)、(z3+z2i)、(z5+z4i)、(z7+z6i)。
第一条指令,即向量单精度复数乘法指令VCPMULPS vd,vs,vt的指令操作图如图2所示,其操作结果为w0=x1*y0、w1=x1*y1、w2=x3*y2、w3=x3*y3、w4=x5*y4、w5=x5*y4、w6=x7*y6、w7=x7*y7。
第二条指令,即向量单精度复数乘加指令VCPMULADDPS vd,vs,vt,vr的指令操作图如图4所示,其中vr源操作数来自第一条指令的操作结果,其操作结果为z0=x0y1+x1y0、z1=x1y1-x0y0、z2=x2y3+x3y2、z3=x3y3-x2y2、z4=x4y5+x5y4、z5=x5y5-x4y4、z6=x6y7+x7y6、z7=x7y7-x6y6。
实现过程如下:连续发射配对的两条指令,即向量单精度复数乘法指令和向量单精度复数乘加指令,到向量乘加功能部件。
通过操作码判断第一条指令为指令VCPMULPS w,x,y。
操作数选择逻辑将最低一个乘加部件的操作数opa0、opb0、opc0置为{x1,x1}、{y1,y0}和64’b0,控制位置为做乘法操作,单精度。{y1,y0}表示拼接操作,即高32位为y1、低32位为y0,64’b0表示64个0。
次低一个乘加部件的操作数opa1、opb1、opc1置为{x3,x3}、{y3,y2}和64’b0,控制位置为做乘法操作,单精度。
次高一个乘加部件的操作数opa2、opb2、opc2置为{x5,x5}、{y5,y4}和64’b0,控制位置为做乘法操作,单精度。
最高一个乘加部件的操作数opa2、opb2、opc2置为{x7,x7}、{y7,y6}和64’b0,控制位置为做乘法操作,单精度。
四个乘加部件各执行一个双精度操作opa*opb+opc,或者两个单精度操作opa[63:32]*opb[63:32]+opc[63:32]和opa[31:0]*opb[31:0]+opc[31:0]。因为操作数为单精度,因此每个乘加部件执行两个乘加。输出结果w为{x7*y7,x7*y6,x5*y5,x5*y4,x3*y3,x3*y2,x1*y1,x1*y0}。
通过操作码判断第二条指令为指令VCPMULADDPS z,x,y,w。
操作数选择逻辑将最低一个乘加部件的操作数opa0、opb0、opc0置为{x0,x0}、{y0,y1}和{x1*y1,x1*y0},控制位置为单精度,第一个单精度做乘加、乘法取负,第二个单精度做乘加。
次低一个乘加部件的操作数opa1、opb1、opc1置为{x2,x2}、{y2,y3}、{x3*y3,x3*y2},控制位置为单精度,第一个单精度做乘加、乘法取负,第二个单精度做乘加。
次高一个乘加部件的操作数opa2、opb2、opc2置为{x4,x4}、{y4,y5}和{x5*y5,x5*y4},控制位置为单精度,第一个单精度做乘加、乘法取负,第二个单精度做乘加。
最高一个乘加部件的操作数opa2、opb2、opc2置为{x6,x6}、{y7,y6}和{x7*y7,x7*y6},控制位置为单精度,第一个单精度做乘加、乘法取负,第二个单精度做乘加。
四个乘加部件各执行一个双精度操作opa*opb+opc,如果是乘加、乘法取负则把opa*opb取负,即结果为-opa*opb+opc;或者两个单精度操作opa[63:32]*opb[63:32]+opc[63:32],如果是乘加、乘法取负则把opa[63:32]*opb[63:32]取负,即结果为-opa[63:32]*opb[63:32]+opc[63:32],和opa[31:0]*opb[31:0]+opc[31:0],如果是乘加、乘法取负则把opa[31:0]*opb[31:0]取负,即结果为-opa[31:0]*opb[31:0]+opc[31:0]。
因为操作数为单精度,因此每个乘加部件执行两个乘加。输出结果z为{x7y7-x6y6,x6y7+x7y6,x5y5-x4y4,x4y5+x5y4,x3y3-x2y2,x2y3+x3y2,x1y1-x0y0,x0y1+x1y0}。
由此可见,通过设计由向量单精度复数乘法指令和向量单精度复数乘加指令配对完成单精度向量复数乘法运算,能够有效降低向量复数乘法运算的流水长度;并通过使向量单精度复数乘法指令和向量单精度复数乘加指令使用相同的向量乘加部件,即向量单精度复数乘法指令和向量单精度复数乘加指令复用向量乘加部件,能够有效减小芯片的面积以及处理器的硬件实现成本。
另一方面,针对浮点双精度向量复数乘法运算,本发明设计由向量双精度复数乘法指令VCPMULPD和向量双精度复数乘加指令VCPMULADDPD配对来共同完成。其中:
向量双精度复数乘法指令VCPMULPD vd,vs,vt的指令编码格式如图5所示:VCPMULPD为指令名,vd为目的向量寄存器,vs和vt为源向量寄存器。
另外,向量双精度复数乘法指令VCPMULPS的指令操作如图6所示。其中,以256位浮点向量寄存器为例具体而言,由于每个复数包括实部和虚部两部分,浮点双精度复数实部和虚部都是64位,因此,256位向量寄存器包括2个浮点双精度复数。也即,源向量寄存器vs和vt分别存放了两个双精度浮点格式的复数,作为两次复数乘法运算输入的4个点。作为复数乘法运算的第一步,向量双精度复数乘法指令VCPMULPD执行向量的乘法运算,并将运算结果作为复数乘法运算的部分和寄存在256位的目的寄存器vd中。并且,寄存在目的寄存器vd中的指令VCPMULPD的运算结果将作为向量双精度复数乘加指令VCPMULADDPD的源操作数之一,以参与作为复数乘法运算的第二步的向量乘加运算,从而得到复数乘法运算的最终结果。
向量双精度复数乘加指令VCPMULADDPD vd,vs,vt,vr的指令编码格式如图7所示:VCPMULADDPS为指令名,vd为目的向量寄存器,vs、vt和vr为源向量寄存器。其中,源向量寄存器vr存放了与之配对的向量双精度复数乘法指令VCPMULPD的运算结果;源向量寄存器vs、vt存放的操作数内容分别和向量双精度复数乘法指令VCPMULPS中寄存器vs、vt的操作数内容相同。
另外,向量双精度复数乘加指令VCPMULADDPD的指令操作如图8所示。其中,两次复数乘法运算的输入取自于向量双精度复数乘加指令VCPMULPD中256位向量寄存器vs和vt表示的4个复数点。作为复数乘法运算的第二步,向量双精度复数乘加指令VCPMULADDPD执行向量的乘加运算,源操作数之一vr取自于第一步的运算结果,并将运算结果作为复数乘法运算的最终结果寄存在256位目的寄存器vd中。
综上,双精度向量复数乘法运算由向量双精度复数乘法指令VCPMULPD和向量双精度复数乘法指令VCPMULADDPD配对共同完成,并以256位向量寄存器为例,具体列出用以完成四个双精度浮点数的两次复数乘法运算的操作如下:
VCPMULPD:
vd[063:000]←vs[127:064]*vt[063:000];
vd[127:064]←vs[127:064]*vt[127:064];
vd[191:128]←vs[255:192]*vt[191:128];
vd[255:192]←vs[255:192]*vt[255:192];
VCPMULADDPD:
vd[063:000]←vr[063:000]+vs[063:000]*vt[127:064];
vd[127:064]←vr[127:064]-vs[063:000]*vt[063:000];
vd[191:128]←vr[191:128]+vs[191:128]*vt[255:192];
vd[255:192]←vr[255:192]-vs[191:128]*vt[191:128];
下面列举一个具体的应用示例,以说明如何上述经由向量双精度乘法指令VCPMULPD和向量双精度乘加指令VCPMULADDPD来共同完成双精度向量复数乘法运算的实现过程。
假定要进行两次向量双精度复数乘法运算(x1+x0i)*(y1+y0i)和(x3+x2i)*(y3+y2i),并假定操作结果为(z1+z0i)、(z3+z2i)。
第一条指令,即向量双精度复数乘法指令VCPMULPD vd,vs,vt的指令操作图如图6所示,其操作结果为w0=x1*y0、w1=x1*y1、w2=x3*y2、w3=x3*y3。
第二条指令,即向量双精度复数乘加指令VCPMULADDPD vd,vs,vt,vr的指令操作图如图8所示,其中vr源操作数来自第一条指令的操作结果,其操作结果为z0=x0*y1+x1*y0、z1=x1*y1-x0*y0、z2=x2*y3+x3*y2、z3=x3*y3-x2*y2。
实现过程如下:连续发射配对的两条指令,即向量双精度复数乘法指令和向量双精度复数乘加指令,到向量乘加功能部件。
通过操作码判断第一条指令为指令VCPMULPD w,x,y。
操作数选择逻辑将最低一个乘加部件的操作数opa0、opb0、opc0置为x1、y0和64’b0,控制位置为做乘法操作,双精度。控制位置为做乘法操作,双精度。
次低一个乘加部件的操作数opa1、opb1、opc1置为x1、y1和64’b0,控制位置为做乘法操作,双精度。
次高一个乘加部件的操作数opa2、opb2、opc2置为x3、y2和64’b0,控制位置为做乘法操作,双精度。
最高一个乘加部件的操作数opa2、opb2、opc2置为x3、y3和64’b0,控制位置为做乘法操作,双精度。
四个乘加部件各执行一个双精度操作opa*opb+opc,或者两个单精度操作opa[63:32]*opb[63:32]+opc[63:32]和opa[31:0]*opb[31:0]+opc[31:0]。因为操作数为双精度,因此每个乘加部件执行一个乘加。输出结果w为{x3*y3,x3*y2,x1*y1,x1*y0}。
通过操作码判断第二条指令为指令VCPMULADDPD z,x,y,w。
操作数选择逻辑将最低一个乘加部件的操作数opa0、opb0、opc0置为x0、y1和x1*y0,控制位置为双精度,做乘加,结果为x0*y1+x1*y0。
次低一个乘加部件的操作数opa1、opb1、opc1置为x0、y0、x1*y1,控制位置为双精度,做乘加、乘法取负,结果为x1*y1-x0*y0。
次高一个乘加部件的操作数opa2、opb2、opc2置为x2、y3和x3*y2,控制位置为双精度,做乘加,结果为x2*y3+x3*y2。
最高一个乘加部件的操作数opa2、opb2、opc2置为x2、y2和x3*y3,控制位置为双精度,做乘加、乘法取负,结果为x3*y3-x2*y2。
输出结果z为输出结果z为{x3y3-x2y2,x2y3+x3y2,x1y1-x0y0,x0y1+x1y0}。
由此可见,通过设计由向量双精度复数乘法指令和向量双精度复数乘加指令配对完成双精度向量复数乘法运算,能够有效降低向量复数乘法运算的流水长度;并通过使向量双精度复数乘法指令和向量双精度复数乘加指令使用相同的向量乘加部件,即向量双精度复数乘法指令和向量双精度复数乘加指令复用向量乘加部件,能够有效减小芯片的面积以及处理器的硬件实现成本。
需要声明的是,上述发明内容及具体实施方式仅旨在证明本发明所提供技术方案的实际应用,不应解释为对本发明保护范围的限定。本领域技术人员在本发明的精神和原理内,当可作各种修改、等同替换、或改进。本发明的保护范围以所附权利要求书为准。
Claims (7)
1.一种向量复数乘法运算的处理方法,其特征在于,
在接收到所发射过来的向量乘加/向量乘法指令之后,以32位为单位通过多路选择的方式生成进入相应的64位乘加功能模块的操作数;
根据所述指令的指令码,生成与如下至少之一有关的控制信号:是做向量乘法操作还是做向量乘加操作、乘加操作的乘法结果是否取负、是浮点单精度运算还是浮点双精度运算;
根据所述控制信号对输入其中的操作数做相应的操作,并将运算结果拼成256位输出;
所述相应的操作为:
通过相互配对的两条指令来共同完成操作,其中:
第一条指令做向量复数乘法操作,其操作数包括(a+bj)和(c+dj),用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的部分结果;
第二条指令做向量复数乘加操作,其操作数包括(a+bj)、(c+dj)以及所述第一条指令的执行结果,用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果,并将所述剩余部分结果与所述部分结果相加,以获得所述向量复数乘法运算(a+bj)*(c+dj)的最终结果。
2.根据权利要求1所述的向量复数乘法运算的处理方法,其特征在于,通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为ac+adj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为-bd+bcj;或者,
通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为-bd+bcj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为ac+adj。
3.根据权利要求1所述的向量复数乘法运算的处理方法,其特征在于,通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为ac+bcj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为-bd+adj;或者
通过执行所述第一条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的部分结果为-bd+adj,通过执行所述第二条指令计算出的所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果为ac+bcj。
4.根据权利要求1至3中任一项所述的向量复数乘法运算的处理方法,其特征在于,所述第一条指令和所述第二条指令复用向量乘加功能部件。
5.根据权利要求4所述的向量复数乘法运算的处理方法,其特征在于,当所述向量乘加功能部件为256位宽时,所述向量乘加功能部件并行执行八个单精度浮点复数的四次向量乘法/乘加运算或者四个双精度浮点复数的两次向量乘法/乘加运算。
6.一种向量乘加功能部件,用于执行向量复数乘法操作或向量复数乘加操作,其特征在于,包括:
操作数选择模块,用于在接收到所发射过来的向量乘加/向量乘法指令之后,以32位为单位通过多路选择的方式生成进入下述相应的64位乘加功能模块的操作数;
控制模块,用于根据所述指令的指令码,生成与如下至少之一有关的控制信号:是做向量乘法操作还是做向量乘加操作、乘加操作的乘法结果是否取负、是浮点单精度运算还是浮点双精度运算;以及
乘加功能模块,用于根据所述控制信号对输入其中的操作数做相应的操作,并将运算结果拼成256位输出;
所述相应的操作为:
通过相互配对的两条指令来共同完成操作,其中:
第一条指令做向量复数乘法操作,其操作数包括(a+bj)和(c+dj),用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的部分结果;
第二条指令做向量复数乘加操作,其操作数包括(a+bj)、(c+dj)以及所述第一条指令的执行结果,用于计算出所述向量复数乘法运算(a+bj)*(c+dj)的剩余部分结果,并将所述剩余部分结果与所述部分结果相加,以获得所述向量复数乘法运算(a+bj)*(c+dj)的最终结果。
7.根据权利要求6所述的向量乘加功能部件,其特征在于,当所述向量乘加功能部件为256位宽时,所述向量乘加功能部件并行执行八个单精度浮点复数的四次向量乘法/乘加运算或者四个双精度浮点复数的两次向量乘法/乘加运算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101001855A CN101825998B (zh) | 2010-01-22 | 2010-01-22 | 向量复数乘法运算的处理方法及相应的装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101001855A CN101825998B (zh) | 2010-01-22 | 2010-01-22 | 向量复数乘法运算的处理方法及相应的装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101825998A CN101825998A (zh) | 2010-09-08 |
CN101825998B true CN101825998B (zh) | 2012-09-05 |
Family
ID=42689931
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101001855A Active CN101825998B (zh) | 2010-01-22 | 2010-01-22 | 向量复数乘法运算的处理方法及相应的装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101825998B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866461B (zh) * | 2014-02-21 | 2018-03-02 | 北京国睿中数科技股份有限公司 | 用于浮点复数乘i加减的装置和方法 |
CN104866278B (zh) * | 2014-02-21 | 2018-05-18 | 北京国睿中数科技股份有限公司 | 用于浮点复数平行加减的装置和方法 |
CN104866277A (zh) * | 2014-02-26 | 2015-08-26 | 北京国睿中数科技股份有限公司 | 用于浮点复数共轭加减的装置和方法 |
CN105849690B (zh) * | 2014-07-02 | 2019-03-15 | 上海兆芯集成电路有限公司 | 融合乘积-累加运算的处理器与方法 |
CN104317774B (zh) * | 2014-10-14 | 2017-07-04 | 中国航天科技集团公司第九研究院第七七一研究所 | 利用处理器浮点单元进行复数乘和蝶形运算的装置和方法 |
CN105278913A (zh) * | 2015-01-14 | 2016-01-27 | 北京国睿中数科技股份有限公司 | 实现向量浮点基2指数对数计算的装置 |
CN105302772A (zh) * | 2015-01-14 | 2016-02-03 | 北京国睿中数科技股份有限公司 | 浮点复数向量第一级fft计算方法及系统 |
CN106371808B (zh) * | 2015-07-22 | 2019-07-12 | 华为技术有限公司 | 一种并行计算的方法及终端 |
CN111651205B (zh) * | 2016-04-26 | 2023-11-17 | 中科寒武纪科技股份有限公司 | 一种用于执行向量内积运算的装置和方法 |
GB2564696B (en) * | 2017-07-20 | 2020-02-05 | Advanced Risc Mach Ltd | Register-based complex number processing |
CN112445752B (zh) * | 2019-08-28 | 2024-01-05 | 上海华为技术有限公司 | 一种基于乔列斯基分解的矩阵求逆装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3800130A (en) * | 1973-07-09 | 1974-03-26 | Rca Corp | Fast fourier transform stage using floating point numbers |
US4858164A (en) * | 1987-05-29 | 1989-08-15 | United Technologies Corporation | Complex arithmetic processing |
CN1996235A (zh) * | 2006-12-31 | 2007-07-11 | 武汉大学 | 一种浮点复数乘法器 |
CN101238454A (zh) * | 2005-08-11 | 2008-08-06 | 科莱索尼克公司 | 包括复数短乘法器和独立的矢量加载单元的具有集群式simd微体系结构的可编程数字信号处理器 |
-
2010
- 2010-01-22 CN CN2010101001855A patent/CN101825998B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3800130A (en) * | 1973-07-09 | 1974-03-26 | Rca Corp | Fast fourier transform stage using floating point numbers |
US4858164A (en) * | 1987-05-29 | 1989-08-15 | United Technologies Corporation | Complex arithmetic processing |
CN101238454A (zh) * | 2005-08-11 | 2008-08-06 | 科莱索尼克公司 | 包括复数短乘法器和独立的矢量加载单元的具有集群式simd微体系结构的可编程数字信号处理器 |
CN1996235A (zh) * | 2006-12-31 | 2007-07-11 | 武汉大学 | 一种浮点复数乘法器 |
Non-Patent Citations (2)
Title |
---|
KR2003-0047523A 2003.06.18 |
KR2009-0008692A 2009.01.22 |
Also Published As
Publication number | Publication date |
---|---|
CN101825998A (zh) | 2010-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101825998B (zh) | 向量复数乘法运算的处理方法及相应的装置 | |
US9792118B2 (en) | Vector processing engines (VPEs) employing a tapped-delay line(s) for providing precision filter vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods | |
US9977676B2 (en) | Vector processing engines (VPEs) employing reordering circuitry in data flow paths between execution units and vector data memory to provide in-flight reordering of output vector data stored to vector data memory, and related vector processor systems and methods | |
US9880845B2 (en) | Vector processing engines (VPEs) employing format conversion circuitry in data flow paths between vector data memory and execution units to provide in-flight format-converting of input vector data to execution units for vector processing operations, and related vector processor systems and methods | |
US9684509B2 (en) | Vector processing engines (VPEs) employing merging circuitry in data flow paths between execution units and vector data memory to provide in-flight merging of output vector data stored to vector data memory, and related vector processing instructions, systems, and methods | |
KR100948512B1 (ko) | 부동 소수점 연산을 지원하는 부동 소수점 유닛-프로세싱 요소(fpu-pe) 구조 및 그 fpu-pe 구조를 포함한 재구성 어레이 프로세서(rap) 및 그 rap를 포함한 멀티미디어 플랫폼 | |
US6839728B2 (en) | Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture | |
US8443170B2 (en) | Apparatus and method for performing SIMD multiply-accumulate operations | |
US6922716B2 (en) | Method and apparatus for vector processing | |
CA1308488C (en) | Apparatus and method for performing digital signal processing including fast fourier transform radix-4 butterfly computations | |
US9619227B2 (en) | Vector processing engines (VPEs) employing tapped-delay line(s) for providing precision correlation / covariance vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods | |
US6959316B2 (en) | Dynamically configurable processor | |
US20150143076A1 (en) | VECTOR PROCESSING ENGINES (VPEs) EMPLOYING DESPREADING CIRCUITRY IN DATA FLOW PATHS BETWEEN EXECUTION UNITS AND VECTOR DATA MEMORY TO PROVIDE IN-FLIGHT DESPREADING OF SPREAD-SPECTRUM SEQUENCES, AND RELATED VECTOR PROCESSING INSTRUCTIONS, SYSTEMS, AND METHODS | |
GB2474901A (en) | Multiply-accumulate instruction which adds or subtracts based on a predicate value | |
JP2000227858A (ja) | プロセッサおよびその命令処理方法 | |
CN101438239A (zh) | 微处理器中的紧缩加减运算 | |
CN102012893B (zh) | 一种可扩展向量运算装置 | |
CN105335127A (zh) | Gpdsp中支持浮点除法的标量运算单元结构 | |
JP2012528391A (ja) | 飽和を伴う整数乗算および乗算加算演算 | |
JP4477278B2 (ja) | デュアル−macプロセッサおよびデュアル−macコプロセッサを有するdsp | |
US20030084083A1 (en) | Method and apparatus for performing integer multiply operations using primitive multi-media operations that operate on smaller operands | |
Fan et al. | Montgomery modular multiplication algorithm on multi-core systems | |
JP6829838B2 (ja) | 演算装置及び演算システム | |
US5931892A (en) | Enhanced adaptive filtering technique | |
JP6604393B2 (ja) | ベクトルプロセッサ、演算実行方法、プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100080 No. 10 South Road, Haidian District Academy of Sciences, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CP03 | Change of name, title or address |