CN1961284A - 使用n位乘加操作实现不变量除数的整数除法的方法和系统 - Google Patents
使用n位乘加操作实现不变量除数的整数除法的方法和系统 Download PDFInfo
- Publication number
- CN1961284A CN1961284A CN200580017331.5A CN200580017331A CN1961284A CN 1961284 A CN1961284 A CN 1961284A CN 200580017331 A CN200580017331 A CN 200580017331A CN 1961284 A CN1961284 A CN 1961284A
- Authority
- CN
- China
- Prior art keywords
- round
- divisor
- instruction
- reciprocal approximation
- error offset
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/535—Dividing only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/535—Indexing scheme relating to groups G06F7/535 - G06F7/5375
- G06F2207/5356—Via reciprocal, i.e. calculate reciprocal only, or calculate reciprocal first and then the quotient from the reciprocal and the numerator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种被除数和除数的整数除法系统,包括:预计算模块,用于选择除数的倒数近似值和舍入误差补偿值;以及指令生成模块,用于生成至少一条指令,该指令用于使用倒数和舍入误差补偿值来计算被除数的商。倒数近似值具有与除数相同的预定二进制位数,并且预计算模块确定在选择倒数近似值和舍入误差补偿值时使用向上舍入和向下舍入中的那一个。
Description
技术领域
本发明的实施例涉及软件程序的编译和执行。更具体地,本发明的实施例涉及使用在除数的倒数近似值中具有最小舍入误差的N位乘加(multiply-add)操作来实现不变量除数(invariant divisor)(例如,编译时常量或运行时不变量)的整数除法的方法和系统。
背景技术
处理器上的整数除法通常比乘法代价更高。通常,整数除法与其它运算操作相比相对较少。因为该原因且因为直接在处理器内部以硬件实现除法的复杂性,所以在现代处理器体系结构随之而来的趋势是略去对整数除法的直接硬件支持,而代之以依赖于软件实现。
以软件实现整数除法需要特别引起注意的情况发生在除数是编译时常量、或运行时循环不变量时。现有的研究和发展显示在这种情况下,无符号整数除法x/d可以以(ax+b)/2s来计算,其中a是除数的换算的(scaled)倒数近似值,b是对于舍入误差的补偿,而s是右移计数。通过使用倒数近似值,整数除法可以作为乘加操作、以及随后的右移操作来实现。
在这种情况下,必须谨慎选择或确定除数的倒数。如果没有谨慎选择倒数近似值,所得到的商经常遭受差一错误(off-by-one error)。为了确定倒数的值,近似值a可以从精确的换算的倒数向上舍入或向下舍入。但是,为了执行N位除法,基于公式(ax+b)/2s的所有现有实现都要求在最坏的情况下,近似值a被舍入为N+1个有效位。超出N位的额外位使得该乘加操作成为N+1位乘加操作。
现有的实现受到对于N+1位乘法的要求。这是因为处理器天生就只实现N位运算。因此,N+1位乘法必须通过N位乘法和附加的运算操作来合成,这为整数除法增加了额外的处理操作。对于一些除数(例如,倒数近似值以“0”结束),因为额外位是0,所以可以将其优化去除;或者对偶数除数,被除数可以预先移一位,以将该问题降低为N-1位除数的除法操作。但是,这并不总是可行的,尤其对于循环不变量除数,其中循环体内的代码必须处理最坏的情况,即除数是奇数且倒数近似值以“1”结束的情况。
因此,需要一种使用在除数的倒数近似值中具有最小舍入误差的N位乘加操作来实现不变量除数(例如,编译时常量或运行时不变量)的整数除法的方法和系统。
附图说明
通过实例说明了本发明实施例的特性和优点,且本发明实施例的范围并不限于所示的特定实施例。
图1示出实现本发明的一个实施例的整数除法系统的结构,其中该整数除法系统包括预计算模块和指令生成模块。
图2示出根据本发明的一个实施例的图1的整数除法系统的编译器实现。
图3示出根据本发明的另一个实施例的包括即时(just-in-time)编译器的运行时环境,其中该即时编译器包括图1的整数除法系统。
图4是一个流程图,示出图1的预计算模块所执行的一般预计算处理,用于计算除数的倒数近似值和舍入误差补偿值。
图5是一个流程图,示出图1的预计算模块的一个特定预计算处理,其中该处理是针对N位无符号除法并使用整数运算。
图6是一个流程图,示出图1的预计算模块的另一个特定预计算处理,其中该处理是针对无符号除数的N位有符号除法并使用整数运算。
图7是一个流程图,示出图1的预计算模块的另一个特定预计算处理,其中该处理是针对N位无符号除法并使用浮点数运算。
图8是一个流程图,示出图1的预计算模块的另一个特定预计算处理,其中该处理是针对无符号除数的N位有符号除法并使用浮点数运算。
具体实施方式
图1示出使用在除数的倒数近似值中具有最小舍入误差的N位乘加操作,实现常量或不变量除数(例如,编译时常量或运行时不变量)d的整数除法的整数除法系统10。根据本发明的一个实施例,整数除法系统10检查除数d以确定将其倒数向上舍入还是向下舍入到N位。这使得整数除法系统10能够避免合成N+1位运算的额外操作,因此将除法减少到N位(较高的或较低的)乘加操作、以及随后的右移操作。
从图1可以看出,整数除法系统10包括预计算模块11和指令生成模块12。预计算模块11用于选择除数d的倒数近似值a和对于倒数近似值a的舍入误差补偿值b。指令生成模块12用于生成乘加指令和右移指令,所述指令用于使用倒数近似值a、舍入误差补偿值b和移位计数m来计算除法的商。
如下面更详细描述的、并根据本发明的一个实施例,预计算模块11确定应当使用向上舍入还是向下舍入来选择倒数近似值a和咸舍入误差补偿值b。预计算模块11还计算移位计数m。预计算模块11使用整数运算或者浮点数运算来计算该确定。这里,术语“向上舍入”和“向下舍入”指的是向上或向下将倒数近似值a从N+1位舍入到N位,并确定舍入误差补偿值b。例如,向上舍入可以指倒数近似值a被设为1/d的前N位加上1,而向下舍入可以指倒数近似值a被设为1/d的前N位。对于无符号除数的有符号除法,向上舍入和向下舍入可以分别指朝着正无穷方向舍入和朝着负无穷方向舍入。这里,前N位指从最左边的1开始的N个最高有效位。
进行舍入确定所用的测试依赖于整数除法是有符号还是无符号的、以及确定向上舍入或向下舍入时所使用的是整数运算还是浮点数运算。对无符号整数除法使用整数运算,预计算模块11使用下面的测试来确定将倒数近似值a向上舍入还是向下舍入:
(td+d)mod2N≤2m
其中t=floor((2m+N)/d)且m=floor(log2(d))。值m指示非隐式的(non-implicit)右移计数的量。符号floor(x)表示不超过x的最大整数。这里,除非除数d等于2m(即,除数是2的幂),否则适用该测试。如果测试结果是真,则预计算模块11将倒数近似值a向上舍入(即,a=t+1),并且舍入误差补偿值b被设为0。如果测试结果是假,则预计算模块11将倒数近似值a向下舍入(即,a=t),并且舍入误差补偿值b可以被选为a。
使用整数运算并对于无符号除数的有符号整数除法,预计算模块11使用下面的测试来确定将倒数近似值a向上舍入(即,朝着正无穷方向)还是向下舍入(即,朝着负无穷方向):
(td+d)mod 2N≤XMA.HU(d,t,0)
其中t=floor((2m+N)/d)且m=floor(log2(d)),而XMA.HU(d,t,0)表示提供dt+0的高N位的合并(fused)乘加操作。这里,除非除数d等于2m,否则适用该测试。如果测试结果是真,则预计算模块11将倒数近似值a向上舍入(即,a=t+1)。如果测试结果非真,则预计算模块11将倒数近似值a向下舍入(即,a=t)。舍入误差补偿值b在向上舍入和向下舍入两种情况下都可以被选为t/2。
使用浮点数运算,预计算模块11使用下面的公式来计算倒数近似值a:
a=SIGNIFICAND(t)
其中t=RNDN(1/d)。这里RNDN指将1/d的值舍入到最近的N个有效位(除非d=2N-1)。如果d=2N-1,则舍入到最近的N个有效位或向下舍入到2-N都是可以接受的。SIGNIFICAND(x)指x的浮点数表示的N个最高有效位。
对于舍入误差补偿值b,预计算模块11需要确定应当使用向上舍入还是向下舍入来计算该值。对于使用浮点数运算的无符号整数除法,预计算模块11采用下面的测试来作出确定:
RNDN(-dt+1)≤0
其中m=(BIAS-1)-EXPONENT(t)。RNDN暗示应当作为只有最后舍入而没有中间舍入的合并负数乘加来进行该计算。BIAS表示浮点数表示中的典型偏倚(bias),而EXPONENT表示有偏的浮点数指数(即,值x值在浮点数中被表示为SIGNIFICAND(x)*2(EXPONENT(x)-BIAS-N+1)。如果测试结果是真,则预计算模块11选择舍入误差补偿值b等于0(因为该测试指示发生了向上舍入)。否则,值b可以被设为a(因为该测试指示发生了向下舍入)。对于无符号除数的有符号除法,舍入误差补偿值b在向上舍入和向下舍入的情况下都可以被简单地设为t/2(即,不需要进行该确定)。结合图1-8,将在下面详细描述整数除法系统10。
再次参考图1,整数除法系统10可以通过软件或固件实现。对于使用整数运算的计算,整数除法系统10的硬件体系结构支持包括支持表示为XMA.HU的N位整数合并乘加指令的处理器。这一指令的执行提供或返回计算(ax+b)的较高的(或高的)N位。可选地,表示为XMA.LU的整数合并乘加指令可以用于提供或返回计算(ax+b)的较低的N位。
这里,术语“合并”指乘法和加法运算操作被作为单一操作来完成,该单一操作内部以2N位精度来计算,但是只提供较高的(或较低的)N位。对于N位无符号整数a、x和b,上述指令可以被更正规地定义为:
XMA.HU(a,x,b)=(ax+b)/2N
XMA.LU(a,x,b)=(ax+b)mod 2N
在一个实施例中,N位处理器是64位处理器。可选地,该处理器可以具有不同长度。例如,N位处理器可以是32位处理器或128位处理器。
在没有乘加指令的处理器上,XMA.LU指令可以用N位乘法和N位加法来模拟,而XMA.HU可以通过使用例如2N位来精确计算ax+b并只取较高的N位来模拟。乘加指令还可以在具有有符号乘累加(multiply-accumulate)指令的处理器上模拟。例如,XMA.HU(a,x,b)可以被模拟为“x+(XMA.HS(a,x,b))”,其中XMA.HS表示将a和x(但没有b)作为有符号整数的乘加指令。
除了整数合并乘加指令,整数除法系统10的硬件体系结构支持还包括表示为SHR.U(x,m)=(x/2m)的右移指令。
当使用浮点数运算时,整数除法系统10的硬件体系结构支持包括:(1)支持浮点数合并乘加指令的N位处理器,以及(2)从浮点数值中提取二进制指数和有效位的操作。例如,对于浮点数值u、v和w,这一操作被表示为(uv+w)m,其利用单个最后舍入将(uv+w)计算为N个有效位,其中N包括最高的1位。指数偏倚被表示为BIAS,而提取指数和有效位的操作被分别表示为EXPONENT和SIGNIFICAND。非零值f具有值SIGNIFICAND(f)*2EXPONENT(f)-BIAS-N+1。
处理器或微处理器(图1中未示出,但可以包括在图3的执行系统33中)的整数运算单元和浮点数运算单元可以提供上述硬件支持。处理器可以是计算机系统内的处理器,其中计算机系统可以是个人计算机系统、笔记本计算机系统、工作站计算机系统、大型机计算机系统、服务器计算机系统或超级计算机。可选地,可以在处理器的高速缓存中预先建立对于所有倒数近似值及其对应的舍入误差补偿值的查找表。在操作过程中,处理器可以访问查找表,检索特定除数的倒数近似值和舍入误差补偿值。
整数除法系统10可以在多种不同系统中实现。例如,整数除法系统10可以在编译器(例如,图2)中实现。在另一个实例中,整数除法系统10可以在如图3所示的运行时环境的即时编译器中实现。在另一个实例中,整数除法系统10可以作为处理器中的固件来实现,以执行动态(on-the-fly)整数除法,包括倒数近似值a和舍入误差补偿值b的计算。在另一个实施例中,整数除法系统10可以在软件程序(例如,编译后代码)内部实现。编译器实现和即时编译器实现将结合图2-3在下面详细描述。
根据本发明的一个实施例,图2示出图1的整数除法系统10的编译器实现。从图2可以看出,编译器21用于将源代码程序20编译为编译后代码22。编译器21包括图1的整数除法系统10。源代码20是用一种已知的高级编程语言(例如,C++)编写的软件程序。编译后代码22可以是能直接在特定平台数据处理系统或计算机系统上执行的本机代码(native code)。可选地,编译后代码22还可以是中间语言代码(例如,Java字节码),其可以然后被解释为、或随后由运行时系统(或虚拟机)内的即时(JIT)编译器编译为能由特定平台目标计算机系统执行的本机代码或机器码。编译器21是由计算机系统所主控(或运行在其上)的软件系统。在编译过程中,当编译器21编译具有已知或常量除数的整数除法指令时,编译器21调用整数除法系统10。
图3示出图1的整数除法系统10的运行时环境实现。从图3可以看出,运行时环境31将编译后代码30编译为由执行系统33执行的本机代码(或机器码)。运行时环境31是运行在执行系统33上并由执行系统33主控的软件系统(或Java虚拟机)。执行系统33使用运行时环境31以协助将编译后代码30进一步编译为执行系统33的特定平台(或特定体系结构)的本机代码。运行时环境31还可以被称为虚拟机或运行时系统。
执行系统33可以是,例如,个人计算机、个人数字助理、网络计算机、服务器计算机、笔记本计算机、工作站、大型机计算机、或超级计算机。在本发明的一个实施例中,执行系统33包括一个处理器(未示出),该处理器包括高速缓存(也未示出),该高速缓存包括对于所有倒数近似值及其对应的舍入误差补偿值的查找表。编译后代码30可以通过诸如局域网、因特网或无线通信网络这样的通信链接传递到执行系统33。
运行时环境31包括使用图1的整数除法系统10的即时编译器32。即时编译器32在运行时对编译后代码30进行编译以生成本机代码或机器码。术语“即时”指在编译后代码30内的每个方法或类真正用于执行时,即时编译器32将其编译或翻译为本机代码。当即时编译器32遇到整数除法指令时,它调用整数除法系统10。
可选地,整数除法系统10可以在编译后代码(例如,编译后代码30)内部实现。在这种情况下,整数除法系统10可以作为程序内的代码序列来实现,并在进入具有循环不变除数的循环之前执行。在这一实现中的整数除法系统10还可以作为程序内的代码序列来实现,并为具有相同除数的多个除法执行。在这种情况下,编译后代码可以被直接执行或由不包含整数除法系统10的JIT编译器进一步编译。
回来参考图1及如上所述,整数除法系统10用于使用乘加操作加上右移操作来实现整数除法。当整数除法系统10接收到具有已知或常量除数的整数除法指令时,整数除法系统10在知道被除数后返回可以执行整数除法的乘加指令和右移指令。例如,对于被除数为x而除数为d的整数除法,整数除法系统10将该除法转换为(ax+b)/2s,其中a是除数的倒数近似值,b是舍入误差补偿值,而s是右移计数。然后整数除法系统10生成乘加和右移指令。
整数除法系统10使用指令生成模块12来生成乘加和右移指令。例如,在上述硬件支持下,对于无符号整数除法x/d,指令生成模块12所生成的乘加和右移指令是SHR.U(XMA.HU(a,x,b),m)。如果整数除法是无符号整数除数的有符号整数除法,那么指令生成模块12所生成的乘加和右移指令是SHR.U(x+XMA.HS(a,x,b),m)。
在生成乘加和右移指令之前,整数除法系统10使用预计算模块11来选择、确定或计算倒数近似值a和舍入误差补偿值b。根据本发明的一个实施例,预计算模块11确定应当使用向上舍入还是向下舍入来选择倒数近似值a和/或舍入误差补偿值b。预计算模块11使用整数运算或浮点数运算来作出该确定。图4示出根据本发明的一个实施例,预计算模块11选择或计算倒数近似值a和/或舍入误差补偿值b的整个预计算处理,这将在下面详细描述。
从图4可以看出,预计算处理在方框40开始。在41,确定除数d是否是特殊情况。这里,术语“特殊情况”是指除数d是特殊值,其向上舍入或向下舍入不起作用的情况。例如,当除数d等于1时是特殊情况。此外,对倒数近似值向上舍入或向下舍入的确定非常复杂(例如,也许需要超精度运算)的情况也可以设为特殊情况。例如,当除数d是2的幂时可以设为特殊情况。根据本发明的一个实施例,图1的预计算模块11作出这种特殊情况的确定。
如果,在41,确定除数d是特殊情况,这意味着将确定倒数近似值a和舍入误差补偿值b而不需要向上舍入或向下舍入的确定。在这种情况下,处理移动到方框42。但是,如果确定除数d不是特殊情况,则处理移动到方框43。
在42,因为除数d已经被确定为特殊,所以使用“被1除(divide-by-one)”技术来计算倒数近似值a和舍入误差补偿值b(在图4中称为R&RECV)而不经过向上舍入或向下舍入的确定。这里,“被1除”技术是指倒数近似值a和舍入误差补偿值b中的每一个都被赋予值2N-1。根据本发明的一个实施例,图1的预计算模块11进行这一计算。然后该处理在方框46结束。
在43,确定应当使用向上舍入或还是向下舍入来计算倒数近似值a和舍入误差补偿值b。根据本发明的一个实施例,图1的预计算模块11作出这一确定。取决于该整数除法是有符号还是无符号的,以及取决于使用整数运算还是浮点数运算来计算倒数近似值a和舍入误差补偿值b,图1的预计算模块11使用不同的测试公式来作出这一确定。
例如,如果该整数除法是无符号整数除法并且使用整数运算来计算倒数近似值a和舍入误差补偿值b,则图1的预计算模块11使用“(t*d+d)mod 2N≤2m”测试来作出确定,其中t是临时量,被计算为(2m+N)/d。作为进一步的实例,如果该整数除法是无符号除数的有符号整数除法并且使用整数运算来计算倒数近似值a和舍入误差补偿值b,则图1的预计算模块11使用“(td+d)mod 2N≤XMA.HU(d,t,0)”测试来作出确定。进一步,如果该整数除法是无符号整数除法并且使用浮点数运算来计算倒数近似值a和舍入误差补偿值b,则图1的预计算模块11使用“RNDN(-dt+1)≤0”测试来作出确定,其中t=RNDn(1/d)。如果该整数除法是有符号整数除法并且使用浮点数运算来计算倒数近似值a和舍入误差补偿值b,则图1的预计算模块11不使用任何测试来作出确定。取而代之,预计算模块11跳过这一确定,并简单地令m=(BIAS-1)-EXPONENT(t)、a=SIGNIFICAND(t)、且b=a/2。这些将在下面结合图5-8详细描述。
如果,在43,确定应当使用向上舍入,则处理移动到方框44。如果,在43,确定应当使用向下舍入,则处理移动到方框45。
在44,根据本发明的一个实施例,图1的预计算模块11基于向上舍入的确定来计算倒数近似值a和舍入误差补偿值b(R&RECV)。此外,取决于该整数除法是有符号还是无符号的,以及使用整数运算还是浮点数运算来计算a和舍入误差补偿值b,图1的预计算模块11不同地选择或计算的倒数近似值a和舍入误差补偿值b。这将在下面结合图5-8详细描述。然后该处理在方框46结束。
在45,根据本发明的一个实施例,图1的预计算模块11基于向下舍入的确定来计算倒数近似值a和舍入误差补偿值b。此外,取决于该整数除法是有符号还是无符号的,以及使用整数运算还是浮点数运算来计算a和舍入误差补偿值b,图1的预计算模块11不同地选择或计算倒数近似值a和舍入误差补偿值b。这将在下面结合图5-8详细描述。然后该处理在方框46结束。
图5示出图1的预计算模块11使用整数运算对于无符号整数除法的预计算处理。图6示出图1的预计算模块11使用整数运算对于无符号除数的有符号整数除法的预计算处理。这意味着在图5-6中,图1的预计算模块11使用处理器的整数运算单元进行确定和计算。图7示出图1的预计算模块11使用浮点数运算对于无符号整数除法的预计算处理。图8示出图1的预计算模块11使用浮点数运算对于无符号除数的有符号整数除法预计算处理。
参考图5,该处理在方框50开始。在51,输入除数d和N的值。根据本发明的一个实施例,预计算模块11(图1)执行这一功能。N的值指示在N位处理器中表示的除数d的长度。
在52,确定N是否大于0且除数d是否大于或等于1但小于2N。根据本发明的一个实施例,图1的预计算模块11执行这一功能。如果确定是否定的(即,否),那么该处理在方框59结束。如果确定为肯定结果(即,是),则该处理移动到方框53。
在53,m的值被计算为floor(log2(d))。根据本发明的一个实施例,图1的预计算模块11执行这一计算。
在54,确定除数d是否是特殊情况(即,d=2m)。根据本发明的一个实施例,图1的预计算模块11执行这一确定。如果在54除数d被确定为是特殊情况(即,是),那么该处理移动到方框55,在这一步预计算模块11令倒数近似值a和舍入误差补偿值b中的每一个具有2N-1的值。然后该处理在方框59结束。
如果在54确定除数d不是特殊情况(即,否),那么该处理移动到方框56,在这一步,根据本发明的一个实施例,预计算模块11作出另一确定。这一确定用于决定将倒数近似值a从N+1位向上舍入还是向下舍入到最近的N位(并因此选择舍入误差补偿值b的值)。这里为进行确定所使用的测试是(td+d)mod 2N≤2m,其中t是临时量,被计算为(2m+N)/d。虽然结果通常是单个字,但是该计算必须在双精度(2N位)下进行。这意味着该计算需要用双字除以单字以计算t。然后执行该测试“(td+d)mod 2N≤2m”。图1的预计算模块11只使用如“mod 2N”所指示的N位无符号运算来计算“(td+d)mod 2N”。在(由加利福尼亚圣塔克拉拉的英特尔公司销售的)64位英特尔安腾处理器上,“(td+d)mod 2N”简单地为XMA.LU(t,d,d)。
如果在56确定将倒数近似值a向下舍入(即,否),那么该处理移动到方框57。否则,该处理移动到方框58。
在57,令倒数近似值a和舍入误差补偿值b都为t(即,(2m+N)/d)。根据本发明的一个实施例,图1的预计算模块11执行这一功能。然后该处理在方框59结束。
在58,令倒数近似值a为(t+1),而舍入误差补偿值b被设为0(即,没有误差补偿)。根据本发明的一个实施例,图1的预计算模块11执行这一功能。然后该处理在方框59结束。下面列出执行图5的处理的代码序列。
Inputs:uword d and N,with N≥1 and 1≤d≤2N
int m:=floor(log2(d));
uword a,b;
if d=2mthen
a:=2N-1;
b:=2N-1;
else
uword t=floor((2N+m)/d);
uword r=(td+d)mod 2N;
ifr≤2m
a:=t+1;
b:=0;
else
a:=t;
b:=t;
endif
endif
Emit SHR.U(XMA.HU(a,x,b),m)
这里,假设类型“uword”的变量保存任意N位无符号值,并且假设类型“iht”的变量保存整数。此外,图1的指令生成模块12执行上述代码序列中的最后一条指令。
参考图6,图1的整数除法系统11使用整数运算对于无符号除数的有符号整数除法的预计算处理在方框60开始。在61,输入除数d和N的值。根据本发明的一个实施例,预计算模块11(图1)执行这一功能。N的值指示在N位处理器中表示的除数d的长度。
在62,确定是否N大于0且除数d大于或等于1但小于2N。根据本发明的一个实施例,图1的预计算模块11执行这一功能。如果确定是否定的(即,否),那么该处理在方框70结束。如果确定为肯定结果(即,是),则该处理移动到方框63。
在63,m的值被计算为log2(d),向下舍入。根据本发明的一个实施例,图1的预计算模块11执行这一计算。
在64,确定除数d是否是特殊情况(即,d=2m)。根据本发明的一个实施例,图1的预计算模块11执行这一确定。如果在64除数d被确定为特殊情况(即,是),那么该处理移动到方框65,在这一步,预计算模块11令倒数近似值a和舍入误差补偿值b中的每一个具有2N-1的值。然后该处理在方框70结束。
如果在64确定除数d不是特殊情况(即,否),那么该处理移动到方框66,在这一步,根据本发明的一个实施例,预计算模块11令t(临时量)被计算为(2m+N)/d。此外,预计算模块11令舍入误差补偿值b等于t/2(即,总是进行误差补偿)。
在67,确定将倒数近似值a从N+1位向上舍入(即,朝着正无穷方向)还是向下舍入(即,朝着负无穷方向)到最近的N位。这里为进行确定所使用的测试是(td+d)mod2N≤XMA.HU(d,t,0)。如果确定将倒数近似值a向上舍入(即,是),那么该处理移动到方框69。否则,该处理移动到方框68。
在69,倒数近似值a被设为(t+1)。根据本发明的一个实施例,图1的预计算模块11执行这一功能。然后该处理在方框70结束。
在68,倒数近似值a被设为t。根据本发明的一个实施例,图1的预计算模块11执行这一功能。然后该处理在方框70结束。下面列出实现图6的处理的代码序列。
Inputs:uword d and N,with N≥1 and 1≤d≤2N
int m:=floor(log2(d));
uword a,b;
if d=2mthen
a:=2N-1;
b:=2N-1;
else
uword t=floor((2N+m)/d);
b:=t/2;
if(td+d)mod 2N≤XMA.HU(d,t,0)then
a:=t+1;
else
a:=t;
endif
endif
Emit SHR.U(x+XMA.HS(a,x,b),m)
这里,图1的指令生成模块12执行上述代码序列中最后一条指令。
图7示出图1的预计算模块11使用浮点数运算对于无符号整数除法的预计算处理。这意味着使用处理器的浮点数运算单元进行计算和确定。从图7可以看出,该处理在方框80开始。在81,输入除数d和N的值。根据本发明的一个实施例,预计算模块11(图1)执行这一功能。
在82,确定是否N大于0并且除数d大于或等于1但小于2N。根据本发明的一个实施例,图1的预计算模块11执行这一功能。如果确定是否定的(即,否),那么该处理在方框90结束。如果确定为肯定结果(即,是),则该处理移动到方框83。
在83,确定除数d是否是特殊情况。这里,特殊情况被定义为d=1。根据本发明的一个实施例,图1的预计算模块11执行这一确定。如果在83确定除数d不是特殊情况(即,否),那么该处理移动到方框84。如果在83确定除数d是特殊情况(即,是),那么该处理移动到方框85。
在84,临时浮点数值t被设为RNDN(1/d),其中RNDN(1/d)使用例如Newton-Raphson迭代序列来完成。这意味着使用Newton-Raphson迭代求1/d的近似值,其中所需迭代的数目依赖于N的值。
Newton-Raphson迭代序列应当求1/d的近似值,舍入到最近的N位(除非d=2N-1)。如果d=2N-1,则该序列允许提供1/d的最近的N位近似值,或者1/d向下舍入到2-N。这样的序列,是数值计算领域从业者非常熟悉的,使用倒数近似值指令来初始化一个初始估计,并使用合并乘加操作来优化这一估计。
在85,t被设为1-2-N,这是向下接近了一最小精度单位的除数d的倒数。这具有将t的有效位设为“全1”且其无偏指数为-1的效果。根据本发明的一个实施例,图1的预计算模块11执行这一功能。
在86,m被设为(BIAS-1)-EXPONENT(t)。这意味着m被设为(-1)减去无偏指数。此外,倒数近似值a被设为SIGNIFICAND(t)。根据本发明的一个实施例,图1的预计算模块11执行这一功能。此后,只剩下判断b应该为0还是a。这在方框87完成。
在87,确定b应当为0或a。根据本发明的一个实施例,图1的预计算模块11使用测试“RNDN(-td+1)≤0”来判断。这一测试实际上确定了通过将倒数近似值a的N位有效位舍入到最近的值所引入的舍入误差是正还是负。该误差最大是2-N。该测试可以由合并乘加操作来执行。如果该测试是真(即,向上舍入),那么该处理移动到方框89。否则,该处理前进到方框88。
在88,舍入误差补偿值b被设为a。根据本发明的一个实施例,图1的预计算模块11执行这一功能。然后该处理在方框90结束。
在89,舍入误差补偿值b被设为0(即,没有误差补偿)。根据本发明的一个实施例,图1的预计算模块11执行这一功能。然后该处理在方框90结束。下面列出实现图7的处理的代码序列。
Inputs:uword d and N,with N≥1 and 1≤d≤2N
uword a,b;
real t
if d=1then
t:=1-2-N;
else
t=RNDN(1/d);
endif
a:=SIGNIFICAND(t)
m:=(BIAS-1)-EXPONENT(t)
if RNDN(-td+1)≤0then
b:=0;
else
b:=a;
endif
Emit SHR.U(XMA.HU(a,x,b),m)
这里,图1的指令生成模块12执行上述代码序列中的最后一条指令。
图8示出图1的预计算模块11使用浮点数运算对于无符号除数的有符号整数除法进行的预计算处理。这意味着使用处理器的浮点数单元进行计算和确定。另外从图7-8可以看出,图8中方框100-105执行与图7中方框80-85相同的功能。因此,图8中这些功能方框100-105将不在下面详细描述。
在图8中,在106,m被设为(BIAS-1)-EXPONENT(t),a被设为SIGNIFICAND(t),且b被设为a/2。根据本发明的一个实施例,图1的预计算模块11执行这一功能。然后处理在方框107结束。下面列出实现图8的处理的代码序列。
Inputs:uword d and n,with N≥1 and 1≤d≤2N
uword a,b;
real t
if d=1then
t:=1-2-N;
else
t=RNDN(1/d);
endif
a:=SIGNIFICAND(t)
m:=(BIAS-1)-EXPONENT(t)
b:=a/2
Emit SHR.U(x+XMA.HS(a,x,b),m)
这里,图1的指令生成模块12执行上述代码序列中的最后一条指令。
图4-8是说明根据本发明的多个实施例,图1的预计算模块11计算倒数近似值a和舍入误差补偿值b的预计算处理的流程图。图中所说明的一些过程可以顺序执行、并行执行或以所描述的顺序之外其它顺序执行。应当理解,并不是需要所描述的所有过程,可以增加其它过程,并且所说明的一些过程可以被其它过程代替。
在前面的说明书中,通过参考本发明的特定的示例性实施例,描述了本发明的多个实施例。但是很明显,在不背离本发明的实施例的较广精神和范围的情况下,可以对本发明的实施例作出各种变化和修改。因此,本说明书和附图是作为示例性的而不是限制性的。
Claims (25)
1、一种被除数和除数的整数除法系统,包括:
预计算模块,用于选择所述除数的倒数近似值和舍入误差补偿值,其中,所述倒数近似值具有与所述除数相同的预定二进制位数,并且所述预计算模块确定在选择所述倒数近似值和所述舍入误差补偿值时使用向上舍入和向下舍入中的哪一个;
指令生成模块,用于生成指令,该指令用于使用所述倒数近似值和所述舍入误差补偿值来计算所述被除数的商。
2、如权利要求1所述的系统,其中,所述预计算模块通过使用处理器的整数运算单元计算所述倒数和所述舍入误差补偿值,来选择所述倒数和舍入误差补偿值。
3、如权利要求1所述的系统,其中,所述预计算模块通过使用处理器的浮点数运算单元计算所述倒数和所述舍入误差补偿值,来选择所述倒数和舍入误差补偿值。
4、如权利要求3所述的系统,其中,对于无符号除数的有符号除法,所述向上舍入和向下舍入分别指将所述倒数近似值朝着正无穷方向舍入和朝着负无穷方向舍入。
5、如权利要求1所述的系统,其中,所述指令生成模块所生成的所述指令包括合并乘加指令和右移指令。
6、如权利要求1所述的系统,其中,所述预计算模块通过从处理器的高速缓存中的查找表中检索所述倒数和舍入误差补偿值,来选择所述倒数和舍入误差补偿值。
7、如权利要求1所述的系统,其中,所述预计算模块和所述指令生成模块位于编译器内。
8、如权利要求1所述的系统,其中,所述预计算模块和所述指令生成模块位于运行时环境的即时编译器内。
9、如权利要求1所述的系统,其中,所述预计算模块和所述指令生成模块作为代码序列位于编译后的代码程序内。
10、一种选择整数除法中除数的倒数近似值和舍入误差补偿值的计算机实现的方法,包括:
确定使用向上舍入和向下舍入中的哪一个来选择所述倒数近似值和舍入误差补偿值;
基于所述确定来选择所述倒数近似值和所述舍入误差补偿值,其中,所述倒数近似值具有与所述除数相同的预定二进制位数。
11、如权利要求10所述的方法,其中,使用处理器的整数运算单元来执行所述确定和选择。
12、如权利要求10所述的方法,其中,使用处理器的浮点数运算单元来执行所述确定和选择,其中,对于无符号除数的有符号除法,所述向上舍入和向下舍入分别指将所述倒数近似值朝着正无穷方向舍入和朝着负无穷方向舍入。
13、如权利要求10所述的方法,其中,通过从处理器的高速缓存中的查找表中检索所述倒数近似值和所述舍入误差补偿值来执行所述选择。
14、一种执行整数除法的方法,包括
检查除数,以确定应当使用向上舍入和向下舍入中的哪一个来选择所述除数的倒数近似值和舍入误差补偿值;
基于所述检查来选择所述倒数近似值和所述舍入误差补偿值,其中,所述倒数近似值具有与所述除数相同的预定二进制位数;
生成至少一条指令,该指令用于使用所述倒数近似值和所述舍入误差补偿值来计算被除数的商。
15、如权利要求14所述的方法,其中,使用处理器的整数运算单元来执行所述确定和选择。
16、如权利要求14所述的方法,其中,使用处理器的浮点数运算单元来执行所述确定和选择。
17、如权利要求16所述的方法,其中,对于无符号除数的有符号除法,所述向上舍入和向下舍入分别指将所述倒数近似值朝着正无穷方向舍入和朝着负无穷方向舍入。
18、如权利要求14所述的方法,其中,所生成的所述指令包括合并乘加指令和右移指令。
19、如权利要求14所述的方法,其中,通过从处理器的高速缓存中的查找表中检索所述倒数近似值和所述舍入误差补偿值来执行所述选择。
20、一种包含机器可访问介质的制品,其中所述机器可访问介质包括指令序列,所述指令序列包括指令,所述指令当被执行时使所述机器执行:
检查除数,以确定应当使用向上舍入和向下舍入中的哪一个来选择所述除数的倒数近似值和舍入误差补偿值;
基于所述检查来选择所述倒数近似值和所述舍入误差补偿值,其中,所述倒数近似值具有与所述除数相同的预定二进制位数;
生成至少一条指令,该指令用于使用所述倒数近似值和所述舍入误差补偿值来计算被除数的商。
21、如权利要求20所述的制品,其中,使用处理器的整数运算单元来执行所述确定和选择。
22、如权利要求20所述的制品,其中,使用处理器的浮点数运算单元来执行所述确定和选择。
23、如权利要求22所述的制品,其中,对于无符号除数的有符号除法,所述向上舍入和向下舍入分别指将所述倒数近似值朝着正无穷方向舍入和朝着负无穷方向舍入。
24、如权利要求20所述的制品,其中,所生成的所述指令包括合并乘加指令和右移指令。
25、如权利要求20所述的制品,其中,通过从处理器的高速缓存中的查找表中检索所述倒数近似值和所述舍入误差补偿值来执行所述选择。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/879,397 | 2004-06-29 | ||
US10/879,397 US20050289209A1 (en) | 2004-06-29 | 2004-06-29 | Method and system of achieving integer division by invariant divisor using N-bit multiply-add operation |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1961284A true CN1961284A (zh) | 2007-05-09 |
Family
ID=34972724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200580017331.5A Pending CN1961284A (zh) | 2004-06-29 | 2005-06-17 | 使用n位乘加操作实现不变量除数的整数除法的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20050289209A1 (zh) |
EP (1) | EP1763738A1 (zh) |
CN (1) | CN1961284A (zh) |
RU (1) | RU2006143196A (zh) |
WO (1) | WO2006012063A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508633A (zh) * | 2011-12-02 | 2012-06-20 | 四川和芯微电子股份有限公司 | 除法器逻辑电路及实现除法器逻辑电路的方法 |
CN103164185A (zh) * | 2011-12-16 | 2013-06-19 | 上海华虹集成电路有限责任公司 | 用纯组合电路实现除法计算的电路 |
CN103488458A (zh) * | 2012-06-11 | 2014-01-01 | 英特尔移动通信有限责任公司 | 除法器、用于提供输出信号的方法和边沿跟踪器 |
CN106959840A (zh) * | 2016-01-08 | 2017-07-18 | 瑞昱半导体股份有限公司 | 除法运算装置及其运算方法 |
CN111399803A (zh) * | 2019-01-03 | 2020-07-10 | 北京小米松果电子有限公司 | 除法运算方法、装置、存储介质及电子设备 |
CN111813372A (zh) * | 2020-07-10 | 2020-10-23 | 上海擎昆信息科技有限公司 | 一种高精度低时延实现32位整数除法的方法及装置 |
CN112256235A (zh) * | 2020-10-28 | 2021-01-22 | Oppo广东移动通信有限公司 | 除运算方法及除法器、除法装置、电子设备、存储介质 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8140608B1 (en) | 2007-05-31 | 2012-03-20 | Nvidia Corporation | Pipelined integer division using floating-point reciprocal |
US8060551B2 (en) * | 2007-12-30 | 2011-11-15 | Agere Systems Inc. | Method and apparatus for integer division |
US8938485B1 (en) * | 2008-02-12 | 2015-01-20 | Nvidia Corporation | Integer division using floating-point reciprocal |
TWI386845B (zh) * | 2008-09-12 | 2013-02-21 | Altek Corp | Error calculation of the integer division operation circuit |
US8655937B1 (en) | 2009-04-29 | 2014-02-18 | Nvidia Corporation | High precision integer division using low precision hardware operations and rounding techniques |
GB201117318D0 (en) | 2011-10-06 | 2011-11-16 | Imagination Tech Ltd | Method and apparatus for use in the design and manufacture of integrated circuits |
RU2498393C1 (ru) * | 2012-07-27 | 2013-11-10 | Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Вятский государственный университет ФГБОУ ВПО "ВятГУ" | Способ деления целых двоичных чисел без остатка начиная с младших разрядов |
US9213639B2 (en) * | 2012-09-25 | 2015-12-15 | Teradata Us, Inc. | Division of numerical values based on summations and memory mapping in computing systems |
US9753693B2 (en) | 2013-03-15 | 2017-09-05 | Imagination Technologies Limited | Constant fraction integer multiplication |
JP2016057831A (ja) * | 2014-09-09 | 2016-04-21 | 株式会社東芝 | 浮動小数点演算装置、及び情報処理システム |
CN106354473B (zh) * | 2015-07-16 | 2019-02-12 | 浙江大华技术股份有限公司 | 一种除法器和求商和余数的方法 |
US10372414B2 (en) * | 2017-10-27 | 2019-08-06 | Advanced Micro Devices, Inc. | Fractional pointer lookup table |
US11625244B2 (en) * | 2021-06-22 | 2023-04-11 | Intel Corporation | Native support for execution of get exponent, get mantissa, and scale instructions within a graphics processing unit via reuse of fused multiply-add execution unit hardware logic |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9312745D0 (en) * | 1993-06-21 | 1993-08-04 | Questech Ltd | Accurate digital divider |
WO2001046796A1 (fr) * | 1999-12-22 | 2001-06-28 | Wataru Ogata | Systeme de calcul utilisant la methode de newton-raphson |
US6598065B1 (en) * | 1999-12-23 | 2003-07-22 | Intel Corporation | Method for achieving correctly rounded quotients in algorithms based on fused multiply-accumulate without requiring the intermediate calculation of a correctly rounded reciprocal |
-
2004
- 2004-06-29 US US10/879,397 patent/US20050289209A1/en not_active Abandoned
-
2005
- 2005-06-17 RU RU2006143196/09A patent/RU2006143196A/ru not_active Application Discontinuation
- 2005-06-17 WO PCT/US2005/021581 patent/WO2006012063A1/en not_active Application Discontinuation
- 2005-06-17 CN CN200580017331.5A patent/CN1961284A/zh active Pending
- 2005-06-17 EP EP05761924A patent/EP1763738A1/en not_active Withdrawn
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508633A (zh) * | 2011-12-02 | 2012-06-20 | 四川和芯微电子股份有限公司 | 除法器逻辑电路及实现除法器逻辑电路的方法 |
CN102508633B (zh) * | 2011-12-02 | 2014-10-22 | 四川和芯微电子股份有限公司 | 除法器逻辑电路及实现除法器逻辑电路的方法 |
CN103164185A (zh) * | 2011-12-16 | 2013-06-19 | 上海华虹集成电路有限责任公司 | 用纯组合电路实现除法计算的电路 |
CN103488458A (zh) * | 2012-06-11 | 2014-01-01 | 英特尔移动通信有限责任公司 | 除法器、用于提供输出信号的方法和边沿跟踪器 |
CN103488458B (zh) * | 2012-06-11 | 2017-04-12 | 英特尔德国有限责任公司 | 除法器、用于提供输出信号的方法和边沿跟踪器 |
CN106959840A (zh) * | 2016-01-08 | 2017-07-18 | 瑞昱半导体股份有限公司 | 除法运算装置及其运算方法 |
CN106959840B (zh) * | 2016-01-08 | 2019-06-28 | 瑞昱半导体股份有限公司 | 除法运算装置及其运算方法 |
CN111399803A (zh) * | 2019-01-03 | 2020-07-10 | 北京小米松果电子有限公司 | 除法运算方法、装置、存储介质及电子设备 |
CN111813372A (zh) * | 2020-07-10 | 2020-10-23 | 上海擎昆信息科技有限公司 | 一种高精度低时延实现32位整数除法的方法及装置 |
CN111813372B (zh) * | 2020-07-10 | 2021-05-18 | 上海擎昆信息科技有限公司 | 一种高精度低时延实现32位整数除法的方法及装置 |
CN112256235A (zh) * | 2020-10-28 | 2021-01-22 | Oppo广东移动通信有限公司 | 除运算方法及除法器、除法装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
RU2006143196A (ru) | 2008-06-20 |
EP1763738A1 (en) | 2007-03-21 |
WO2006012063A1 (en) | 2006-02-02 |
US20050289209A1 (en) | 2005-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1961284A (zh) | 使用n位乘加操作实现不变量除数的整数除法的方法和系统 | |
CN1296817C (zh) | 模乘方法及装置及模乘计算单元 | |
CN1287257C (zh) | 用于算术表达式优化的方法和装置 | |
CN1302380C (zh) | 处理器和编译器 | |
CN1108560C (zh) | 用于存储与多种编程语言相关的执行数据的方法和装置 | |
CN1928809A (zh) | 用于执行浮点运算的系统、设备和方法 | |
CN1783054A (zh) | 处理器 | |
CN1975662A (zh) | 算术运算单元、信息处理设备和算术运算方法 | |
CN1172238C (zh) | 利用符号语言翻译器产生软件代码的方法和系统 | |
CN1655118A (zh) | 处理器和编译器 | |
CN1838024A (zh) | 对数处理系统和方法 | |
CN1684058A (zh) | 处理器 | |
CN1608247A (zh) | 自动指令集体系结构的产生 | |
CN1918546A (zh) | 程序转换装置及程序转换方法 | |
CN1918542A (zh) | 使用单指令多数据(simd)运算来计算超越函数 | |
CN1607518A (zh) | 在Montgomery乘法内利用SIMD指令 | |
CN1821951A (zh) | 算术单元 | |
CN1738238A (zh) | 高速可配置rsa加密算法及协处理器 | |
CN1862524A (zh) | 数字信号处理器中执行多个向量稀疏卷积方法与系统 | |
CN1278931A (zh) | 特别适于译码数字音频信号的数字信号处理器 | |
CN1577250A (zh) | 用于实现2的幂的浮点估计的系统与方法 | |
CN1143213C (zh) | 高速处理循环的编译器和处理器 | |
CN1890629A (zh) | 使用按比例调整的整数的浮点运算 | |
CN1195808A (zh) | 算术运算系统 | |
CN1700203A (zh) | 基2单路深度延时反馈的流水线构成fft处理器的实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |