从源代码构建GCC时更改优化标志是一个好主意吗?

时间:2013-06-14 21:34:32

标签: gcc

考虑到我是从源+ mpfr,gmp,mpc,libelf和binutils构建GCC,更改优化标志是个好主意

CFLAGS="-O3" CXXFLAGS="-O3" ./configure

配置GCC或任何其他软件时?

我有一个c2duo。

编辑:我担心这些标志可能会改变这些程序/库的行为。

3 个答案:

答案 0 :(得分:4)

您可以做两件事:

  1. 如果您是本地引导程序,则可以执行完整且完整的配置文件引导程序。这将使用引导编译器构建编译器和依赖项,为第三轮提供可用于优化自身的配置文件信息。在configure之后,执行make profiledbootstrap。请注意,您可以将依赖关系和东西放在gcc源代码树中,并且它们也应该在这个过程中构建。

  2. 如果您不想通过长篇配置的引导程序,请在GCC设置CFLAGSCXXFLAGSCFLAGS_FOR_TARGETCXXFLAGS_FOR_TARGET等。配置时间:

    -O2 -flto -march=core2
    

    并将LDFLAGSLDFLAGS_FOR_TARGET设置为

    -flto
    
  3. 这将优化最安全的东西。

    请注意,所有这些问题可能只会导致最终可执行文件的速度加快。

答案 1 :(得分:2)

先测量,然后优化。在这种情况下,我会先尝试 使用stock编译器编译gcc以及默认值 配置设置为(步骤0)。

一旦我确定然后干净利地完成编译,我会做

make distclean 

或类似,然后测量编译时间 库存当前编译器。 (步骤1)。

接下来,安装新的gcc并测量新gcc的时间(以及任何 其他工具),使用默认配置编译,编译 他们自己。 (第2步)

然后,使用任何-O optmization级别或其他级别进行编译 您喜欢的非默认设置。一旦你得到了 干净的编译,做'make distclean'并再次测量如何 很长一段时间它需要新的默认设置gcc来编译自己 使用非默认设置(步骤3)。

现在,你有一个可以用来编译的-O3(或其他)gcc 本身(步骤4)以与其他步骤相同的方式测量。

最后,比较时间(确定你已经开始了 每次编译前的基本状态相同)。你真正关心的部分 关于步骤2和步骤4,但是1和3也可以提供信息。

请注意,这确实只测量gcc(或其他任何速度)的速度 编译器)可以编译自己,如果你编写的代码 与此截然不同,您的里程可能会有所不同 - 但您可以 使用相同的技术来测量和比较速度 编译时的各种优化级别 你经常编译的代码。

答案 2 :(得分:1)

  编辑:我担心这些标志可能会改变这些程序/库的行为。

它不应该,但有时会改变/破坏行为 如果您想确定,请坚持使用经过良好测试的默认设置。

请注意,如果其他值lile -O1-O3产生了明显更好的性能,那么这些设置将成为标准,并且现在已经过测试。