如何获取Haskell中子表达式的小计时间统计信息

时间:2018-03-27 11:07:56

标签: haskell

我正在尝试改善:set +s的时间性能(以main衡量)并需要确定一些瓶颈。 main调用许多调用foo的函数。是否有一种简单的方法可以让GHCi报告仅在foo的多个子语句上花费的总时间?

1 个答案:

答案 0 :(得分:3)

为了测量性能,GHCi不是一个好的选择,因为它经常运行解释代码,并且不像GHC(编译器)那样优化代码。使用GHC 编译代码要好得多,启用优化-O

编译时,您还可以使用-prof -fprof-auto开启profiler。这样做,运行yourProgram +RTS -p将生成一份报告,其中包含各个绑定(例如函数)的所有成本,帮助您识别瓶颈。通过这种方式,您应该能够获得这样的报告:

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

MAIN        MAIN                    102           0    0.0    0.0   100.0  100.0
 CAF        GHC.IO.Handle.FD        128           0    0.0    0.0     0.0    0.0
 CAF        GHC.IO.Encoding.Iconv   120           0    0.0    0.0     0.0    0.0
 CAF        GHC.Conc.Signal         110           0    0.0    0.0     0.0    0.0
 CAF        Main                    108           0    0.0    0.0   100.0  100.0
  main      Main                    204           1    0.0    0.0   100.0  100.0
   main.g   Main                    207           1    0.0    0.0     0.0    0.1
    fib     Main                    208        1973    0.0    0.1     0.0    0.1
   main.f   Main                    205           1    0.0    0.0   100.0   99.9
    fib     Main                    206     2692537  100.0   99.9   100.0   99.9

您还可以考虑使用criterion库来执行基准测试。在尝试比较同一函数的不同实现时,这非常有用。