2

考虑到我正在从源代码 + mpfr、gmp、mpc、libelf 和 binutils 构建 GCC,像这样更改优化标志是个好主意吗

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

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

我有一个c2duo。

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

4

3 回答 3

4

您可以做两件事:

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

  2. 如果您不想经历冗长的引导过程,请在 GCC 配置时间设置CFLAGSCXXFLAGSCFLAGS_FOR_TARGET、等:CXXFLAGS_FOR_TARGET

    -O2 -flto -march=core2
    

    并设置LDFLAGSLDFLAGS_FOR_TARGET

    -flto
    

这将优化最安全的东西。

请注意,所有这些麻烦可能只会导致最终可执行文件的微小加速。

于 2013-06-16T18:03:25.463 回答
2

先测量,再优化。在这种情况下,我会首先尝试使用 stock 编译器编译 gcc,无论默认配置设置是什么(步骤 0)。

一旦我确定编译完成后,我会做

make distclean 

或类似的,然后测量使用该库存当前编译器进行编译所花费的时间。(步骤1)。

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

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

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

最后,比较时间(确保在每次编译之前都从相同的基本状态开始)。您真正关心的部分是第 2 步和第 4 步,但第 1 和第 3 步也可能提供信息。

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

于 2013-06-15T03:37:02.533 回答
1

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

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

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

于 2013-06-15T13:44:18.227 回答