忽略所有其他问题,如内存转移等。
我正在寻找"成本"的一些衡量标准,我想我会量化为预期的位翻转次数,用于乘以两个随机浮点数(比如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
答案 0 :(得分:2)
在现代处理器上,浮点乘法通常比加法略贵(这是编译器通常用2*x
替换x+x
的一个原因。)
在x86和x86_64上,浮点运算几乎总是使用SSE指令(ADDSS,MULSS等)来完成,其中加法和乘法是恒定时间,没有"早期输出" (这使得流水线更容易)。
实际的相对成本更难以量化,并且将取决于很多事情。这里的规范参考是Agner Fog"指令延迟,吞吐量和微操作故障列表":http://www.agner.org/optimize/
我听过的一个粗略启发式(虽然没有任何参考)是乘法需要大约50%的时间。