【发布时间】:2014-02-11 19:44:44
【问题描述】:
我正在尝试对可能需要几秒钟才能完成的 (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 会以某种方式提供这种信息吗?
【问题讨论】:
-
我会说,使用警报时,您的测量结果会出现很多不确定性。很难说你实际上应该做什么,但最好测量一些定义明确的部分-
标签: timer prolog swi-prolog periodic-task