【问题标题】:GCC: conflicting optimizationsGCC:冲突的优化
【发布时间】:2014-08-30 07:19:11
【问题描述】:

由于构建时间较长,我无法充分缩小导致internal compiler error: Segmentation fault 的罪魁祸首(不过,我已经设法排除了 LTO)。存在于 GCC 版本 4.8.2、4.8.3 和 4.9.1 中,而不是一个错误,我怀疑其余各种优化策略之间存在冲突:

通用:很可能不相关,这里是为了完整性

  • -管道
  • -march=native
  • -O3
  • -msse2
  • -mfpmath=sse
  • -ffast-math

Graphite:关于内存访问的循环优化

  • -floop-interchange
  • -floop-strip-mine
  • -floop-block

石墨:不太确定

  • -fgraphite-identity

ISL:关于内存访问和自动并行的循环优化

  • -floop-nest-optimize

Graphite:关于自动并行的循环优化

  • -floop-parallelize-all
  • -ftree-parallelize-loops=2

选项集似乎共享重要的功能重叠。如果这可能导致编译期间出现分段错误,我应该保留哪些选项以及应该剔除哪些选项以最大限度地提高性能?

【问题讨论】:

  • 尝试使用-pipe -march=native -O2 构建,看看是否可行。如果是这样,请尝试-O3,然后添加您想要的任何内容,直到它再次中断。并且请不要告诉我们您的构建时间太长,您无法做到这一点……如果您的构建时间那么长,那么您可能真的不需要这么多深奥的选项。 :)
  • 段错误是在您运行编译器时,而不是在您运行代码时,不是吗?
  • @Christophe 哦,对不起,我的错
  • 无论你给出什么选项,编译器都不应该出现段错误。如果可能的话,把你的代码删减到很小,然后把它报告给 gcc 的人。一旦你报告了它,你可能会得到一些关于如何解决它的建议......

标签: c++ gcc optimization


【解决方案1】:

最终将 segfault 缩小到 -ffast-math-floop-parallelize-all 选项,仅此而已。此问题与[4.8/4.9 Regression] [graphite] Segmentation fault with -Ofast -floop-paralle... 相同,应在上游修复。由于该修复是在 6 月 29 日推送的,而 gcc 4.9.1 是在 7 月 16 日发布的,它是在 4 月分支的,它不包含在 4.8.3 和 4.9.1 版本中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多