我最近一直在阅读很多关于编程实践,设计等等的文章,并对将乘法实现为位移的实际性能提升感到好奇。
我正在阅读的示例鼓励将x * 320实现为(x <&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&quot; 6)。
现代编译器的相关性如何?如果有显着的性能提升,编译器是否可以根据需要自动将这些“简单乘法”转换为位移?
有没有人不得不在他们的项目中采用这种方式进行位移以实现更快的乘法?您可以期待什么性能提升?
答案 0 :(得分:3)
是的,编译器会为您完成大部分工作。他们也非常积极。所以很少需要自己做。 (特别是以可读性为代价)
然而,现在在现代机器上,乘法并不比变速慢得多。因此,任何需要超过2个班次的数字都可以通过乘法更好地完成。编译器知道这一点,并会相应地选择。
编辑:
根据我的经验,除非通过SSE内在函数(编译器并没有真正尝试优化)对代码进行矢量化,否则我从未能够超越该领域的编译器。