首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通常如何设置编译器的优化设置?

通常如何设置编译器的优化设置?
EN

Stack Overflow用户
提问于 2008-09-10 11:41:43
回答 10查看 736关注 0票数 6

你通常会将编译器设置为最快的速度还是最小的代码大小?或者您是否手动配置单个优化设置?为什么?

我注意到大多数时候人们倾向于将编译器优化设置保留为默认状态,这在visual c++中意味着最大速度。我一直认为,默认设置更多地是为了在基准测试中看起来更好,基准测试往往是完全适合L2缓存的小程序,而不是对整体性能最好的程序,所以我通常会将其设置为最小大小。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-09-10 11:52:50

作为Gentoo的用户,我在完整的操作系统上尝试了相当多的优化,在Gentoo forums上也有关于它的无休止的讨论。在wiki中可以找到一些对GCC来说很好的标志。

简而言之,优化大小在内存有限的旧Pentium3笔记本上效果最好,但在我的装有Core2Duo的主要台式机上,-O2总体上提供了更好的结果。

如果您对最优化的x86 (32位)特定标志感兴趣,还有一个small script

如果您使用的是gcc,并且确实想优化某个特定的应用程序,那么可以尝试使用ACOVEA。它运行一组基准测试,然后使用所有可能的编译标志组合重新编译它们。网站上有一个使用Huffman编码的例子(越低越好):

代码语言:javascript
复制
A relative graph of fitnesses:

   Acovea Best-of-the-Best: **************************************                (2.55366)
     Acovea Common Options: *******************************************           (2.86788)
                       -O1: **********************************************        (3.0752)
                       -O2: ***********************************************       (3.12343)
                       -O3: ***********************************************       (3.1277)
           -O3 -ffast-math: **************************************************    (3.31539)
                       -Os: *************************************************     (3.30573)

(请注意,它发现-Os是Opteron系统中最慢的。)

票数 6
EN

Stack Overflow用户

发布于 2008-09-10 14:23:58

除了缓存位置很重要(如Freund所说),微软做的另一件事是分析他们的应用程序,并找出在启动的前几秒钟执行了哪些代码路径。之后,它们将这些数据反馈给编译器,并要求它将在启动期间执行的部分紧密地放在一起。这会导致更快的启动时间。

我确实相信这项技术在VS中是公开可用的,但我不能百分之百确定。

票数 2
EN

Stack Overflow用户

发布于 2008-09-10 11:49:52

对我来说,这取决于我使用的是什么平台。对于一些嵌入式平台,或者当我在Cell处理器上工作时,您会遇到一些限制,比如非常小的缓存或为代码提供的最小空间。

我使用的是GCC,我倾向于把它留在"-O2“上,这是最”安全“的优化级别,它支持最小规模的速度。

我想说,这可能不会有太大的不同,除非您正在为一个非常高性能的应用程序进行开发,在这种情况下,您可能应该针对您的特定用例对各种选项进行基准测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档