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

Pet*_*ter 5 floating-point complexity-theory multiplication

忽略所有其他问题,如内存传输等。

我正在寻找“成本”的某种度量,我想我会将其量化为预期的位翻转次数,用于将两个随机浮点(例如 32 位)数相乘,与相加的成本。

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

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

编辑2:感谢大家的回应。我得到的最相关的回复来自 njuffa,他引用了Mark Horowitz 的估计(见第 33 页)。一个更先进的最新文件由霍洛维茨帖子略有不同的数字,那就是:

Float32 Mult: 3.7pJ.  
Float32 Add:  0.9pJ
Int32 Mult:   3.1pJ
Int32 Add:    0.1pJ
Run Code Online (Sandbox Code Playgroud)

Sim*_*rne 4

在现代处理器上,浮点乘法通常比加法稍微昂贵(这是编译器通常用 替换的原因之一2*xx+x

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

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

我听过的一个粗略的启发法(尽管没有任何参考资料)是乘法花费的时间大约要长 50%。