能够执行缩放、圆整、取指数、圆整、取尾数、化简、范围和分类指令的乘加函数单元

申请号 CN201180045896.X 申请日 2011-09-23 公开(公告)号 CN103119532A 公开(公告)日 2013-05-22
申请人 英特尔公司; 发明人 A·格雷德斯廷; C·S·安德森; Z·斯波伯; S·卢巴诺维奇; B·艾坦;
摘要 描述了一种方法,该方法涉及用函数单元执行第一指令。该第一指令是乘加指令。该方法还包括用函数单元执行第二指令。该第二指令是圆整指令。
权利要求

1.一种处理器,包括:
函数单元,所述函数单元具有指数差计算逻辑、用于支持乘加指令的乘法器和加法器,所述函数单元也具有支持圆整指令的圆整器,所述圆整指令规定要将尾数值圆整至多少个二进制位置,所述指数差计算逻辑具有支持所述乘加指令和所述圆整指令的执行的移位器。
2.如权利要求1所述的处理器,其特征在于,所述移位器也支持由所述函数单元执行的缩放指令。
3.如权利要求2所述的处理器,其特征在于,所述指数差计算逻辑包括支持所述乘加指令的执行的第二移位器,其中所述第二移位器也支持拟由所述函数单元执行的取指数指令。
4.如权利要求1所述的处理器,其特征在于,所述指数差计算逻辑包括支持所述乘加指令的执行的第二移位器,其中所述第二移位器也支持拟由所述函数单元执行的取指数指令。
5.如权利要求4所述的处理器,其特征在于,所述第一移位器、第二移位器和圆整器也支持由所述函数单元执行的化简指令。
6.如权利要求1所述的处理器,其特征在于,所述第一移位器和圆整器也支持由所述函数单元执行的化简指令。
7.一种方法,包括:
用函数单元执行第一指令,所述第一指令是乘加指令;
用所述函数单元执行第二指令,所述第二指令是圆整指令。
8.如权利要求7所述的方法,其特征在于,还包括用所述函数单元执行第三指令,所述第三指令是缩放指令。
9.如权利要求8所述的方法,其特征在于,还包括用所述函数单元执行第四指令,所述第四指令是取指数指令。
10.如权利要求9所述的方法,其特征在于,还包括用所述函数单元执行第五指令,所述第五指令是化简指令。
11.如权利要求10所述的方法,其特征在于,还包括用所述函数单元执行第六指令,所述第六指令是取尾数指令。
12.如权利要求11所述的方法,其特征在于,还包括用所述函数单元执行第七指令,所述第七指令是范围指令。
13.一种计算系统,包括:
硬盘驱动器
处理器,所述处理器具有函数单元,所述函数单元具有指数差计算逻辑、支持乘加指令的乘法器和加法器,所述函数单元也具有支持圆整指令的圆整器,所述圆整指令规定要将尾数值圆整至多少个二进制位置,所述指数差计算逻辑具有支持所述乘加指令和所述圆整指令的执行的移位器。
14.如权利要求13所述的处理器,其特征在于,所述移位器也支持由所述函数单元执行的缩放指令。
15.如权利要求14所述的处理器,其特征在于,所述指数差计算逻辑包括支持所述乘加指令的执行的第二移位器,其中所述第二移位器也支持拟由所述函数单元执行的取指数指令。
16.如权利要求13所述的处理器,其特征在于,所述指数差计算逻辑包括支持所述乘加指令的执行的第二移位器,其中所述第二移位器也支持拟由所述函数单元执行的取指数指令。
17.如权利要求16所述的处理器,其特征在于,所述第一移位器、第二移位器和圆整器也支持由所述函数单元执行的化简指令。

说明书全文

能够执行缩放、圆整、取指数、圆整、取尾数、化简、范围和分

类指令的乘加函数单元

技术领域

