Tom*_*ley 27 optimization haskell inline ghc
我目前正在Haskell中编写一个多模块程序.我发现了一个奇怪的问题,我的文件没有正确优化,即使我正在传入-O2等等.有问题的文件是共享的3D矢量数学模块.当单独编译为.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)
Run Code Online (Sandbox Code Playgroud)
并从主要进口...
import Vector
Run Code Online (Sandbox Code Playgroud)
这个代码的编译方式与独立的.hs文件不同,而不是在构建main.hs时使用 --make
我的命令行是:
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
Run Code Online (Sandbox Code Playgroud)
干杯
添加
{-# INLINE addVec #-}
Run Code Online (Sandbox Code Playgroud)
在主模块中。
如果调用者/被调用者不在同一模块中,GHC 需要在进行优化之前指示这种可能性。
| 归档时间: |
|
| 查看次数: |
615 次 |
| 最近记录: |