我最近阅读了很多有关编程实践、设计等的文章,并且对将乘法实现为位移位所带来的实际性能提升感到好奇。
我读到的示例鼓励将 x*320 实现为常用例程的 (x<<8 + x<<6)。
这在现代编译器中有多相关?如果有显着的性能提升,编译器是否可以根据需要自动将这些“简单乘法”转换为位移位?
是否有人在他们的项目中不得不采用这种方式进行位移来实现更快的乘法?您期望获得哪些性能提升?
最佳答案
是的,编译器会为您完成大部分工作。他们对此也非常有侵略性。所以很少需要自己做。 (特别是以可读性为代价)
但是,在现在的现代机器上,乘法并不比移位慢“那么”。因此,任何需要超过 2 次移位的数字最好使用乘法来完成。编译器知道这一点并会做出相应的选择。
编辑:
根据我的经验,我在这方面从来无法超越编译器,除非代码通过 SSE 内在函数进行矢量化(编译器并没有真正尝试优化)。
关于通过位移位快速乘法提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718287/