最近我读了很多关于编程实践、设计等等的文章,我很好奇将乘法实现为位移位会带来什么真正的性能提升。
我读到的示例鼓励将x*320实现为常用例程的(x<<8 + x<<6)。
这在现代编译器中有多重要?如果有显著的性能提升,编译器是否可以在必要时自动将这些“简单乘法”转换为位移位?
有没有人必须在他们的项目中以这种方式使用位移位来实现更快的乘法?您可以期望获得哪些性能收益?
发布于 2011-10-11 04:32:41
是的,编译器将为您完成这些工作中的大部分。他们对此也很有攻击性。所以很少有必要自己去做。(特别是以可读性为代价)
然而,在现在的现代机器上,乘法并不比移位慢得多。因此,任何需要超过2个移位的数字都最好使用乘法。编译器知道这一点,并会做出相应的选择。
编辑:
根据我的经验,我在这方面从来没有超越过编译器,除非代码是通过SSE内部函数向量化的(编译器实际上并不会尝试优化)。
https://stackoverflow.com/questions/7718287
复制相似问题