【发布时间】: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