浮点乘法与加法的计算成本是多少?

时间:2016-09-27 08:06:19

标签: floating-point complexity-theory multiplication

忽略所有其他问题,如内存转移等。

我正在寻找"成本"的一些衡量标准,我想我会量化为预期的位翻转次数,用于乘以两个随机浮点数(比如32位) ,与添加的成本相比。

我想可能有一些重要问题(比如数字是否具有相同的指数等)可能值得考虑。

编辑:为了澄清,我对执行这些操作所需的能量数量感兴趣,而不是硬件的时间或数量,这就是为什么我认为"预期的位翻转次数&#34 ;是兴趣的数量。我认为这是一个定义明确的问题,肯定有一些"预期的位翻转次数"给定算法要求执行浮点乘法...而且我正在寻找所有算法的最小值。

编辑2 :感谢大家的回应。我得到的最相关的回应是来自njuffa,他引用了Mark Horowitz's estimates(参见第33页)。 Horowitz的more up-to-date paper发布的数字略有不同,即:

Float32 Mult: 3.7pJ.  
Float32 Add:  0.9pJ
Int32 Mult:   3.1pJ
Int32 Add:    0.1pJ

1 个答案:

答案 0 :(得分:2)

在现代处理器上,浮点乘法通常比加法略贵(这是编译器通常用2*x替换x+x的一个原因。)

在x86和x86_64上,浮点运算几乎总是使用SSE指令(ADDSS,MULSS等)来完成,其中加法和乘法是恒定时间,没有"早期输出" (这使得流水线更容易)。

实际的相对成本更难以量化,并且将取决于很多事情。这里的规范参考是Agner Fog"指令延迟,吞吐量和微操作故障列表":http://www.agner.org/optimize/

我听过的一个粗略启发式(虽然没有任何参考)是乘法需要大约50%的时间。