Hello Caml Group,
I would like to report what I think might be a bug in the Ocaml compiler. But first I wanted to run this by this group in case there's something I'm missing. I have some very simple code that consists of 2 nested loops. Inside the inner loop, is a simple statement. Furthermore, the inner loop is not "tight". Ie. the number of iterations within the inner loop is very large and the number of iterations of the outer loop is very small. I then manually time this. I then change the code by inserting a simple function call between the inner and outer loops. This should have virtually no effect whatsoever. However, when I time this, I get exactly twice the time. This is somewhat inexplicable. I tried tinkering with the "-inline" option for ocamlopt but this had no effect. Below is the actual code (main.ml):
let main () =
let dummy1 = ref 0 in
let dummy2 = ref 0.0 in
for i = 1 to 4 do
for j = 1 to 1000000000 do
dummy1 := !dummy1 + 1;
dummy1 := !dummy1 - 1
done;
dummy2 := Unix.gettimeofday ()
done
let _ = main ()
I compile as follows: ocamlopt unix.cmxa main.ml
and run: ./a.out
Is this in fact a bug of the ocamlopt compiler? Or is there some way currently to make this effect disappear?
Thanks for any help!
Sincerely,
Dan Koppel
---------------------------------
Sneak preview the all-new Yahoo.com. It's not radically different. Just radically better.