33 votes

Comment créer un lien avec l'éditeur de liens GNU Gold au lieu de ld dans Haskell

Mon projet Haskell passe beaucoup de temps en Linking dist/build/myapp/myapp ... et également au chargement de bibliothèques partagées lors de l'exécution du code TemplateHaskell .

Je suppose que cela est dû au fait que ld est lent.

Comment puis-je améliorer les temps de liaison en basculant sur le lieur gold ?

44voto

nh2 Points 4421

Lien 3x plus vite avec gold

Depuis GHC 7.8, vous pouvez dire GHC et de la cabale (au moment de l'exécution, sans avoir à recompiler le GHC) de lien avec GNU or.

Vous avez besoin dans votre .cabal le fichier:

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

(Remarque vous pouvez passer ces drapeaux stack/cabal/Setup.hs sur la ligne de commande au lieu de coder en dur dans le .cabale fichier afin de ne pas réduire la portabilité de l'emballage.)

Pour moi, c'est 3.5x plus rapide, ce qui réduit le total de la liaison d'un projet à partir de 150 secondes à 40 secondes.


Mise à jour: Lien 10x plus vite avec lld

Voir https://github.com/nh2/link-with-lld-example pour un exemple complet; les principales parties:

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

Comparaison des temps de lien pour l'exécutable final de lien fois mon projet:

ld   124 seconds
gold  36 seconds
lld   11 seconds

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X