"Thomas F. Burdick" <[EMAIL PROTECTED]> writes:
[...]
> On a Sun Blade 100, this takes about 2x as long to run as the C code
> (CMUCL 18d and both gcc and the Sun compiler).
Another data point: The code below, which is my personal direct
translation of the C code, takes 0.5s to run (x86 P4 box, CMUCL from
CVS. FreeBSD -STABLE). The C version, compiled with GCC 2.95.4 takes
0.43s.
(defun test2 ()
(let* ((n 1000)
(mat (make-array (* n n) :element-type 'double-float
:initial-element 1.0d0)))
(declare (type (simple-array double-float (*)) mat)
(fixnum n)
(optimize (speed 3) (debug 0) (safety 0)))
(loop for i of-type fixnum below 10 do
(loop for pos1 of-type fixnum from 1 below (1- n) do
(loop for pos2 of-type fixnum from (+ pos1 n)
below (the fixnum (+ pos1 (the fixnum (* (the fixnum (1- n))
n))))
by n do
(let ((a0 (aref mat (the fixnum (- pos2 1001))))
(a1 (aref mat (the fixnum (- pos2 1))))
(a2 (aref mat (the fixnum (+ pos2 999))))
(a3 (aref mat (the fixnum (- pos2 1000))))
(a4 (aref mat (the fixnum (- pos2 0))))
(a5 (aref mat (the fixnum (+ pos2 1000))))
(a6 (aref mat (the fixnum (- pos2 999))))
(a7 (aref mat (the fixnum (+ pos2 1))))
(a8 (aref mat (the fixnum (+ pos2 1001)))))
(setf (aref mat pos2)
(* 0.1111111111d0
(+ a0 a1 a2 a3 a4 a5 a6 a7 a8)))))))))