haskell profiling说"总时间= 0.00秒",但事实并非如此

Val*_*lev 7 profiling haskell ghc

我正试图描述我的程序.

我这样编译:

ghc -rtsopts -O3 -prof -auto-all Main.hs
Run Code Online (Sandbox Code Playgroud)

并运行:

./Main +RTS -p
Run Code Online (Sandbox Code Playgroud)

并阅读Main.prof:

Fri Jul 15 13:06 2011 Time and Allocation Profiling Report  (Final)

       Main +RTS -p -RTS

    total time  =        0.00 secs   (0 ticks @ 20 ms)
    total alloc = 266,726,496 bytes  (excludes profiling overheads)

COST CENTRE                    MODULE               %time %alloc

trySub                         Main                   0.0   14.3
ourPalindroms                  Main                   0.0   15.0
isPalindromic                  Main                   0.0   70.7


                                                                                               individual    inherited
COST CENTRE              MODULE                                               no.    entries  %time %alloc   %time %alloc

MAIN                     MAIN                                                   1           0   0.0    0.0     0.0  100.0
 CAF                     Main                                                 240          10   0.0    0.0     0.0  100.0
  asSquareSum            Main                                                 253           0   0.0    0.0     0.0    0.0
  squares                Main                                                 252           2   0.0    0.1     0.0    0.1
  maxN                   Main                                                 248           1   0.0    0.0     0.0    0.0
  ourPalindroms          Main                                                 247           1   0.0   15.0     0.0   85.7
   isPalindromic         Main                                                 249     1000000   0.0   70.7     0.0   70.7
  main                   Main                                                 246           1   0.0    0.0     0.0   14.3
   asSquareSum           Main                                                 250        1998   0.0    0.0     0.0   14.3
    trySub               Main                                                 251        1998   0.0   14.3     0.0   14.3
 CAF                     GHC.IO.Handle.FD                                     176           2   0.0    0.0     0.0    0.0
 CAF                     GHC.IO.Encoding.Iconv                                137           2   0.0    0.0     0.0    0.0
 CAF                     GHC.Conc.Signal                                      130           1   0.0    0.0     0.0    0.0
Run Code Online (Sandbox Code Playgroud)

我的程序的这个令人敬畏的速度实际上是一个谎言:

[.../P125]$ time ./Main +RTS -p
...output...

real    0m4.995s
user    0m4.977s
sys 0m0.010s
Run Code Online (Sandbox Code Playgroud)

(是的,我尝试使用和不使用time,并且探查器一直在说谎)

我能做什么?

[.../P125]$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.0.3
Run Code Online (Sandbox Code Playgroud)

操作系统Mac OS X 10.6.8.我很确定我已经ghc从自制软件安装了

Pet*_*ann 7

简短回答:解决方法是编译-threaded.

过度感兴趣的灵魂的详细信息:原因是GHC错误(参见#5282):当运行时系统想要执行垃圾收集时,总是会触发分析计时器.由于此时执行不在Haskell代码中,因此成本归因于"SYSTEM"成本中心 - 然后从分析视图中删除.

-threaded修复问题的原因可能是它使得分析计时器在"实际"时间内打勾,而不是在进程实际执行的时间.即使这是一种不太准确的分析形式,它似乎将计时器与程序的执行分离得足以触发错误.