编译器优化以获得最快的代码
-
20-09-2019 - |
题
我想选择编译器优化来生成尽可能快的应用程序。
我应该将以下哪些设置设置为 true?
- 死店消除
- 消除基本块和函数中的重复表达式
- 启用循环感应变量和强度降低
- 启用奔腾指令调度
- 扩展常见的内在函数
- 优化跳跃
- 使用寄存器变量
还有一个选项“生成最快的代码”,我显然已将其设置为 true。但是,当我将其设置为 true 时,上述所有选项仍设置为 false。
所以我想知道如果我将上述任何选项设置为 true 是否会加快应用程序的速度?
解决方案
所以我想知道如果我将上述任何选项设置为 true 是否会加快应用程序的速度?
我知道有些人会因此恨我,但是 这里没有人能如实回答你. 。你必须在有或没有它们的情况下尝试你的程序,并且 轮廓 每个构建并查看结果是什么。猜测工作不会让任何人有任何进展。
无论是否经过您的许可,编译器都已经进行了大量(!)的出色优化。最好的选择是以干净且有组织的方式编写代码,并担心可维护性和可扩展性。正如我喜欢说的:现在编码,稍后优化。
其他提示
不要对个人优化进行微观管理。编译器编写者都是非常聪明的人 - 只要将它们全部打开,除非您发现不需要这样做。您最好将时间花在优化代码(提高函数的算法复杂性等)上,而不是摆弄编译器选项。
我的其他建议是使用不同的编译器。英特尔作为优化编译器享有盛誉。VC和GCC当然也是不错的选择。
您可以使用不同的编译选项查看生成的代码,看看哪个最快,但我知道现在很多人没有这样做的经验。
因此,对应用程序进行概要分析会很有用。如果有一个明显需要速度的部分,请添加一些代码来执行它一千或一千万次,并使用它计时 utime()
如果有的话。循环应该运行足够长的时间,以便间歇性运行的其他进程不会影响结果 - 十到二十秒是流行的基准范围。或者运行多次计时试验。编译不同的测试用例并运行它以查看哪种效果最好。
花一两个小时研究优化选项很快就会发现大多数效果都很轻微。然而,花同样的时间思考算法的本质并进行小的改变(代码删除尤其有效)通常可以 极大地 提高执行时间。