通过编码是否有任何(非微优化)性能增益
float f1 = 200f / 2
相比于
float f2 = 200f * 0.5
几年前,我的一位教授告诉我,浮点除法比浮点乘法慢,但没有详细说明原因。
这个说法适用于现代 PC 架构吗?
Update1
关于评论,请也考虑这种情况:
float f1;
float f2 = 2
float f3 = 3;
for( i =0 ; i < 1e8; i++)
{
f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively
}
Update 2引用评论中的内容:
[我想]知道是什么算法/架构要求导致除法在硬件上比乘法复杂得多
是的,许多 CPU 可以在 1 或 2 个时钟周期内执行乘法,但除法总是需要更长的时间(尽管 FP 除法有时比整数除法更快)。
如果你看这个答案你会看到除法可以超过 24 个周期。
为什么除法比乘法花费的时间长得多?如果您还记得小学时的情况,您可能会记得乘法本质上可以通过许多同时加法来执行。除法需要迭代减法,不能同时执行,因此需要更长的时间。事实上,一些 FP 单元通过执行倒数近似并乘以该值来加速除法。它不太准确,但速度更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)