[0001] 本发明的领域总地涉及电子计算,更具体地涉及能执行函数的近似的函数单元。
[0002] 背景
[0003] 图1示出一般的处理核100,该处理核100被认为描述许多不同类型的处理核架构,例如复杂指令集(CISC)、精简指令集(RISC)和超长指令字(VLIW)。图1的一般处理核100包括:1)(例如从高速缓存和/或存储器)拾取指令的拾取单元103;2)对指令进行解码的解码单元104;3)确定向执行单元106发布指令的时间和/或顺序的调度单元105(注意该调度单元是选用性的);4)具有执行单元的执行级106,该执行单元执行指令(典型指令执行单元包括分支执行单元单元、整数运算执行单元(例如ALU)、浮点运算执行单元(例如FPU)以及存储器访问执行单元);以及5)退隐单元107,它表示指令的成功完成。注意,处理核100可以采用或不采用微代码108。在微代码处理器的情形下,微操作码通常被存储在于其上构筑处理器的半导体芯片内的非易失性机器可读介质(例如只读存储器(ROM))中,并使处理器中的执行单元执行由指令调用的所需函数。
[0004] 附图
[0005] 在附图各图中通过示例而不是限制说明了本发明,其中相同标记指示相同元件,且其中:
[0006] 图1示出处理器的实施例
[0007] 图2示出乘加函数单元的实施例;
[0008] 图3示出可在图2的函数单元上运行的GETEXP(取指数)指令的流程图
[0009] 图4示出可在图2的函数单元上运行的SCALE(缩放)指令的流程图;
[0010] 图5示出可在图2的函数单元上运行的ROUND(圆整)指令的流程图;
[0011] 图6示出可在图2的函数单元上运行的GETMANT(取尾数)指令的流程图;
[0012] 图7示出可在图2的函数单元上运行的REDUCE(化简)指令的流程图;
[0013] 图8示出可在图2的函数单元上运行的RANGE(范围)指令的流程图;
[0014] 图9示出一示例性计算系统。
[0015] 详细描述
[0016] 图2示出一执行单元(也称函数单元),它能执行本文描述的许多不同指令。
[0017] MADD指令
[0018] 图2架构能执行的基本指令是乘加(MADD)指令,该MADD指令将被乘数(A)和乘数(B)相乘并将积(AB)加至加数(C)。也就是说,MADD指令执行指令R=(AB)+C(在一实施例中,MADD指令可用来执行下列计算中的任何一个:AB+C,AB-C,-AB+C,-AB-C)。如本领域内技术人员已知的,在浮点形式中,一个值可用尾数项和指数项来表达。因此,例如被乘数A被表达为(A.mant,A.exp);乘数B被表达为(B.mant,B.exp);而加数C被表达为(C.mant;C.exp)。
[0019] 对于浮点运算来说,图2的架构包括指数计算逻辑201和尾数计算逻辑202。根据浮点MADD指令的基本运算,指数计算逻辑201确定浮点结果的指数项(R.exp)而尾数计算逻辑202确定浮点结果的尾数项(R.mant)。对于浮点MADD指令,指数计算逻辑201最初将R.exp项确定为以下各项的最大值:i)C.exp;ii)(A.exp+B.exp).
[0020] 尾数逻辑202包括指数差逻辑203,该指数差逻辑203包括左移位逻辑204和右移位逻辑205。尾数逻辑还包括乘法器206。乘法动作可被视为数个部分乘积之和。图2还示出一特定乘法器设计方法,其中选择器逻辑207产生A.mant项和B.mant项的乘法的部分乘积(注意B.mant项也是布斯(Booth)编码的)。华莱士(Wallace)树逻辑208有效地执行由选择器逻辑207产生的部分积的求和。值得注意地,加数尾数项(Cmant)被注入到华莱士树208以使华莱士树208也执行AB+C加法。
[0021] 然而,在注入前,调整Cmant项以使其在部分积求和内被正确地对准。这里,由于由乘法器执行的乘法自然地产生阶次A.exp+B.exp的尾数项,因此指数差逻辑203将Cmant项移位C.exp和(A.exp+B.exp)之间的差。具体地说,如果C.exp大于(A.exp+B.exp),则Cmant项可由左移位逻辑204向左移位C.exp-(A.exp+B.exp)个二进制小数点(也就是说,Cmant项的二进制点将向右移位,其效果是使其整数项增大)。同样,如果C.exp小于(A.exp+B.exp),则Cmant项可由右移位逻辑205向右移位(A.exp+B.exp)-C.exp个十进制小数点(也就是说,Cmant项的二进制小数点将向左移位,其效果是使其整数项减小)。在这种情形下,Cmant的低阶小数项通过逻辑213被合并入粘滞位,以供下文描述的指令中的圆整器(rounder)217使用。
[0022] 由华莱士树逻辑207执行的求和既产生求和项又产生进位项,它们由加法器209相加以产生AB+C计算的结果。这里,如果AB+C计算的结果包含前导0(或如果结果为负则包括前导1),前导改变预测器210将使结果(通过左移位器211)向左移位前导0/1的数目以去除这些前导0/1。相同的信息被提供给指数计算逻辑201以相应地调整R.exp。
[0023] 存在两个移位器,即用于去除前导0/1的左移位204(在这种情形下用shift_count更新R.exp)和右移位212(当C.exp大于A+B.exp时这是需要的,在这种情形下华莱士树结果被向右移位至与C.exp-(A+B.exp)相等的点)。Mux(多路复用器)213选择利用两移位器211、212中的任何一个以得到正确的结果。在一个实施例中,如果C.mant项被向左移位,则加法器209可产生进位项214。进位项214启用一增量器215,该增量器215有效地将进位项加至左移位的C.mant项(即如果加法器209产生一进位项,则增量器215的输出流过2∶1乘法器216)。在一个实施例中,加法器209是108位而增量器215是53位的增量器。
[0024] 下面将更详细地描述可在图2的函数单元上执行的若干附加指令。对于这些指令中的任何一个连同前述FMADD指令,在一个实施例中,函数单元被设计成在标量或打包数据(SIMD)类型和以单精度和双精度形式的操作数的任何组合上进行操作。操作数类型和精度的规范组合在指令中被规定。此外,图2的函数单元可被实例化许多次以实现向量函数单元。这里,可使掩码层介于向量函数单元输出和向量函数单元内的每个实例化函数单元之间。
[0025] 向量操作可被视为不同于SIMD操作,因为输入操作数的维度对于向量机是可变的但对于SIMD机是固定的。前述掩码层提供改变向量机内的元素数目的能。具体地说,来自各例示函数单元之一的每个输出元素可与其本身一起被写至相应的写逻辑电路。在一个实施例中,写逻辑电路可对向量函数单元的任何输出元素位置作写入。通过使写逻辑电路仅针对与有效向量操作数元素对应的那些元素,可处理各种长度的向量。这具有本质上仅允许与有效向量元素对应的例示函数单元的那些操作。此外,可设计掩码层以使由各实例化函数单元检测到的任何算法异常仅对被启用的实例化函数单元的有效输出被递交,同时抑制来自未被激活的函数单元的异常。
[0026] SCALE指令
[0027] SCALE指令的流程图示出于图3中。SCALE指令通过floor:Y(向下取整:Y)缩放第一浮点项X(floor:Y是浮点项Y的最小整数表达)。VSCALE(V缩放)指令实际上可被视为将X的二进制小数点移动一数量fioor:Y的指令。在数学项中,这可被表示为[0028] R=(X.mant E X.exp)*2A(floor:Y.mant E Y.exp)=X.mant E(X.exp+(floor:Y.mant E Y.exp))。
[0029] 因此,结果的尾数项是R.mant=X.mant,而结果的指数项是R.exp=X.exp+(fooor:Y.mant E Y.exp)。关于R.exp的计算,注意X.exp项本身是整数,而Y.mant E Y.exp可简单地通过使Y.mant的二进制小数点移位直到不再有小数位为止而被转换成整数。也就是说,例如,如果Y.mant=1.01011且Y.exp=5,那么Y=101011。这本质上对应于在移位器中将Y.mant向左移位Y.exp。这里,floor操作本质上对应于小数位的丢弃。因此,R.exp项可通过下面步骤计算:i)将Y.mant移位等于Y.exp的量,以及ii)将经移位的值加至X.exp。
[0030] 这可在图2的指数差逻辑203中通过用处理MADD指令的加数项(Cmant和C.exp)的数据路径来处理Y项并同时强制使A.exp和B.exp等于0而实现。在这种情形下,C.exp-(A.exp+B.exp)=Y.exp-(0)=Y.exp,这将使Y.mant通过左移位器204向左移位Y.exp。移位器204的输出随后被提供给指数计算逻辑201,该指数计算逻辑201将移位器204的输出加至X.exp项。X.exp项可强加至指数计算逻辑201的A.exp、B.exp、C.exp输入中的任何一个。求和作为R.exp被提供。R.mant简单地作为输入X.mant项被提供。
[0031] GETEXP指令
[0032] 取指数指令的流程图示出于图4中。GETEXP指令接受输入项(Z.mant,Z.exp),从Z.exp的值减去偏移并以浮点形式提供答案。本质上,指令以浮点形式提供输入Z的真实指数。这里,如本领域内技术人员已知的那样,浮点指数值一般被偏移以使涉及负指数的计算更为容易。例如,在单精度情形下,对指数项预留8位,这给出254个不同值的范围(给予两个其它值特殊的意义)。这里,对于-127至+127的实际指数范围,通过硬件将+127的偏移加至这样的实际指数值,以使在硬件中针对指数物理计算的数值范围从0延伸至254。因此,对于单精度,GETEXP指令从Z.exp减去值127,并以浮点形式提供答案。在双精度情形下,从Z.exp减去值1023(注意双精度在.exp项中具有11位的双精度)。
[0033] 在单精度情形下,通过加上值-127来从另一个项减去值127。在2的补余整型形式中,-127可表示为10000001,它可被重对准为0.10000001E8(即,如果值10000001E0向右移位八个十进制位置)。如此,根据一种方法,对于单精度,值0.10000001被强制作为被乘数(A.mant)而值1被强制作为乘数(B.mant),来自由乘法器执行的AB项相乘的结果是0.10000001,它对应于向右移位8个位置的-127。
[0034] Z.exp项沿加数(C.mant)数据路径被接受并且也通过右移位器205向右移位8个位置以使其在被注入到华莱士树208之前对准于乘法器输出。来自加法器209的结果对应于Z.exp项减去偏移127并向右移位8个位置。前导改变预测器210和左移位器211将去除任何前导0/1并将结果作为R.mant提供。R.exp同样就单精度通过指数计算逻辑计算出,即R.exp=8-(来自LCA210的前导0/1计数)+127+1。对于双精度,适用前述相同的操作,除了偏移为1023并且值被移位11位而不是8位。如此,R.exp=11-(来自LCA210的前导0计数)+1023+1。
[0035] 在输入项(Z.mant,Z.exp)是非正规(即具有0的偏移指数项和0.XXXXX形式的非零尾数)的情形下,Z.mant项在LCA210的控制下由左移位器211向左移位直到发现第一个前导1为止。结果作为R.mant提供。左移位计数对应于已知为负的指数的绝对值。因此,R.exp通过指数计算逻辑被表示为R.exp=-|来自LCA210的前导零计数|。
[0036] ROUND指令
[0037] ROUND指令的流程图示出于图5中。ROUND指令将输入项(S.mant;S.exp)的尾数S.mant圆整至由输入项Q规定的二进制位数。例如如果S=10111.11001E0且Q=2,指令将提供结果R=10111.11E0(即R.mant=10111.11;R.exp=0)。为使这种操作有效,S.mant项作为加数尾数输入(C.mant)被接受并通过右移位器205向右移位一个量=(S.mant中的小数位的数量)-Q。
[0038] 在前面给出的例子中,S.mant的小数位数为5(即在字串“11001”中存在5个位)。由此,S.mant被向右移位5-Q=5-2=3个位置。将10111.11001的输入S.mant项向右移位3个位置产生与10.11111E3对应的结果,它具有从原始输入S丢弃最低阶小数位串“001”的效果。在一个实施例中,指令支持下列圆整模式:1)向上圆整;2)向下圆整;3)向最接近偶数圆整以及4)向零圆整。
[0039] 完整的操作根据规定的圆整模式以及丢弃的小数位将最小数值向上或向下圆整,并给出具有原始指数的结果(即10111.11E0)。这里,创建掩码,该掩码包括与原始S.mant的部分对准的前导0,其保持与原始S.mant项中被丢弃的部分对准的拖尾1相连。在本文描述的例子中,这对应于0000000111。掩码与原始S.mant输入进行OR(或)运算以产生例如第一值1011111111。将掩码(1111111000)的NOT(非)与原始输入S.mant项进行AND(与)运算以产生第二值1011111000。圆整器217接收这两个值并使与向上圆整的值对应的第一值增1。第二值对应于非向上圆整的值。第一值或第二值将基于规定圆整模式以及从右移位器205丢弃的位被选择作为正确尾数答案。在该例中,丢弃的位对应于“001”,因此向上圆整不应当发生(在向最接近数圆整模式中),并且第二值被选为正确的尾数。在向上圆整(并且输入符号为正)模式或向下圆整(并且输入符号为负)的情形下,选择向上圆整的值。在向零圆整模式下总是选择非向上圆整的值。指数计算逻辑确定正确的指数(例如在向最接近数圆整模式下考虑S=11111.11111E0且Q=2:在归一化后,R.exp=S.exp+1)。
[0040] 注意,第一和第二值中的一个对应于偶数尾数值,而另一个对应于奇数尾数值。在向最接近偶数圆整的情形下,选择是基于最左侧丢弃的位以及其它丢弃位(粘滞位)的OR运算。如果最左侧丢弃位是1但粘滞位是0,则选择偶数值。如果粘滞位是1,则基于最左侧丢弃位进行选择:如果为1,选择向上圆整的值;如果为0,选择被截短的值(即非向上圆整的)。在向无穷大圆整的情形下,如果任一丢弃的小数位为1,则选择向上圆整的值;否则,如果所有丢弃的位是0,则选择非向上圆整的值。在一实施例中,向无穷大圆整的规则在向下圆整模式中运用于负输入,而在向上圆整模式中运用于正输入。向零圆整的规则在向下圆整模式中运用于正输入,而在向上圆整模式中运用于负输入。前述的圆整行为符合在IEEE标准754-2008中给出的圆整模式定义。
[0041] GETMANT
[0042] GETMANT指令的流程图示出于图6中。GETMANT提供浮点形式的尾数值。拟以浮点形式表达的尾数在C.mant输入侧被接受。令结果的尾数部分(下文中被称为“有效位数”)的形式为1.XXXX...X。输出值必需落入的数值范围(也称归一化值)也作为输入参数被提供。根据一个实施例,可规定四个区间:[1,2)、[1/2,1)、[1/2,2)、和[3/4,3/2)。
[0043] 范围[1,2)对应于形式1.XXXX...X的输出二进制数。在C.mant输入是形式1.XXX...X的情形下,C.mant输入项被简单地表示为输出结果。指数逻辑将指数结果置为
0(或偏移)以表示在正确范围内的输出值。
[0044] 范围[1/2,1)对应于形式0.1XXXX...X的输出二进制数。在C.mant输入是形式1.XXX...X的情形下,C.mant输入项简单地表示为输出尾数结果。指数结果被表示为-1(或偏移-1)以提供在规定范围内的输出值(即形式0.1XXXX...X的数值)。
[0045] 范围[1/2,2)对应于形式0.1XXX...X或1.XXXX...X.的输出二进制数。在C.mant输入是形式1.XXX...X的情形下,C.mant输入项被简单地表示为输出尾数结果。如果C.mant输入项是形式0.1XXX...X,则指数被表示为-1(或偏移-1)以提供正确数值范围的输出结果。如果C.mant输入项是形式1.XXXX...X,则指数被表示为0(或偏移)以提供正确数值范围的输出结果。
[0046] 范围[3/4,3/2)对应于形式0.11XXX...X或1.0XXX...X的输出二进制数。在C.mant输入是形式1.XXX...X的情形下,C.mant输入项被简单地表示为输出尾数结果。如果C.mant输入项是形式1.0XXX...X,则指数被表示为0(或偏移)以提供正确数值范围的输出结果。如果C.mant输入项是形式1.1XXX...X,则指数被表示为-1(或偏移-1)以提供正确数值范围的输出结果。
[0047] 对于输入项是非正规(即具有0的偏移指数项和0.XXXX...X形式的非零尾数)的任一前述指令来说,C.mant项在LZA210的控制下由左移位器211向左移位直到发现第一个前导1为止,这进而对应于表示形式1.XXXX...X的输出(它是所需输出形式)。然后如前所述地针对所适用的具体范围建立正确的指数。
[0048] REDUCE
[0049] REDUCE指令的流程图示出于图7中。REDUCE根据关系式R=X-Round(2MX)2-M提取输入值的化简自变量。这里,M是确定提取以之为基准的位位置的比例因数。输入值也规定圆整操作是向上圆整、向下圆整还是向最接近偶数圆整。例如,如果X=1.01010101且3 3 3
用比例因数3规定向下圆整,Round(2X)=1010.00000并且Round(2X)2 =1.01000000。
M -M
因此,X-Round(2X)2 =1.01010101-1.01000000=0.00010101。在这种情形下,R将用指数零表达为1.0101。
[0050] 参见图2,控制逻辑(未示出)接收用该指令作为输入提供的比例参数M。值X在Cmant.输入侧被接收并在控制逻辑的控制下通过左移位器204向左移位。具体地说,控制M逻辑使左移位器204将值X向左移位与比例参数M相等的二进制位数。这产生2X项。操作随后如针对ROUND指令所述那样继续,除了不使用右移位器205,因为对于当前操作来说,ROUND指令的Q参数为0。
[0051] 在一个实施例中,圆整器217能从该指令接收打算将其向上圆整、向下圆整还是向最接近偶数圆整的指示作为另一输入参数。针对这些不同模式的圆整器的操作是如前所述针对ROUND指令的。
[0052] 当通过圆整器217提供被圆整的答案时,它被右移位器205向右移位与比例参数M相等的十进制位数(注意,圆整器217输出被耦合于右移位器205输入)。右移位器205M -M的输出对应于Round(2X)2 并被传至具有适宜符号操纵的华莱士树209以使其负表示有效。乘法器在其A.mant或B.mant输入侧之一处接收在Cmant输入侧接收的同一输入值,M -M
而另一输入被固定在值1。因此,加法器209提供X-Round(2X)2 。在向上圆整的情形下,加法器209的结果将是负的或零。如果结果为负,则LCA将使左移位器211移出前导1。在向下圆整的情形下,加法器209结果将是正的或零。如果结果是正的,则LCA将使左移位器
211移出前导0。在向最接近偶数圆整的情形下,加法器结果将是负的、正的或零。LCA209将对于正结果和负结果造成如刚才描述的适宜移位。随后从函数单元提供输出。
[0053] RANGE
[0054] RANGE指令的流程图示出于图8中。RANGE指令接收两个值F、G并返回下面中的任何一个:i)F和G中的最小值;ii)F和G中的最大值;iii)F的绝对值和G的绝对值中的最小值;以及iv)F的绝对值和G的绝对值中的最大值。在一个实施例中,判断i)至iv)中的特定一个在指令中被标识以供执行。参见图2,在一个实施例中,对于前述的指令i)和ii),F在C.mant输入侧被提供而G在A.mant输入侧被提供。B.mant输入被强制为值1.0。
[0055] G的符号项被切换以实现通过华莱士树和加法器209的计算F-G。加法器209的输出的符号项表示F和G中的哪一个更大。具体地,如果符号项为正,F较大,或者如果符号项为负,则G较大。因此,在前一种情形下F作为输出被路由,而在后一种情形下G作为输出被路由。指令iii)和iv)同样地工作在这样的允诺下:即对于F和G值的符号项在其提交给乘法器前被认为是正值。
[0056] CLASS(分类)
[0057] CLASS指令确定操作数的类型。在一个实施例中,指令对应于多个不同数据类型和本质上对每种类型保留一个位位置的特殊输出格式的测试,并且如果操作数是针对类型作特殊测试的其中一个,则函数单元将1置于与这种类型对应的输出的位位置。在又一实施例中,存在被试验的八种不同的数据类型。它们是:i)QNaN;ii)负有界数(Negative Finite);iii)非正规(Denormall);iv)负无穷大;v)正无穷大;vi)负零;vii)正零;viii)SNAN在一个实施例中,函数单元中的控制逻辑(图2中未示出)对于在C.mant输入侧给出的操作数作出判断并在响应中营造出特殊的输出结果。
[0058] BLENDSEM(混合SEM)和FIXUPIMM(修正IMM)
[0059] BLENDSEM指令根据对应的直接位[7:0]有条件地合并第二源操作数中打包的双精度浮点值的符号、指数和尾数以及第一源操作数中打包的双精度浮点值的符号、指数和尾数。作为结果的打包双精度浮点值被存储在目的地寄存器中。直接位[7:0]判断来自第二源操作数或第一源操作数中的单精度值的相应符号、指数和尾数是否必须被复制至目的地。也基于直接控制来操纵特定值。
[0060] FIXUPIMM指令使用来自整型64向量的32位表值执行浮点64向量zmm2中的各种实数和特殊数类型的逐元素修正。该结果被合并入到浮点64向量zmm1中。特别旨在使该指令用于修正涉及一个源的算术计算的结果,以使这些算术计算与规范匹配,尽管该指令通常有益于修正多指令序列的结果以反映特殊数输入。例如,对rcp考虑rcp(0).Input0,则结果应当是无穷大。然而,若通过Newton-Raphson评价rcp,其中x=approx(1/0),则产生不正确的结果。为了应付这个问题,可在N-R倒数序列之后使用FIXUPIMM以将结果设置成正确值(即当输入为0时为INF(无穷大))。非正规输入操作数zmm1或zmm2被认为是正规输入并且既不触发任何修正也不触发出错报告。
[0061] 在一个实施例中,BLENDSEM和FIXUPIMM指令是在不同函数单元上执行的,这些函数单元被称为“混洗(shuffle)”函数单元。
[0062] RCP14和RSQRT14
[0063] RCP14指令执行源操作数(第二操作数)的四个/两个打包的双精度浮点值的近似倒数的SIMD计算,并将打包的双精度浮点结果存储在目的地操作数中。对于这种近似的-14最大相对误差小于2 。源操作数可以是ZMM寄存器或512位的存储器位置。目的地操作数是ZMM寄存器。RCP14PD指令不受圆整控制位的影响。当源值为0.0时,返回具有源值符号的∞。当源值为SNaN或QNaN时,SNaN被转换成QNaN或返回源QNaN。
[0064] 该RSQRT14指令执行源操作数(第二操作数)中的八个打包的双精度浮点值的平方根的近似倒数的SIMD计算,并将压缩的双精度浮点结果存储在目的地操作数中。对于这-14种近似的最大相对误差小于2 。源操作数可以是ZMM寄存器或512位的存储器位置。目的地操作数是ZMM寄存器。RSQRT14PD指令不受圆整控制位的影响。当源值为0.0时,返回具有源值符号的∞。当源操作数为∞时,返回具有源值符号的零。当源值是负值(0.0除外)时,返回浮点不定数。当源值为SNaN或QNaN时,SNaN被转换成QNaN或返回源QNaN。
[0065] 在一个实施例中,VRCP14和VRSQRT14指令是在另一不同的函数单元上执行的,这些函数单元被称为“PFPROMS”函数单元。
[0066] 具有前述功能的处理器也可实现在各种计算系统中。图9示出计算系统(例如计算机)的一个实施例。图9的示例性计算系统包括:1)可被设计成包括向量逻辑精简指令的一个或多个处理器901;2)存储器控制中枢(MCH)902;3)系统存储器903(其存在不同的形式,例如DDR RAM、EDO RAM等);4)高速缓存904;5)I/O控制中枢(ICH)905;6)图形处理器906;7)显示器/屏幕907(其存在不同的形式,例如阴极射线管(CRT)、平板、薄膜晶体管(TFT)、液晶显示器(LCD)、DPL等)以及一个或多个I/O设备908。计算系统也可包括硬盘驱动器(未示出)。
[0067] 一个或多个处理器901执行指令以执行计算系统履行的任何软件例程。指令频繁地涉及在数据上执行的某些种类的操作。数据和指令两者被存储在系统存储器903和高速缓存904中。高速缓存904通常被设计成具有比系统存储器903更短的等待时间。例如,高速缓存904可被集成到与处理器相同的片上和/或以较快的SRAM单元构造,而系统存储器903可以较慢的DRAM单元构造。由于相比系统存储器903往往将较频繁使用的指令和数据存储在高速缓存904中,因此计算机系统的总体性能效率提升。
[0068] 有意地使系统存储器903可为计算系统中的其它组件所用。例如,从计算系统的各接口(例如键盘鼠标打印机端口、LAN端口、调制解调器端口等)接收或从计算系统的内存元件(例如硬盘驱动器)获取的数据在软件程序实现中由一个或多个处理器901对其运行前经常被临时地排队进入系统存储器903。类似地,软件程序确定应当从计算系统通过计算系统接口之一送至外部实体或存储在内存元件中的数据经常在传输或存储之前临时地排队进入系统存储器903。
[0069] ICH905负责确保该数据正确地在系统存储器903及其合适的对应计算系统接口(以及内存设备,如果计算系统是如此设计的话)之间传递。MCH902负责管理系统存储器903在处理器901、接口和内存元件之间的访问的各种竞争请求,这些竞争请求相对于彼此在时间上紧接地出现。
[0070] 一个或多个I/O设备908也被实现在典型的计算系统中。I/O设备一般负责将数据转移至和/或自计算系统(例如联网适配器);或者负责计算系统中的大规模非易失性存储(例如硬盘驱动器)。ICH905具有其本身和观察的I/O设备908之间的双向点对点链路。
[0071] 在上述说明书中,已参考本发明具体示例实施例描述了本发明。然而,和明显,在不背离如所附权利要求所述的本发明的更宽泛精神和范围的情况下,可对这些实施例作出各种修改和改变。因此,应当以说明性而非限制性的意味看待说明书和附图。
QQ群二维码
意见反馈