From: Christophe R. <cs...@ca...> - 2004-03-09 09:28:16
|
Juho Snellman <js...@ik...> writes: > Here are some cl-bench results (read into them what you will; I did > three runs on both versions, and the results between runs varied at > most 1-2%): > COMPILER [ 53.76] 0.91 > FPRINT/UGLY [ 10.62] 0.87 > FPRINT/PRETTY [ 22.62] 0.93 > HASH-STRINGS [ 11.06] 0.85 > CLOS/defclass [ 10.19] 0.94 > CLOS/defmethod [ 20.93] 0.93 > CLOS/method+after [ 16.01] 0.93 > CLOS/complex-methods [ 5.05] 0.93 Cool! The FPRINT results are particularly intriguing... I actually have a performance fix pending for FPRINT/PRETTY, but some extra is not to be sneezed at :-) The CLOS tests are, I suspect, making heavy use of EVAL, and consequently the compiler; that might be why their performance is improved. > @@ -103,7 +121,12 @@ > (defun %sxhash-simple-string (x) > (declare (optimize speed)) > (declare (type simple-string x)) > - (%sxhash-substring x)) > + ;; This flet is a kludgy workaround for lack of let conversion in > + ;; the cross compiler, as suggested by APD. > + (flet ((trick (x) > + (%sxhash-substring x))) > + (declare (notinline trick)) > + (trick x))) > > (defun %sxhash-simple-substring (x count) > (declare (optimize speed)) If you're set up already to test the effects of this, could you see the effect of performing the same rewrite (with FLET TRICK) on %SXHASH-SIMPLE-SUBSTRING? It's only called in one place, but that one place is FIND-SYMBOL*, so it may be relevant in performance terms. I am currently working on making undefined variable errors be full warnings (rather than the current style-warnings) in code such as (defun foo () x) where there has been no previous declaration for X. This will probably take me a few more days (some interesting problems have shown up: for kicks, do (apropos "current-catch-block") in a fresh sbcl), so if someone else would like to merge this patch, please do :-) Cheers, Christophe -- http://www-jcsu.jesus.cam.ac.uk/~csr21/ +44 1223 510 299/+44 7729 383 757 (set-pprint-dispatch 'number (lambda (s o) (declare (special b)) (format s b))) (defvar b "~&Just another Lisp hacker~%") (pprint #36rJesusCollegeCambridge) |