我正在尝试对可能需要几秒钟才能完成的(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
以某种方式提供这种信息吗?