编译器优化以实现最快的代码

Posted

技术标签:

【中文标题】编译器优化以实现最快的代码【英文标题】:Compiler optimization for fastest possible code 【发布时间】:2010-01-14 05:20:11 【问题描述】:

我想选择编译器优化以生成最快的应用程序。

我应该将以下哪些设置设置为 true?

消除死店 消除基本块和函数中的重复表达式 启用循环感应变量和强度降低 启用 Pentium 指令调度 扩展常用的内在函数 优化跳跃 使用寄存器变量

还有“生成尽可能快的代码”选项,我显然已将其设置为 true。但是,当我将其设置为 true 时,上述所有选项仍设置为 false。

所以我想知道如果我将上述任何选项设置为 true,是否会加快应用程序的速度?

【问题讨论】:

【参考方案1】:

所以我想知道如果我将上述任何选项设置为 true,是否会加快应用程序的速度?

我知道有些人会因此而恨我,但是这里没有人可以如实回答你。您必须尝试使用​​和不使用它们的程序,并profile 每个构建并查看结果。猜测工作不会让任何人到达任何地方。

无论是否经过您的许可,编译器已经进行了大量优化。最好的办法是用干净和有条理的方式编写代码,并担心可维护性和可扩展性。正如我喜欢说的:现在编码,以后再优化。

【讨论】:

同意以有组织的方式进行编码和清理 - 但是找到任何可以在 IDE 选项切换时进行的快速优化并没有什么坏处 再一次,你不知道它不会受伤,你假设,也许是正确的。就像我说的那样,无论如何都会进行任何琐碎的优化,并且在优化的构建中(就像您启用的那样),它会完成您能想到的所有教科书优化,甚至可能更多。【参考方案2】:

不要对个别优化进行微观管理。编译器编写者是非常聪明的人 - 只需将它们全部打开,除非您认为不需要这样做。您的时间最好花在优化代码(提高函数的算法复杂性等)上,而不是摆弄编译器选项。

我的其他建议,使用不同的编译器。英特尔作为优化编译器享有盛誉。 VC 和 GCC 当然也是不错的选择。

【讨论】:

感谢特里,不幸的是,我的双手被绑在 rad-studio-2009 编译器上。【参考方案3】:

您可以查看具有不同编译选项的生成代码,看看哪个最快,但我知道现在很多人没有这样做的经验。

因此,对应用程序进行概要分析会很有用。如果有明显的部分需要速度,请添加一些代码以执行一千或一千万次,并使用utime()(如果可用)对其进行计时。循环应该运行足够长的时间,以使其他间歇性运行的进程不会影响结果——十到二十秒是一个流行的基准范围。或者进行多次计时试验。编译不同的测试用例并运行它,看看什么效果最好。

花一两个小时玩优化选项很快就会发现,大多数效果都很小。然而,同样的时间花在思考算法的本质和进行小的更改(代码删除特别有效)上通常可以大大缩短执行时间。

【讨论】:

以上是关于编译器优化以实现最快的代码的主要内容,如果未能解决你的问题,请参考以下文章

-O1 -O2 -O3 优化的原理是什么?

编译器都做了哪些优化?

编译器能否优化变量以使用少于一个字节的空间?

编译原理学习笔记代码优化

硬核文章:编译器都做了哪些优化?

优化C++软件