* [Caml-list] problems with ocamlopt
@ 2003-08-17 18:09 Tahir H Butt
2003-08-21 12:49 ` Xavier Leroy
0 siblings, 1 reply; 2+ messages in thread
From: Tahir H Butt @ 2003-08-17 18:09 UTC (permalink / raw)
To: caml-list, debian-ocaml-maint
Hi all,
I have some code which is doing some basic matrix calculations (for a
perceptron classifier) and I've run into some problems with ocamlopt. It
seems that the same code, which runs fine on my laptop (powerbook, mac
os x > 10.2, ocaml 3.06) with ocamlopt and runs fine on a linux machine
(athlon mp 2000+, 2.4.18-24.7, ocaml 3.06 using gcc 3.2), does not run
on my work machine (pentium 4 2.26, debian 2.4.20, ocaml 3.06 using gcc
3.3.1). On my work machine if I just compile via ocamlc, the code runs
fine. But if I do it to native code, I get (a) incorrect numbers after a
certain number of iterations of my code, (b) a stack overflow after a
few more iterations. I have no special ocamlopt flags set. I first
thought maybe it's the binaries from debian that were at fault, but I
tried recompiling but that did not help the situation.
What could possibly be at fault here? Is it ocamlopt? Is it debian? the
kernel?
Any help would be much appreciated. Below is some information on the
work machine where ocamlopt is coughing up. Thanks!
# /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 2
model name : Intel(R) Pentium(R) 4 CPU 2.26GHz
stepping : 4
cpu MHz : 2254.022
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips : 4495.76
# gcc --version
gcc (GCC) 3.3.1 20030626 (Debian prerelease)
# ocamlopt -version
3.06
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Caml-list] problems with ocamlopt
2003-08-17 18:09 [Caml-list] problems with ocamlopt Tahir H Butt
@ 2003-08-21 12:49 ` Xavier Leroy
0 siblings, 0 replies; 2+ messages in thread
From: Xavier Leroy @ 2003-08-21 12:49 UTC (permalink / raw)
To: Tahir H Butt; +Cc: caml-list, debian-ocaml-maint
> I have some code which is doing some basic matrix calculations (for a
> perceptron classifier) and I've run into some problems with ocamlopt. It
> seems that the same code, which runs fine on my laptop (powerbook, mac
> os x > 10.2, ocaml 3.06) with ocamlopt and runs fine on a linux machine
> (athlon mp 2000+, 2.4.18-24.7, ocaml 3.06 using gcc 3.2), does not run
> on my work machine (pentium 4 2.26, debian 2.4.20, ocaml 3.06 using gcc
> 3.3.1). On my work machine if I just compile via ocamlc, the code runs
> fine. But if I do it to native code, I get (a) incorrect numbers after a
> certain number of iterations of my code, (b) a stack overflow after a
> few more iterations.
It is really surprising that the ocamlopt-generated code behaves
differently on the two x86 machines (the Athlon and the P4). I hope
this is not due to a gcc 3.3.1 bug. (OCaml has exhibited bugs in
certain versions of gcc before.)
The following facts could explain the other differences (between
ocamlc and ocamlopt, and between the Powerbook and the x86 machines):
1- On the x86, ocamlopt-generated code uses extended precision (80
bits) to compute certain intermediate float results, while ocamlc
performs all float computations with 64 bit floats. The extra
precision doesn't hurt in general (you get "more correct" results),
but if your computations are ill-conditioned, this can cause the
results to vary dramatically between bytecode and native. (If this
happens, it's really a problem with your code, which is numerically
unstable and thus computes meaningless results.)
2- ocamlc always execute tail-calls in constant stack space, while ocamlopt
will consume stack space for tail-calls in the following case: the
called function is not the current function (i.e. this isn't a tail
recursion) and the number of arguments to the function exceed the
number of registers set apart for parameter passing. The latter
number is 6 for x86 processors, and 8 for the PowerPC.
So, 1- could explain why you'd get different results with ocamlc or
ocamlopt/PowerPC and with ocamlopt/x86. And 2- could explain why
you'd get a stack overflow with ocamlopt/x86 (e.g. if you have a
7-argument tail-call that is not tail-rec) but not with ocamlc nor
ocamlopt/PowerPC.
But this doesn't explain the difference between the two ocamlopt/x86
platforms.
Did you try taking the executable generated by ocamlopt on the Athlon
machine and running it on the P4 machine?
- Xavier Leroy
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2003-08-21 12:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-17 18:09 [Caml-list] problems with ocamlopt Tahir H Butt
2003-08-21 12:49 ` Xavier Leroy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).