是否可以使用硬件平方根执行除法运算?
Posted
技术标签:
【中文标题】是否可以使用硬件平方根执行除法运算?【英文标题】:Is is possible to perform a division operation with a hardware square root? 【发布时间】:2014-10-30 19:35:06 【问题描述】:我想知道如果可以访问硬件中的浮点平方根单元,是否有任何算法可以加速浮点除法?
如果有,那些算法是什么?
【问题讨论】:
如果您有硬件log
可能会有所帮助,但很难看出硬件sqrt
对除法有何帮助。
这可能是数学上最好的想法——即,你能想出一种方法来表达A/B
的平方根A
和/或B
吗?
@starbox:不管你有没有硬件平方根,减法和逆乘法可能会更快。想想“6 / 3”所需的步骤。当您的代码设置和调用硬件平方根设备时,我的代码执行所需的减法并首先完成。
@ThomasMatthews:您会对整数和浮点除法之间的差异感到惊讶。对于 FP,可以在除尾数的同时减去指数。并且除尾数实际上更容易,因为它们都是 24 位,并设置了第一位。
@starbox 如果它是sqr
单位而不是sqrt
那么你可以使用这个***.com/a/18398246/2521214 用于sqrt 可能存在一些近似除法的疯狂数学系列,但通常使用更复杂的单位完成更简单的任务是浪费时间和精力,也没有提到让它工作所需的门......嘿,现在我知道这是你的问题:)
【参考方案1】:
除以平方根实际上是除法运算通常在硬件中实现的方式。更准确地说,平方根单元几乎普遍在内部计算平方根倒数 (1/sqrt(X)
),因为有了它,人们可以轻松地执行除法和平方根运算:sqrt(x) = x*(1/sqrt(x))
和 R=X/Y=X*Z*Z
其中Z=1/sqrt(Y)
。
如果有返回估计的硬件指令,可以通过以下迭代方法改进结果:
Z = Z * (3-Y*Z*Z )/2
【讨论】:
我找不到任何的证据。 Wikipedia 对较旧的 Intel 和 AMD 相当清楚(绝对不是这样),Itanium 肯定不会像这样工作,而且通常这不会为您提供必要的精度:IEEE754 要求正确的除法(不是相关的问题。门很便宜,效率低下的实现浪费的功率是一个问题。这同样适用于 120W 怪物 CPU 和 120 mW 嵌入式 SoC。 Newton Raphson 除法不尝试找到倒数的平方根。 en.wikipedia.org/wiki/…另外,你能展示你的作品吗?我为倒数的平方根计算了牛顿拉夫森迭代,它与您的公式不符...... 没关系,我制定了相同的公式。我只是认为它不会在任何地方使用,因为您可以直接使用 Newton raphson 求解 1/y,而不是求解平方根。 @Maxaon3000:如果一个人只有一个硬件用于一定数量的“估计表”条目,使用一张表来近似 1/sqrt(x) 可能比使用一张表来获得更好的性能 1/ x 和另一个 1/sqrt(x) 但每个条目只有一半。以上是关于是否可以使用硬件平方根执行除法运算?的主要内容,如果未能解决你的问题,请参考以下文章