Hi, thanks for open-sourcing such a cool Scheme!
I am testing out how to make a large table, but have problems with heap-size:
(define t (make-table))
(define (doit x x-max) (if (<= x x-max) (begin (table-set! t (number->string x) x) (doit (+ x 1) x-max))))
(doit 1 1000000) works fine and is fast as well. (doit 1 10000000) runs out of heap-space, which is probably not that strange.
I try to increase the heap, but still can't store any more records (I start gsi with parameter gsi -m:3000000 and/or gsi -h:3000000).
I have also compiled the program with gsc, and started the program with a larger heap, but the problem remains. If I try to allocate to much memory (like 5 GB on my 4 GB machine), the programs gives me an error msg, so it seems the heap is actually allocated?
Any clues?
Cheers,
Petter Egesund
Afficher les réponses par date
You are probably using a 32 bit processor. Gambit represents Scheme objects with a 32 bit header containing 3 bits for the GC, 5 bits for the type information, and 24 bits for the length of the object in bytes (max object size = 16MB). Gambit tables are objects which consume 8 bytes per entry (including inactive entries). So on a 32 bit processor, tables are limited to 2*10^6 entries. Your second call to doit tries to create a table with (at least) 10*10^6 entries, which is impossible.
The error message is perhaps a bit confusing... I'll see if this can be improved. Others have been similarly confused. I'm thinking of redesigning Gambit's memory allocator (mainly to have a better GC) so I may remove this limitation in the process.
Solution for now? Get a machine with a 64 bit processor (the 64 bit header will have 56 bits for the object length, which should be sufficient!).
Marc
On 14-Aug-08, at 9:11 AM, Hans Petter Egesund wrote:
Hi, thanks for open-sourcing such a cool Scheme!
I am testing out how to make a large table, but have problems with heap-size:
(define t (make-table))
(define (doit x x-max) (if (<= x x-max) (begin (table-set! t (number->string x) x) (doit (+ x 1) x-max))))
(doit 1 1000000) works fine and is fast as well. (doit 1 10000000) runs out of heap-space, which is probably not that strange.
I try to increase the heap, but still can't store any more records (I start gsi with parameter gsi -m:3000000 and/or gsi -h:3000000).
I have also compiled the program with gsc, and started the program with a larger heap, but the problem remains. If I try to allocate to much memory (like 5 GB on my 4 GB machine), the programs gives me an error msg, so it seems the heap is actually allocated?
Any clues?
Cheers,
Petter Egesund _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
Yes, you are right. Another reason to change to 64-bit.
Thanks,
Petter
Den 14. aug. 2008 kl. 15.51 skrev Marc Feeley:
You are probably using a 32 bit processor. Gambit represents Scheme objects with a 32 bit header containing 3 bits for the GC, 5 bits for the type information, and 24 bits for the length of the object in bytes (max object size = 16MB). Gambit tables are objects which consume 8 bytes per entry (including inactive entries). So on a 32 bit processor, tables are limited to 2*10^6 entries. Your second call to doit tries to create a table with (at least) 10*10^6 entries, which is impossible.
The error message is perhaps a bit confusing... I'll see if this can be improved. Others have been similarly confused. I'm thinking of redesigning Gambit's memory allocator (mainly to have a better GC) so I may remove this limitation in the process.
Solution for now? Get a machine with a 64 bit processor (the 64 bit header will have 56 bits for the object length, which should be sufficient!).
Marc
On 14-Aug-08, at 9:11 AM, Hans Petter Egesund wrote:
Hi, thanks for open-sourcing such a cool Scheme!
I am testing out how to make a large table, but have problems with heap-size:
(define t (make-table))
(define (doit x x-max) (if (<= x x-max) (begin (table-set! t (number->string x) x) (doit (+ x 1) x-max))))
(doit 1 1000000) works fine and is fast as well. (doit 1 10000000) runs out of heap-space, which is probably not that strange.
I try to increase the heap, but still can't store any more records (I start gsi with parameter gsi -m:3000000 and/or gsi -h:3000000).
I have also compiled the program with gsc, and started the program with a larger heap, but the problem remains. If I try to allocate to much memory (like 5 GB on my 4 GB machine), the programs gives me an error msg, so it seems the heap is actually allocated?
Any clues?
Cheers,
Petter Egesund _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list