instalar Cómo enlazar con el enlazador de oro GNU en lugar de ld en Haskell



haskell ejemplos (1)

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 ?


Answer #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




gold-linker