完了するまでに数秒かかる可能性のある (SWI-) Prolog プログラムのベンチマークを実行しようとしています。CPU 時間とメモリの統計を経時的に保存して、一種の進化プロットを表示できるようにしたいと考えています。システムモニターに似たものですが、私のプログラムだけです。
そのために私は使ってみましたalarm/4
:
stat_start(Id) :-
alarm(0.25,stat_point,Id,[remove(false),install(true)]). % 250 milliseconds
stat_stop(Id) :-
remove_alarm(Id).
stat_point :-
stat_cpu, % calls statistics/2 and appends values to a CSV file
stat_mem. % calls statistics/2 and appends values to a CSV file
それぞれの間で適切なタイミングを取得できませんstat_point
。タイミングはミリ秒から秒単位で変化し、私はそれについて何もできません。の時間を変更しalarm/4
ても違いはありません。次のような簡単なクエリも試しました。
?- alarm(1, write('hello\n'), Id, [remove(false),install(true)]),
repeat,
fail.
そして、それも機能しません。「こんにちは」の一言だけです。コード内に への呼び出しを挿入することで解決できるのではないかと考えましたが、stat_point
見た目がエレガントではありませんか? さらに、ポイントは等間隔ではありません。
Prolog プログラムを定期的に監視する適切な方法はありますか? どういうわけかprofile/1
この種の情報を提供しますか?