编译器优化以获得最快的代码

时间:2010-01-14 05:20:12

标签: c++ optimization c++builder-2009

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

  

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

我知道有些人会因此而讨厌我,但没有人可以如实回答你。您必须在有和没有它们的情况下尝试您的程序,并且配置文件每个构建并查看结果。猜猜工作不会让任何人在任何地方。

无论是否经过您的许可,编译器已经进行了大量优化(!)。最好的办法是将代码编写成干净有序的内容,并担心可维护性和可扩展性。正如我想说的:现在代码,稍后进行优化。

答案 1 :(得分:1)

不要对个别优化进行微观管理。编译器编写者是非常聪明的人 - 除非你看到特定的需要,否则只需打开它们。通过优化代码(提高函数的算法复杂性等)而不是摆弄编译器选项,可以更好地花费时间。

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

答案 2 :(得分:0)

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

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

花一两个小时玩优化选项会很快发现大多数都会产生轻微影响。但是,同时考虑算法的本质并进行小的更改(代码删除特别有效)通常可以大大改善执行时间。