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)
在现代处理器上,浮点乘法通常比加法稍微昂贵(这是编译器通常用 替换的原因之一2*x)x+x。
在 x86 和 x86_64 上,浮点运算几乎总是使用 SSE 指令(ADDSS、MULSS 等)完成,其中加法和乘法是恒定时间,没有“早期输出”(这使得流水线更容易)。
实际的相对成本更难以量化,并且取决于很多因素。这里的规范参考是 Agner Fog 的“指令延迟、吞吐量和微操作故障列表”:http://www.agner.org/optimize/
我听过的一个粗略的启发法(尽管没有任何参考资料)是乘法花费的时间大约要长 50%。