27 votes

GHC n'optimise pas les modules autres que le module principal

Je suis actuellement à la rédaction d'un multi-module de programme en Haskell. J'ai trouvé un problème étrange où mes fichiers ne sont pas optimisé correctement, même si je suis de passage en -O2 et ainsi de suite. Les fichiers en question sont partagés vecteur 3D de mathématiques de modules. Lors de la compilation individuellement à un .o, ces modules sont optimisé correctement. Lors de la compilation comme partie d'un programme à l'aide de --faire, ils ne sont pas optimisé correctement. Le noyau est tout à fait différent.

Je l'ai mis dans une simple stripped-down test de code dans un vecteur.hs fichier:

data TestVector = TestVector !Double !Double !Double !Double

addVec :: TestVector -> TestVector -> TestVector

addVec (TestVector x1 y1 z1 w1) (TestVector x2 y2 z2 w2) =
  TestVector (x1 + x2) (y1 + y2) (z1 + z2) (w1 + w2)

Et importé de main...

import Vector

Ce code sera compilé différemment en tant qu'unité autonome .hs fichier par opposition à quand je build principal.hs aide d' --make

Ma ligne de commande est:

ghc -tmpdir tmp -hidir hi -odir obj -fext-core -fexcess-precision -funbox-strict-fields -threaded -rtsopts -fwarn-missing-signatures -Wall -O2 Main.hs -o main

Cheers

1voto

robermorales Points 1267

Ajouter

 {-# INLINE addVec #-}
 

dans le module principal.

GHC a besoin d'indiquer cette possibilité avant de faire cette optimisation, si l'invocateur / invoqué n'est pas dans les mêmes modules.

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