私のHaskellプロジェクトはLinking dist/build/myapp/myapp ...
およびTemplateHaskell
コードの実行時に共有ライブラリをロードする際にも。
これはld
が遅いためだと思います。
gold
リンカーに切り替えることでリンク時間を改善するにはどうすればよいですか?
gold
で3倍高速にリンクGHC 7.8以降 の場合、GHCとcabalに(実行時にGHCを再コンパイルする必要なしに)GNUゴールドでリンクするように指示できます。
.cabal
ファイル:
library:
ghc-options: -optl-Fuse-ld=gold
ld-options: -Fuse-ld=gold
executable myExecutable
ghc-options: -optl-Fuse-ld=gold
ld-options: -Fuse-ld=gold
(これらのフラグをstack
/cabal
/Setup.hs
パッケージの移植性を低下させないために、.cabalファイルにハードコーディングするのではなく、コマンドラインで。)
私にとっては3.5x
高速になり、プロジェクトの合計リンク時間が150秒から40秒に短縮されました。
lld
で10倍高速にリンク完全な例については https://github.com/nh2/link-with-lld-example を参照してください。重要なパーツ:
library
ghc-options: "-pgmP clang" "-pgmc clang" "-pgma clang" "-pgml clang" "-optl-Fuse-ld=lld"
ld-options: -Fuse-ld=lld
executable myExecutable
ghc-options: "-pgmP clang" "-pgmc clang" "-pgma clang" "-pgml clang"
ld-options: -Fuse-ld=lld
最終的な実行可能リンクのリンク時間とプロジェクトの時間の比較:
ld 124 seconds
gold 36 seconds
lld 11 seconds