[gambit-list] Help With Memory
Joel J. Adamson <adamsonj@email.unc.edu>
adamsonj at email.unc.edu
Mon Sep 22 15:26:41 EDT 2008
Dear Gambitizers,
I have programmed a simulation, and the list has successfully helped me
with a few prior problems. Those are taken care of, but now I have a
much more basic problem: I'm using up memory, to the point where my
kernel (named after a certain Finn)
# uname -srmp
Linux 2.6.26-custom i686 Intel(R) Core(TM)2 Quad CPU Q6700 @ 2.66GHz
kills the program. Of course I had the common misconception that this
would never happen in a Lisp-like language and on and on: my real
concern is that there is some basic programming technique that I am
missing. Basically, is something failing to get garbage-collected?
I will discuss a specific problem below, but I ask the kind generosity
of someone who could examine the code (or show me how to better examine
it), and let me know if there are any major red-flags, or ways I could
improve it.
My basic goal is that since I really enjoy programming in Scheme, I'd
like to avoid having to do this in FORTRAN on the big ol' supercomputer
here. Yes, I am in school, but my adviser had never heard of Scheme
before I mentioned it to her ;)
To stop the memory allocation problem, I attempted to install an
exception handler:
(define (mem-handler exc)
(if (or (heap-overflow-exception? exc)
(stack-overflow-exception? exc))
(if (noncontinuable-exception? exc)
(abort exc)
exc)
(with-exception-catcher error-handler
(lambda ()
(raise exc)))))
And then run the main driving routine within this like so:
(with-exception-handler mem-handler
(lambda ()
(gen-sim-data)))
Here's what happens when I run it:
chondestes: /home/joel/lisp/scm/agjones> nice -n +10 jonesim -:m1000000,dR-
*** WARNING -- Variable "gsl-vector" used in module "genxic.o1" is undefined
.9999107177669622 2000 50 16 2 1000. .5 0. 0. 0. 1e-4 1. .25 true
.9999111243206196 2000 50 16 2 1000. .5 0. 0. 0. 1e-4 1. .25 false
.9999110166041458 2000 50 16 2 1000. .5 0. 0. 0. 1e-4 1. .75 true
.9999111775781226 2000 50 16 2 1000. .5 0. 0. 0. 1e-4 1. .75 false
.9999108917731552 2000 50 16 2 1000. .5 0. 0. 0. .09 1. .25 true
.9999104499002971 2000 50 16 2 1000. .5 0. 0. 0. .09 1. .25 false
.9999107898981544 2000 50 16 2 1000. .5 0. 0. 0. .09 1. .75 true
zsh: killed nice -n +10 jonesim -:m1000000,dR-
Thanks for any help you can offer,
Joel
Getting the code
================
The code is available for public download from svn at
http://chondestes.bio.unc.edu/svn/models/agjones
A simple "make" in the top directory will yield a single executable that
reads "input.txt." The critical parameter is "N," the first variable in
"input.txt." I have tested this at 10, 100, and 2000, and it only
finishes successfully at N=10.
To run it you will need the loadable library "genxic.o1" from the
package located at
http://chondestes.bio.unc.edu/svn/genxic/trunk
To build the library, do a "make" in the scm/ directory, then copy it to
the top directory of agjones/.
--
Joel J. Adamson
University of North Carolina at Chapel Hill
CB #3280, Coker Hall
Chapel Hill, NC 27599-3280
Before you reply to this email, please read
http://www.unc.edu/~adamsonj/email-howto.html
More information about the Gambit-list
mailing list