gcc链接器优化标志的性能损失-flto

gcc链接器优化标志的性能损失-flto,gcc,optimization,linker,arm,linker-flags,Gcc,Optimization,Linker,Arm,Linker Flags,我正在开发ARMCortexA15并使用GCC编译(实际上使用XDC工具将其与TI的SYS/BIOS集成…) 启用-ftlo标志后,性能损失约为%30,这是一个重要值。我正在做一些简单的基准测试,比如pi和素数计算,以及系统相关的程序测试 下面是我的编译和链接标志。是否可以在没有任何错误的情况下降低此降级量?有没有可能的原因?从我在互联网上的搜索中,我发现flto可能不会提高性能,但我没有看到这样的性能损失 # Compile options. C_OPTS = -w\ -mcpu=cor

我正在开发ARMCortexA15并使用GCC编译(实际上使用XDC工具将其与TI的SYS/BIOS集成…)

启用-ftlo标志后,性能损失约为%30,这是一个重要值。我正在做一些简单的基准测试,比如pi和素数计算,以及系统相关的程序测试

下面是我的编译和链接标志。是否可以在没有任何错误的情况下降低此降级量?有没有可能的原因?从我在互联网上的搜索中,我发现flto可能不会提高性能,但我没有看到这样的性能损失

# Compile options.
C_OPTS =    -w\
-mcpu=cortex-a15 \
-mtune=cortex-a15 \
-mabi=aapcs \
-mapcs \
-mfpu=neon \
-mfloat-abi=hard \
-O3 \
-flto \
-fno-strict-aliasing \
-fno-delete-null-pointer-checks \
-fno-strict-overflow \

# Linker options.
L_OPTS = -nostartfiles \
-static \
-Wl,--gc-sections \
-Wl,-Map,$(BUILD_DIR)/$(NAME).map \
-mfloat-abi=hard \
-e wbcd_ep \
-flto \
-fuse-linker-plugin \

这是以前提出过的问题。Gcc版本很重要。告诉GCC一级/二级缓存的大小也很重要。你使用的链接器很重要。您应该向链接器传递一个
-O3
选项,以便LTO优化器进行优化。例如,
L_选择+=-O3
。对编译和链接编译使用相同的优化器设置是有意义的;因此,您可以对这两个变量都使用一个公共make变量,比如
-fno strict overflow
,等等。我试过了。Stragenly,其中一个项目不会在启动时等待。我不能理解这个问题,我可以假设生成的代码不知何故被破坏了。另一个项目正在运行,但没有性能提升。至少没有性能损失。
-O3
是危险的。在
-O3
中会有一些难以理解的优化过程。如果你不是很精通C语言,就不要使用它。