why Java Math slower than C Math?

Tom Tromey tromey@redhat.com
Tue Feb 25 20:29:00 GMT 2003


>>>>> "Manfred" == Manfred Bergmann <mdbergmann@t-online.de> writes:

Manfred> Ok, but the bounds-check is not to blame for the lower
Manfred> performance. I got another example: a loop where all short
Manfred> values in an array are casted to float and stored in a float
Manfred> array. Here Java is nearly factor 10 faster than C/C++,
Manfred> optimzed or unoptimized doesn't matter.
I'm very surprised by this result.
Tom> A few methods in java.lang.Math are treated as builtins at -O1 and
Tom> greater. Currently these are min, max, abs, cos, sin, and sqrt. We
Tom> might be able to add more, but I haven't really kept up with that
Tom> area.
Manfred> What does "builtin" mean? No function call is needed, so no
Manfred> assembler jump instruction? Istn't that similar to how
Manfred> inline function behave?
A "builtin" is a function that gcc has particular internal knowledge
of. For instance, for the `max' function, gcc knows its semantics and
will inline it into efficient code.
It is different from an inline function in a way. With an inline
function, gcc reads the body of the function from the program its is
compiling. With a builtin, the body of the function is determined by
gcc.
In our case this makes a big difference. The Math functions are
written in C++, and we can't inline a C++ function into a Java
function (since the Java compiler can't read the C++ code).
I think some builtin functions, like `sin', may be compiled to a
single assembly instruction on some platforms. I've never delved into
the details. You could look at the assembly output to see though.
Tom


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /