我目前需要写一些类似于user::time
的东西,但需要修改一下。
修改如下。假设我的新宏名为time-lisp-forms
。那么我应该可以像这样使用它。
(defun test (a b)
(let ((c (+a b)))
(time (+ c a))
(time (+ c b)))))
我这样调用这个宏:
(time-lisp-forms (test 1 2))
然后,它的输出将如下所示:
Total time for (test 1 2) = 5 sec
Time block 1: (+ c a) = 1 sec
Time block 2: (+ c b) = 3 sec
也就是说,我希望对函数的外部调用计时,同时能够指示其中我想要特别关注的块。
问题是,这样的东西是否已经存在。另外,如果我需要实现这一点,你能推荐从哪里开始吗,或者一些有用的函数/宏。不一定要寻找有效的解决方案,但欢迎指导和指导:)
发布于 2018-06-16 03:01:41
(time-lisp-forms (test 1 2))
可以扩展为:
(let ((*counter* (make-counter :forms '((test 1 2)))))
(test 1 2)
(print-summary *counter*))
(或者作为对执行相同操作的函数的调用进行扩展)。
您可以将*counter*
变量动态绑定到counter
类的实例。
您的自定义(time expr)
表达式将扩展为:
`(call-time-block *counter* ',expr (lambda () ,expr))
然后,该函数将给出一个新的id (1、2等)。测试,并使用GET-INTERNAL-RUN-TIME
获得的内部前后计数器测量时间。
https://stackoverflow.com/questions/50881239
复制相似问题