12

Haskell のシステム時間関数を使用してプログラムの実行時間を取得するにはどうすればよいですか? プログラム全体および/または個々の関数の実行時間を測定したいと考えています。

4

4 に答える 4

22

1)何かをベンチマークしたい場合は、基準パッケージを使用してください。

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

また、ユーザー、壁、およびシステム時間を報告します。

于 2011-05-11T18:13:54.517 に答える
12

次のように、プログラムの合計実行時間を測定するだけではないと仮定します。

 $ time ./A

次に、Haskell でさまざまな方法で計算の時間を計ることができます。

より統計的に健全な測定を行うには、次のことを考慮してください。

最後に、すべての場合において、遅延評価について考える必要があります。生成するデータを完全に評価するコストを測定したいですか、それとも最も外側のコンストラクターだけを評価したいですか?

于 2011-05-11T18:13:48.747 に答える
6

:set +sghciを使用する場合は本当にきれいです。それ以外の場合はCriterion.Measurement

于 2014-03-23T07:02:50.343 に答える
4

どれほど正確かはわかりませんが:set +s、ghci で使用すると、後続の計算に使用される時間と空間が表示されます。

于 2011-05-11T19:22:18.443 に答える