gpt4 book ai didi

gcc - 用于提高代码优化性能的编译器选项

转载 作者:行者123 更新时间:2023-12-05 03:13:11 26 4
gpt4 key购买 nike

我正在将代码从 INTEL 架构移植到 ARM 架构。我试图在 centos 上使用 arm 交叉编译器构建相同的代码。是否有任何编译器选项可以提高可执行镜像的性能,因为 INTEL 上的镜像可能无法在 ARM 上提供类似的性能。有没有办法做到这一点?

最佳答案

GCC 中存在许多优化选项。默认情况下,编译器会尝试使编译过程尽可能短,并生成使调试容易的目标代码。然而,gcc 也提供了几个优化选项。

GCC 中提供了四个通用级别的性能增量优化,可以通过传递以下选项之一来激活:-O0-O1-O2 -O3。这些级别中的每一个都会激活一组优化,这些优化也可以通过指定相应的命令行选项手动激活。例如,对于 -O1,编译器使用递减和分支指令(如果可用且适用)执行分支,而不是递减寄存器,将其与零进行比较并在单独的指令中进行分支.此递减和分支 也可以通过传递-fbranch-count-reg 选项手动指定。考虑到在每个级别执行的优化也取决于目标架构,您可以通过使用 -Q --help=optimizers 选项运行 GCC 来获取可用和启用的优化列表。

一般来说,优化级别对应于(请注意,在每个级别上还应用了先前级别的优化):

  • -O0:默认级别,编译器会尝试减少编译时间并生成易于调试器处理的目标代码
  • -O1:编译器尝试减少代码大小和执行时间。仅执行不占用大量编译时间的优化。编译可能会占用更多内存。
  • -O2:编译器应用几乎所有不影响代码大小的可用优化。编译需要更多时间,但性能应该会提高。
  • -O3:编译器还应用可能增加代码大小的优化(例如内联函数)

有关所有优化选项的详细说明,您可以查看 here .
作为一般性评论,请考虑编译器优化是为在一般情况下工作而设计的,但它们的有效性在很大程度上取决于您的编程和运行它的架构。

编辑:
如果您对内存分页优化感兴趣,可以使用 -freorder-blocks-and-partition 选项(也可以使用 -O2 激活)。此选项重新排序每个函数内的基本 block ,以将它们划分为热 block (经常调用)和冷 block (很少调用)。 热 block 然后被放置在连续的内存位置。这应该会增加缓存位置和分页性能。

关于gcc - 用于提高代码优化性能的编译器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com