Optimize `find-anonymous-variables`
After some profiling I found that this function was taking 4% of the total
runtime just on its own. The culprit was `tree-collect`, which does some
expensive things (like `(gensym)`). Because we know exactly what we need we can
write something much faster, and profiling confirms that this function isn't
even on the map any more.
author |
Steve Losh <steve@stevelosh.com> |
date |
Mon, 11 Jul 2016 21:38:03 +0000 |
parents |
ba205f6b2875 |
children |
8897604cb9dd |
(ql:quickload 'bones)
(ql:quickload 'paiprolog)
(load "examples/ggp-paip-compiled.lisp")
(load "examples/ggp-paip-interpreted.lisp")
(load "examples/ggp-wam.lisp")
(in-package :bones)
(defun reload ()
(let ((*standard-output* (make-broadcast-stream))
(*debug-io* (make-broadcast-stream))
(*terminal-io* (make-broadcast-stream))
(*error-output* (make-broadcast-stream)))
(asdf:load-system 'bones :force t)
(asdf:load-system 'paiprolog :force t)
(load "examples/ggp-paip-compiled.lisp")
(load "examples/ggp-paip-interpreted.lisp")
(load "examples/ggp-wam.lisp")))
(defun run-test% ()
; (format t "PAIP (Compiled) --------------------~%")
; (time (paiprolog-test::dfs-exhaust))
; (format t "PAIP (Interpreted) -----------------~%")
; (time (bones.paip::depth-first-search :exhaust t))
(format t "WAM --------------------------------~%")
(time (bones.wam::depth-first-search :exhaust t)))
(defmacro run-test (&rest settings)
`(progn
(declaim (optimize ,@settings))
(format t "~%~%========================================================~%")
(format t "~S~%" ',settings)
(format t "--------------------------------------------------------~%")
(reload)
(run-test%)))
; (run-test (speed 3) (safety 1) (debug 1))
(run-test (speed 3) (safety 0) (debug 0))