首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定架构的默认GCC优化选项

特定架构的默认GCC优化选项
EN

Stack Overflow用户
提问于 2014-10-26 15:39:03
回答 1查看 402关注 0票数 1

我们的编译器课程功能练习要求我们比较与-O和-O3 gcc选项构建的代码。我的机器生成的代码与课程中的代码不一样。有没有一种方法可以计算出课程中使用的优化选项,以便在我的机器上获得相同的代码,并进行更有意义的观察?

我找到了如何在我的机器上获得优化选项:

代码语言:javascript
复制
$ gcc -O3 -Q --help=optimizer

但是,是否有一种方法可以在教授的机器上推断出这些内容,除非尝试并逐一修改(.ident "GCC:(Debian4.3.2-1.1) 4.3.2")?

感谢您的关注。

编辑:我注意到在我的机器上生成的代码缺少我的教授生成的序言和结语。有没有办法强制生成序言(google似乎没有带来多少)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-26 19:54:38

下面是您需要了解的编译器优化:它们依赖于体系结构。此外,它们主要是不同版本的编译器(gcc-4.9做了更多的东西,默认情况下比gcc-4.4)。在体系结构上,我指的是CPU微体系结构(Intel:Nehalem,Sandy,Ivy bridge,Haswell,KNC . AMD:Bobcat,Bulldozzer,Jaguar,.)。编译器通常转换输入代码(CC++ADA,.)进入一个与CPU无关的中介表示(GIMPLE,,用于GCC),在该表示上将执行大量的优化。之后,编译器将生成一个更接近程序集的低级表示形式。对于后者,将展开特定于体系结构的优化。此类优化包括选择延迟最低的指令,根据循环大小、指令缓存大小确定循环展开因子,等等。由于您生成的代码与您在类中得到的代码不同,所以我认为底层架构肯定是不同的。在这种情况下,即使使用相同的编译器标志,也无法获得相同的程序集代码(即使没有优化,也会得到不同的程序集代码)。为此,你应该集中精力比较优化代码和非优化代码,而不是试图坚持课堂上给出的内容。我甚至认为,将您的优化代码与您所得到的代码进行比较,是一个很好的反向工程练习。您可以找到我前面关于here中编译器优化的文章之一。关于这一主题的两本伟大的书是由Aho、Seti和Ulman编写的The Dragon (编译器:原理、技术和工具),以及Engineering a Compiler,由Keith和Linda撰写。

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

https://stackoverflow.com/questions/26574747

复制
相关文章

相似问题

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