optimized moz img images for example alternative optimization haskell inline ghc

optimization - moz - image alt text



GHC no optimiza otros módulos además del módulo principal (1)

Actualmente estoy escribiendo un programa de múltiples módulos en Haskell. He encontrado un problema extraño en el que mis archivos no se optimizan correctamente, aunque estoy pasando en -O2 y así sucesivamente. Los archivos en cuestión son módulos matemáticos vectoriales 3D compartidos. Cuando se compilan individualmente a .o, estos módulos se optimizan correctamente. Cuando se compilan como parte de un programa más grande con --make, no están optimizados correctamente. El núcleo es bastante diferente.

He incluido un código de prueba simple y simplificado en un archivo vector.hs:

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)

Y lo importó de la principal ...

import Vector

Este código se compila de manera diferente como un archivo .hs independiente en lugar de cuando compilo main.hs usando --make

Mi línea de comando es:

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

Aclamaciones


Añadir

{-# INLINE addVec #-}

en el módulo principal.

GHC necesita una indicación de esa posibilidad antes de realizar esa optimización, si el invocador / invocado no está en los mismos módulos.