para - peta haskell en español
Cómo enlazar con el enlazador de oro GNU en lugar de ld en Haskell (1)
Enlace 3 veces más rápido con gold
Desde GHC 7.8 , puede decirle a GHC y a cabal (en tiempo de ejecución sin tener que recompilar GHC) que se vincule con el oro de GNU.
Necesitas en tu archivo .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
(Tenga en cuenta que es posible que desee pasar estos indicadores a stack
/ cabal
/ Setup.hs
en la línea de comandos en lugar de codificarlos en el archivo .cabal para no reducir la portabilidad del paquete).
Para mí, es 3.5x
más rápido, reduciendo el tiempo total de enlace de un proyecto de 150 segundos a 40 segundos.
Actualización: Enlace 10x más rápido con lld
Vea https://github.com/nh2/link-with-lld-example para un ejemplo completo; partes clave:
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
La comparación del tiempo de enlace para el enlace ejecutable final multiplicado por mi proyecto:
ld 124 seconds
gold 36 seconds
lld 11 seconds
Mi proyecto Haskell dedica mucho tiempo a Linking dist/build/myapp/myapp ...
y también a cargar bibliotecas compartidas al ejecutar el código de TemplateHaskell
.
Sospecho que esto es porque ld
es lento.
¿Cómo puedo mejorar los tiempos de enlace al cambiar al engarce de gold
?