This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: my crude benchmark results
On Jul 13, 2004, at 4:57 AM, Andrew Haley wrote:
John Gabriele writes:
[snip]
Ok,.. heaven forgive me for the cycles I am about to burn...
Time taken to run:
in C:
8.5 seconds
Java via Apple's JVM:
22.2 seconds
Java via GCJ:
25.5 seconds
[snip]
gcj has its own math library that is very accurate but doesn't use the
FPU's builtins. Turn that off with -ffast-math.
$ gcc main.c -O3 -lm -ffast-math
$ time ./a.out
Size = 50000
Sum = 50000.000000
2.81user 0.01system 0:02.83elapsed 99%CPU
Ahhh... Thanks for the tips.
for main.c, no change.
$ gcj Main.java --main=Main -O3 -ffast-math
$ time ./a.out
Size = 50000
Sum = 50000.0
3.53user 0.03system 0:04.19elapsed 84%CPU
Java is slighty slower, probably because of bounds checks and
synchronization.
Trying without bounds checks, to be a more accurate comparison with C:
$ gcj Main.java --main=Main -O3 -save-temps -ffast-math
-fno-bounds-check
$ LD_LIBRARY_PATH=/usr/local/lib time ./a.out
Size = 50000
Sum = 50000.0
3.42user 0.03system 0:03.48elapsed 98%CPU
21% slower. I can live with that.
Andrew.
Ok, using GCJ, AOT compiled, summary of my results:
no -O3: 25.5 seconds
with -O3: 24.2 seconds ( 5.1% improvement)
with -O3 and -ffast-math: 23.2 seconds ( 9.0% improvement)
also no-bounds-check: 22.2 seconds (12.9% improvement)
... this reminds me that we should try to get bounds check elimination
into gcj before 3.5.
Oooh, a compile-time option to skip bounds-checking? Sweet.
James Damour wrote:
P.S. Looking at the numbers, I think that Mr. Gabriel didn't use GCJ to
"ahead of time" compile the java code.
I created my gcj-aot compiled most-optimized binary like so:
gcj Main.java --main=Main -O3 -save-temps -ffast-math -fno-bounds-check
-o jfastest.out
and I've never even used gij.
Recall, I'm on a Mac here -- a PPC G3 -- so GCJ may optimize
differently here
than on an Athlon. Also, Apple's JVM may be very different from Sun's
(or
Blackdown's) JVM.
P.P.S Mr. Gabriel, when you post your code where others can read it,
kindly include *some* sort of license. Otherwise no one can legally
display your code due to copyright limitations.
Thanks for the heads-up. I figured a trivial one-pager like that didn't
require any sort of license. In fact, it's pretty sad that this would
even
come up over that teency bit of code (no offense to you -- you're just
pointing it out).
Oh -- and call me "John"!
:)