Ответ 1
Ссылка 3 раза быстрее с gold
Начиная с 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 секунд.
Обновление: Link 10x быстрее с lld
См. 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