Cezary Kaliszyk
2013-03-20 11:31:58 UTC
Dear all,
I have a PolyML program (below), for which maxheap is ignored:
The heap is kept at the minheap size and does not grow automatically.
For the three runs below the maxheap is set to the same amount (4GB):
If I run:
polyml --maxheap 4G --gcthreads 1 --minheap 4G < polybug.ml
Terminates in less than 1 sec.
If I run:
polyml --maxheap 4G --gcthreads 1 --minheap 500M < polybug.ml
It does not terminate (at least not in 15 minutes)
If I run:
polyml --maxheap 4G --gcthreads 1 --minheap 50M < polybug.ml
I get 'Run out of store' exception.
Does the heap not grow automatically up to maxheap? Is there a way
to make PolyML automatically adjust the heap size?
Tested both with 64bit polyml-5.5.0 (from Isabelle2013).
And with current repository version (r1702).
Regards,
Cezary
--
datatype tree = Node of tree * tree | Leaf of int;
fun go acc (Leaf _) = acc + 1
| go acc (Node (l, r)) = go (go (acc + 1) l) r;
fun size t = go 0 t;
fun build i j =
if i <= 0 then Leaf j
else Node (build (i-1) (2*j), build (i-2) (2*j+1));
val tim = ref (Timer.startRealTimer ());
fun tim_start () = tim := Timer.startRealTimer ();
fun tim_print () = print (Time.toString (Timer.checkRealTimer (!tim)) ^ "\n");
val t = build 0 0;
val al = 10000000;
val a = Array.array (al, t);
tim_start ();
fun irep i = if i = al then tim_print () else
let val _ = Array.update (a,i,build 0 i) in irep (i + 1) end;
irep 0;
irep 0;
irep 0;
irep 0;
irep 0;
I have a PolyML program (below), for which maxheap is ignored:
The heap is kept at the minheap size and does not grow automatically.
For the three runs below the maxheap is set to the same amount (4GB):
If I run:
polyml --maxheap 4G --gcthreads 1 --minheap 4G < polybug.ml
Terminates in less than 1 sec.
If I run:
polyml --maxheap 4G --gcthreads 1 --minheap 500M < polybug.ml
It does not terminate (at least not in 15 minutes)
If I run:
polyml --maxheap 4G --gcthreads 1 --minheap 50M < polybug.ml
I get 'Run out of store' exception.
Does the heap not grow automatically up to maxheap? Is there a way
to make PolyML automatically adjust the heap size?
Tested both with 64bit polyml-5.5.0 (from Isabelle2013).
And with current repository version (r1702).
Regards,
Cezary
--
datatype tree = Node of tree * tree | Leaf of int;
fun go acc (Leaf _) = acc + 1
| go acc (Node (l, r)) = go (go (acc + 1) l) r;
fun size t = go 0 t;
fun build i j =
if i <= 0 then Leaf j
else Node (build (i-1) (2*j), build (i-2) (2*j+1));
val tim = ref (Timer.startRealTimer ());
fun tim_start () = tim := Timer.startRealTimer ();
fun tim_print () = print (Time.toString (Timer.checkRealTimer (!tim)) ^ "\n");
val t = build 0 0;
val al = 10000000;
val a = Array.array (al, t);
tim_start ();
fun irep i = if i = al then tim_print () else
let val _ = Array.update (a,i,build 0 i) in irep (i + 1) end;
irep 0;
irep 0;
irep 0;
irep 0;
irep 0;
--
Cezary Kaliszyk, University of Innsbruck,
http://cl-informatik.uibk.ac.at/~cek/
Cezary Kaliszyk, University of Innsbruck,
http://cl-informatik.uibk.ac.at/~cek/