Thomas Fischbacher <[EMAIL PROTECTED]> writes:

 > On Tue, 14 Dec 2004, Harvey J. Stein wrote:
 > 
 > > The compiler won't unbox the result of (one-normal-rand) and
 > > (callpay), and I still don't know why. 
 > 
 > Hm, first of all, I suppose you should get lots of
 > 
 >  Unable to optimize due to type uncertainty
 > 
 > compiler notes. If so, you should provide the compiler with the 
 > proper additional type information. Macros will help. Besides this, you 
 > may think of making one-normal-rand
 > 
 > 
 > (defun one-normal-rand ()
 >   (declare (values (double-float)))
 >   (labels ((onr ()
 >           (let* ((u (random 1d0))
 >                  (u1 (random 1d0)))
 >             (declare (type (double-float (0d0) 1d0) u u1))
 >             (let* ((v (* SQRT2OVERE (- (* 2d0  u1) 1d0)))
 >                    (x (/ v u))
 >                    (y (/ (* x x) 4d0)))
 >               (if (and (> y (- 1d0 u))
 >                        (> y (- (log u))))
 >                   (onr)
 >                   x)))))
 >     (onr)))
 > 
 > so that you can let the compiler inline it. And besides that, there 
 > furthermore would be block compilation.

When I compile this snippet, preceeded by:

   (eval-when (compile)
     (proclaim '(optimize (speed 3) (safety 1) (space 0) (debug 0))))

   (defconstant SQRT2OVERE (the double-float (sqrt (/ 2d0 (exp 1d0)))))

   (eval-when (compile)
     (proclaim '(type double-float SQRT2OVERE)))

I get a compilation note:

   * (compile-file "bsmc-cl-t2")

   Python version 1.0, VM version Intel x86 on 14 DEC 04 01:38:37 pm.
   Compiling: /home/hjstein/Quadrus/bsmc-cl-t2.lisp 14 DEC 04 01:38:35 pm

   Converted ONE-NORMAL-RAND.
   Compiling DEFUN ONE-NORMAL-RAND: 

   File: /home/hjstein/Quadrus/bsmc-cl-t2.lisp

   In: DEFUN ONE-NORMAL-RAND
     (DEFUN ONE-NORMAL-RAND ()
       (DECLARE (VALUES #))
       (LABELS (#)
         (ONR)))
   Note: Doing float to pointer coercion (cost 13) to "<return value>".

I don't know if this is faster or not, but it doesn't clear up the
cost 13 coercion to pointer note.  BTW, neither does replacing the
recursion with iteration.  And, using inlining & block compilation
doesn't help much either.

-- 
Harvey Stein
Bloomberg LP
[EMAIL PROTECTED]


Reply via email to