我目前正在用Haskell编写一个多模块程序。我发现了一个奇怪的问题,即使我传入了-O2等,我的文件也没有得到适当的优化。有问题的文件是共享的3D vector 数学模块。分别编译为.o时,这些模块已正确优化。当使用--make编译为较大程序的一部分时,它们没有正确优化。核心是完全不同的。

我将一些简单的简化测试代码放入了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)

并从主要进口...
import Vector

与使用--make构建main.hs相比,此代码作为独立的.hs文件进行了不同的编译

我的命令行是:
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

干杯

最佳答案


{-# INLINE addVec #-}

在主模块中。

如果调用者/被调用者不在同一个模块中,那么在进行优化之前,GHC需要指出这种可能性。

关于optimization - GHC未优化主模块以外的模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7367070/

10-11 19:32
查看更多