2017-09-21 14 views
1

私のHaskellプログラムはコンパイルに時間がかかります。ベンチマーキングGHCコンパイル時間

これは、私が-O1でコンパイルできてから1年以上経ちました。私が試した最後の時間に、プログラムをコンパイルするためだけに64GBのサーバーをセットアップし、一晩実行させました。それは記憶が不足していた。

私はコンパイル時間を短縮することを期待している大きなリエンジニアリングの変更に着手しようとしていますが、まず何がすばらしいのかを知る必要があります。

私は現在、これを行う方法には2つのアイデアを持っている:私は別の作品とタイミング それらをコンパイルしようとすることができて

  1. はフラグで私のプログラムをカバー。
  2. stack build用のラッパープログラムを作成すると、「[75 of 83] Compiling」のような行が検索され、その間の時間が表示されます。

(1)は本当に醜いですね。(2)不正確さとクロスモジュールコンパイルのために(2)は良い数字を出すとは思っていません。誰もが良いアイデアを持っていますか?

+0

あなたはメモリが不足している場合、あなたはいくつかの悪いがヒットしていますGHCの漸近線と(2)おそらくあなたがあなたのモジュールを依存関係ツリーとして見ることができるなら、おそらく助けになるでしょう。 (1)も私がTBHをするように聞こえる。遅さやテストケースを特定できる場合は、間違いなくGHC tracに報告してください。 – jberryman

+0

4年前、このプロジェクトの前身では、Genericを含むtypeclass解決に関連する遅さの原因を特定しました。すでにtracで報告されていました。私の知る限り、そのパフォーマンスの問題はまだ修正されていません。 コードのその部分を削除してしまいました。 4年後、私のコードにはまだNFDataインスタンスがありません。 –

+0

私のモジュールの依存関係ツリーをどのように見ることができますか?それは依存情報なしの提案(2)と比べてどのように役立ちますか? –

答えて

0

テキスト出力を見ているよりも簡単で簡単です。ビルドフォルダ内のファイルのタイムスタンプを見ることができます。

このコマンドは私のタイムスタンプでソートされたビルドファイルの素敵なリストを与えるので、私は大体、それは各に費やすどのくらい伝えることができます:

ls -l -c -T -R .stack-work/dist/x86_64-osx/Cabal-1.22.5.0/build/<source folder> | grep "rw" | grep "\." | awk '{print $8,$10}' | sort 
関連する問題