GCC:冲突的优化
Posted
技术标签:
【中文标题】GCC:冲突的优化【英文标题】:GCC: conflicting optimizations 【发布时间】: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-mathGraphite:关于内存访问的循环优化
-floop-interchange -floop-strip-mine -floop-block石墨:不太确定
-fgraphite-identityISL:关于内存访问和自动并行的循环优化
-floop-nest-optimizeGraphite:关于自动并行的循环优化
-floop-parallelize-all -ftree-parallelize-loops=2选项集似乎共享重要的功能重叠。如果这可能导致编译期间出现分段错误,我应该保留哪些选项以及应该剔除哪些选项以最大限度地提高性能?
【问题讨论】:
尝试使用-pipe -march=native -O2
构建,看看是否可行。如果是这样,请尝试-O3
,然后添加您想要的任何内容,直到它再次中断。并且请不要告诉我们您的构建时间太长,您无法做到这一点……如果您的构建时间那么长,那么您可能真的不需要这么多深奥的选项。 :)
段错误是在您运行编译器时,而不是在您运行代码时,不是吗?
@Christophe 哦,对不起,我的错
无论你给出什么选项,编译器都不应该出现段错误。如果可能的话,把你的代码删减到很小,然后把它报告给 gcc 的人。一旦你报告了它,你可能会得到一些关于如何解决它的建议......
【参考方案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 版本中。
【讨论】:
以上是关于GCC:冲突的优化的主要内容,如果未能解决你的问题,请参考以下文章