[gambit-list] (declare (mostly-fixnum)) vs (declare (mostly-fixnum-flonum))
Bradley Lucier
lucier at math.purdue.edu
Wed Mar 22 23:10:30 EST 2006
Marc:
I compiled an image processing application with mostly-fixnum and
mostly-fixnum-flonum and here is what I found:
[lindv2:Arrays/srfi3/gsc-test] lucier% ll
total 107960
-rw-r--r-- 1 lucier lucier 4103052 Mar 21 15:51 all.c.fixnum
-rw-r--r-- 1 lucier lucier 5489576 Mar 22 21:15 all.c.fixnum-flonum
-rw-r--r-- 1 lucier lucier 6556015 Mar 22 20:28 all.i.fixnum
-rw-r--r-- 1 lucier lucier 8689958 Mar 22 21:15 all.i.fixnum-flonum
-rw-r--r-- 1 lucier lucier 1811056 Mar 22 20:45 all.o.fixnum
-rw-r--r-- 1 lucier lucier 2492112 Mar 22 21:45 all.o.fixnum-flonum
-rwxr-xr-x 1 lucier lucier 1449209 Mar 22 20:46 all.o1.fixnum*
-rwxr-xr-x 1 lucier lucier 2029916 Mar 22 21:45 all.o1.fixnum-
flonum*
-rw-r--r-- 1 lucier lucier 5280685 Mar 22 20:45 all.s.fixnum
-rw-r--r-- 1 lucier lucier 7388908 Mar 22 21:45 all.s.fixnum-flonum
-rw-r--r-- 1 lucier lucier 558 Mar 22 21:15 all.scm
-rw-r--r-- 1 lucier lucier 1631997 Mar 22 22:01 fixnum-expansion.scm
-rw-r--r-- 1 lucier lucier 2151785 Mar 22 21:49 fixnum-flonum-
expansion.scm
-rwxr--r-- 1 lucier lucier 371 Mar 21 15:43 gaussian-random.scm*
-rwxr--r-- 1 lucier lucier 88397 Mar 21 15:45 generic-arrays.scm*
-rwxr--r-- 1 lucier lucier 25985 Mar 21 15:46 multi-calculus.scm*
-rw-r--r-- 1 lucier lucier 6683 Mar 21 15:48 pgm.scm
-rwxr--r-- 1 lucier lucier 9778 Mar 21 15:43 pixel-method.scm*
-rwxr--r-- 1 lucier lucier 7113 Mar 21 15:46 point.scm*
You can see the size of the .scm files, the .c files, the .i files
after macro expansion, the .s files, etc.
On a 2GHz Mac G5, the mostly-fixnum version took 2.4GB and 17 minutes
to compile and the mostly-fixnum-flonum version took 3.4GB and 30
minutes to compile. This was with gcc-4.1.0 and not the compiler
that apple ships (since the compiler that apple ships is 32-bit and
can't allocate over 2.0 GB ;-).
The mostly-fixnum-flonum code is not as big as one might expect, for
the following reasons:
1. If you have (+ i 1), then because 1 is not a flonum, it doesn't
generate the tests or the code for flonum.+.
2. Comparisons are relatively simple, e.g., (< x y) just adds "check
whether x and y are flonums and compare them" to the code, no boxing,
etc.
So I don't see mostly-flonum-fixnum as that much of an added burden
over mostly-fixnum.
Brad
More information about the Gambit-list
mailing list