Haskell のシステム時間関数を使用してプログラムの実行時間を取得するにはどうすればよいですか? プログラム全体および/または個々の関数の実行時間を測定したいと考えています。
4 に答える
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
また、ユーザー、壁、およびシステム時間を報告します。
次のように、プログラムの合計実行時間を測定するだけではないと仮定します。
$ time ./A
次に、Haskell でさまざまな方法で計算の時間を計ることができます。
- 基本的なタイミング(例: timeit パッケージなど)
- サイクルのタイミング
より統計的に健全な測定を行うには、次のことを考慮してください。
最後に、すべての場合において、遅延評価について考える必要があります。生成するデータを完全に評価するコストを測定したいですか、それとも最も外側のコンストラクターだけを評価したいですか?
:set +s
ghciを使用する場合は本当にきれいです。それ以外の場合はCriterion.Measurement
、
どれほど正確かはわかりませんが:set +s
、ghci で使用すると、後続の計算に使用される時間と空間が表示されます。