Lisp 收集“time”宏生成的时间和空间结果?
Common Lisp提供了一个Lisp 收集“time”宏生成的时间和空间结果?,lisp,common-lisp,clisp,gnu-common-lisp,Lisp,Common Lisp,Clisp,Gnu Common Lisp,Common Lisp提供了一个time宏,用于找出表单执行所需的时间,并将信息打印到跟踪输出: 在当前环境中评估表单(词汇和动态)time打印各种定时数据和其他信息以跟踪输出。 打印信息的性质和格式如下: 实现定义。鼓励实现提供这样的服务 已用实时、机器运行时间和存储等信息 管理统计 例如: (time (length (make-array 1000000))) Real time: 0.0140014 sec. Run time: 0.0 sec. Sp
time
宏,用于找出表单执行所需的时间,并将信息打印到跟踪输出:
在当前环境中评估表单(词汇和动态)time打印各种定时数据和其他信息以跟踪输出。
打印信息的性质和格式如下:
实现定义。鼓励实现提供这样的服务
已用实时、机器运行时间和存储等信息
管理统计
例如:
(time (length (make-array 1000000)))
Real time: 0.0140014 sec.
Run time: 0.0 sec.
Space: 4000008 Bytes
GC: 1, GC time: 0.0 sec.
有没有一种方法可以收集这些参数,并将它们一步一步地推送到某个堆栈或列表中,然后从函数返回这些参数?有些东西是标准的:并且:
其他不是(空间和GC计数),您需要找到
您也可以考虑使用-IT提供进度报告,包括ETA、
顺便说一句,在您的代码中,内存分配(
make array
)使length
(数组的插槽访问)相形见绌。我调用了一个函数来代替我的代码(如果我的方法正确的话),但它说“变量我的计时没有价值”。@Rorschach:您需要定义变量*我的计时*
,例如(defvar*my timings*)
@Rörd:我不知道为什么它对我仍然不起作用。您是否执行了(defvar*my timings*nil)
?您的错误消息是什么?@sds:即使按照建议将其设置为零,我也会收到“SYSTEM::READ-EVAL-PRINT:variable my-timings没有值”。
(defvar *my-timings* nil)
(let ((run (get-internal-run-time))
(real (get-internal-real-time)))
(multiple-value-prog1 (my-code)
(push (cons (- (get-internal-run-time) run)
(- (get-internal-real-time) real))
*my-timings*)))