StackはGHCやCabalに並列ビルドのjobsオプションを伝えていませんが,伝えたとしてもGHCの問題で全然速くならない

CabalやGHCには-jオプションがあり,ビルド時に並列に処理するかを指示できます.

Stackはパッケージ毎に並列ビルド(依存関係のないパッケージを別々にビルドすること)はCPUのコア数に応じて行います.しかし,パッケージ自体の並列ビルドのオプションはcabalに指定していません.

日々GHCのビルドを待つ我々としては,コンパイル速度は高めたいところです.

これを指定すれば速くなるのではないかと思って調べました.

関連issueが出てきました.

Develop/Document multi-level parallelism policy · Issue #644 · commercialhaskell/stack

なるほどパッケージごとに並列ビルドしながらパッケージ自体を並列ビルドしたらCPUのコア数制限を簡単に突破してしまいますね.しかしそれ自体はシステムの監視などでどうにかなりそうです.

と思ったら興味深いコメントを発見しました.このリンクによると,

#9221 ((super!) linear slowdown of parallel builds on 40 core machine) – GHC

GHCはパラレルビルドを指定しても全く速くならないそうです.

これを見て,今のプロジェクトでGHCオプション指定して試してみれば良いじゃあないかと気が付きました.

計測結果

  • 指定なし: 1:26.80
  • --ghc-options='-j32': 1:22.80

本当に全然速くならないですね…誤差レベル.

私のアプリケーションがそんなに並列にしても恩恵が無いというのもあるのでしょうが,これでは並列ビルド対応させても私にはあまり恩恵が無さそうですね.

マイルストーンがGHC 8.6に設定してあるのでこれを期待しましょう.

このエントリーをはてなブックマークに追加 fb-like g-plusone pocket