【问题标题】:How to get a program's running time in Haskell如何在 Haskell 中获取程序的运行时间
【发布时间】:2011-08-23 12:58:59
【问题描述】:

如何通过 Haskell 中的系统时间函数获取程序的运行时间?我想测量整个程序和/或单个函数的执行时间。

【问题讨论】:

标签: haskell time profiling execution measurement


【解决方案1】:

1) 如果您想对某些东西进行基准测试,请使用 criterion 包。

2) 如果您想为某个函数计时并且确定您已根据需要控制了惰性,那么只需使用 time 包中的 Data.Time.getCurrentTime。:

import Data.Time
...
   start <- getCurrentTime
   runOperation
   stop <- getCurrentTime
   print $ diffUTCTime stop start

可以在timeit 包中找到上述模式的更简洁的包装。

3) 如果您确实想要恰好用 Haskell 编写的 程序 的运行时间,请使用您的系统 time 实用程序。对于大多数 POSIX 系统(Mac、Linux)只需运行:

$ time ./SomeProgram

它会报告用户、墙和系统时间。

【讨论】:

    【解决方案2】:

    假设您不只是想测量程序的总运行时间,如下所示:

     $ time ./A
    

    然后您可以在 Haskell 中通过多种方式为计算计时:

    要获得更可靠的统计测量结果,请考虑

    最后,在所有情况下,您都需要考虑惰性评估:您是要衡量完全评估您生成的任何数据的成本,还是仅评估其最外层的构造函数的成本?

    【讨论】:

    • -prof编译并使用+RTS -s怎么样?
    • 用 -prof 编译会改变程序的特性。值得注意的是,程序会慢很多。
    【解决方案3】:

    :set +s 用 ghci 真的很简洁,否则你可以用Criterion.Measurement,见my answer to another question with example

    【讨论】:

      【解决方案4】:

      我不确定它有多准确,但是在 ghci 中使用 :set +s 会显示用于后续计算的时间和空间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多