12

GHC 7.4.1 を使用して、Repa を使用するプログラムをコンパイルしようとしています。しかし、コンパイルの途中で、メモリが不足しています。ではghc -v、SpecConstr フェーズでスタックしていることがわかります。

SpecConstr は、GHC の Core-to-Core 変換の 1 つです。サイモン・ペイトン・ジョーンズはここに素晴らしい説明をしており、ここにいくつかのコードがありますが、私はGHCの内部の仕組みにあまり慣れていないので、かなり時間がかかります.

どうにかしてコンパイラを助けたいのですが、どこで動かなくなっているかを知る方法はありますか? または、より大きなマシンで再コンパイルできるようになるまで、この段階でメモリ使用量を制限する方法はありますか?

ありがとう、チャド

4

2 に答える 2

5

-fspec-constr-threshold=nフラグとを使用してコンパイルを試すことができます-fspec-constr-count=n。詳細はGHC docsにあります。7.4.1 では、デフォルトはしきい値の n=200 とカウントの n=3 です。

ただし、コードを見なくても、このバグに遭遇している可能性があります。その場合、上記のオプションが十分でない場合は、specconstr パスを完全に無効にする必要があるかもしれません。

于 2012-04-13T21:54:25.343 に答える
4

John L's answer に加えて、 flag でコンパイルするようにしてください-fno-liberate-case。liberate case 変換はコードの爆発を引き起こす傾向があり、それが SpecConstr の仕事を困難にします。

于 2012-04-15T12:04:09.267 に答える