[gambit-list] problem with load.

|/|/ Bendick droid at zoo-crew.org
Wed Jun 20 09:12:33 EDT 2007


Speaking of heaps I can't get gambit to let me (make-vector 10000000)
with any heap size...

% unlimit
% gsi -:h4000000
Gambit Version 4.0 beta 22

> (make-vector 10000000)
*** ERROR IN ##make-vector -- Heap overflow
1>

Any ideas?

On 6/20/07, Marc Feeley <feeley at iro.umontreal.ca> wrote:
>
> On 20-Jun-07, at 12:49 AM, naruto canada wrote:
>
> > On 6/19/07, Marc Feeley <feeley at iro.umontreal.ca> wrote:
> >>
> >> On 19-Jun-07, at 9:59 AM, naruto canada wrote:
> >>
> >> > gambit-c seems to have problem with "load".
> >> > I was able to load a test file 26meg with petite and mzscheme, but
> >> > crashes gambit-c. (gsi)
> >>
> >> By "crash" do you mean a segment violation or a "heap overflow"
> >> message?
> >
> > I think it's just out of memory, "top" showing fast increasing
> > memory usage.
>
> If it didn't output a "heap overflow" message, my guess is that
> Gambit is still computing but with such a large heap that it is very
> slow due to thrashing.
>
> >
> >>
> >> By my calculations it will require roughly 500 MB of RAM to load a 26
> >
> > I think it takes more than 500M, I have 1G of memory, and the program
> > crashes before loading.
>
> You might be able to avoid thrashing on your machine by specifying a
> maximum heap size with the -:hXXX option.  My test on a 1GB RAM
> machine seems to indicate that loading the 26MB file of integer
> sequences generates a peak of about 630MB of live data.  So this
> should work:
>
>     gsi -:h700000 test.scm
>
> To get the heap usage (live data, etc), do:
>
>     gsi -:h700000 -e '(gc-report-set! #t)' test.scm
>
> > I know the problem can be got around by simply doing "cat code.sc|
> > gsi".
> > I don't know if it's possible to treat "load" simply as another input
> > stream like petite or mzscheme.
>
> No.  Gambit's model is that files loaded by "load" are complete
> "modules".  The module has to be parsed (to check for lexical and
> syntax errors) and macro-expanded before it can execute.  This is so
> loading an interpreted file has (roughly) the same semantics as
> loading a compiled file.
>
> >
> > What if someone needs to write to test cases, based on the execution
> > of a large file then gambit-c won't be able handle it "in-code" sorta
> > speak, it has to "cat" the test case after "code.sc", just not pretty
> > but workable. anyway, it's not a serious problem.
>
> I think a better approach is to treat the sequences as "data".  Then
> you just need a small driver program that does:
>
> (define (go)
>    (with-input-from-file "sequences.dat"
>      (lambda ()
>        (let loop ()
>          (let ((s (read)))
>            (if (not (eof-object? s))
>                (begin
>                  (solve-seq s)
>                  (loop))))))))
>
> (go)
>
> Marc
>
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>


-- 
|/|/ Bendick



More information about the Gambit-list mailing list