是否有可能在 Swi-Prolog 中获得以微秒为单位的经过时间?
Is it possible to get elapsed time in microseconds in Swi-Prolog?
简单的问题。
我需要计算执行谓词X需要多长时间。所以我写了这个谓词:
chronometrise(X) :-
write('Executing: '), write(X), nl, nl,
statistics(walltime, _), call(X), statistics(walltime, [_,E]),
nl, write('Time: '), write(E), write(' ms.'), nl.
这让我可以得到以毫秒为单位的时间。但是我需要微秒。
是否可以在 Swi-Prolog 中进行计算?或者毫秒是最好的精度?
编辑:好吧,我找到了一个更好的方法:执行谓词 1000 次并计算经过的时间。这将为我们提供以毫秒为单位的平均执行时间乘以 1000,这恰好是以微秒为单位的平均运行时间。
不使用 statistics(walltime, _)
,而是使用 get_time(Time)
。这 returns 一个浮点数的墙上时间戳。报告时间的分辨率取决于 OS。 walltime
统计数据源自 Quintus 兼容性。
简单的问题。
我需要计算执行谓词X需要多长时间。所以我写了这个谓词:
chronometrise(X) :-
write('Executing: '), write(X), nl, nl,
statistics(walltime, _), call(X), statistics(walltime, [_,E]),
nl, write('Time: '), write(E), write(' ms.'), nl.
这让我可以得到以毫秒为单位的时间。但是我需要微秒。
是否可以在 Swi-Prolog 中进行计算?或者毫秒是最好的精度?
编辑:好吧,我找到了一个更好的方法:执行谓词 1000 次并计算经过的时间。这将为我们提供以毫秒为单位的平均执行时间乘以 1000,这恰好是以微秒为单位的平均运行时间。
不使用 statistics(walltime, _)
,而是使用 get_time(Time)
。这 returns 一个浮点数的墙上时间戳。报告时间的分辨率取决于 OS。 walltime
统计数据源自 Quintus 兼容性。