12

我正在使用 GHC 7.4.1 尝试编译使用 Repa 的程序。但是在编译过程中,我的内存不足。使用ghc -v,我可以看到它陷入了 SpecConstr 阶段。

SpecConstr 是 GHC 的核心到核心转换之一。Simon Peyton Jones在这里有一个很好的描述,并且这里有一些代码,但是对我来说这很慢,因为我对 GHC 的内部工作不是很熟悉。

我希望能够以某种方式帮助编译器 - 有没有办法告诉它卡在哪里?或者,有没有办法限制这个阶段的内存使用,直到我可以在更大的机器上重新编译?

谢谢,乍得

4

2 回答 2

5

您可以尝试使用标志-fspec-constr-threshold=n-fspec-constr-count=n. 更多细节在GHC 文档中。对于 7.4.1,阈值的默认值为 n=200,计数的默认值为 n=3。

但是,如果没有看到代码,您可能会遇到这个错误。在这种情况下,如果上述选项还不够,您可能需要完全禁用 specconstr 通道。

于 2012-04-13T21:54:25.343 回答
4

除了 John L 的回答之外,请确保您使用 flag 进行编译-fno-liberate-case。自由案例转换往往会导致代码爆炸,从而使 SpecConstr 的工作更加困难。

于 2012-04-15T12:04:09.267 回答