Hello, I was wondering whether optimization can help grid-map's performance. (But I really have not done much optimizing). So, I timed the following two functions which map `sin' over a really large grid: (in-package :grid) (defun optimized (arg) (grid:map-grid :source arg :element-function #'(lambda (arg) (declare (optimize (speed 3) (safety 0) (debug 0)) (double-float arg)) (the double-float (sin arg)))) (values)) (defun unoptimized (arg) (grid:map-grid :source arg :element-function #'(lambda (arg) (sin arg))) (values)) (progn (defvar *arg* nil) (setf *arg* (grid:make-grid '((foreign-array 300000) double-float) :initial-element 1d0)) nil) On 64bit linux & SBCL, compilation of the optimized routine generate the following notes that I don't understand: ; note: unable to avoid inline argument range check ; because the argument range (DOUBLE-FLOAT) was not within 2^63 ; #'(LAMBDA (GRID::ARG) ; (DECLARE (OPTIMIZE (SPEED 3) (SAFETY 0) (DEBUG 0)) ; (DOUBLE-FLOAT GRID::ARG)) ; (THE DOUBLE-FLOAT (SIN GRID::ARG))) ; ; note: doing float to pointer coercion (cost 13) to "<return value>" Timing both routines gives very similar results: GRID> (time (unoptimized *arg*)) Evaluation took: 0.112 seconds of real time 0.111983 seconds of total run time (0.110983 user, 0.001000 system) [ Run times consist of 0.004 seconds GC time, and 0.108 seconds non-GC time. ] 100.00% CPU 335,890,827 processor cycles 19,202,048 bytes consed GRID> (time (optimized *arg*)) Evaluation took: 0.113 seconds of real time 0.112983 seconds of total run time (0.111983 user, 0.001000 system) [ Run times consist of 0.003 seconds GC time, and 0.110 seconds non-GC time. ] 100.00% CPU 337,194,558 processor cycles 19,202,032 bytes consed Any ideas how to properly optimize the code? Thanks, Mirko