Jump to content
Excelsior Forums
path

performance comparison with ibm 1.3.1

Recommended Posts

Hi,

I have evaluated the excelsior JET compiler. I think it's a very good product. I compared it with the IBM 1.3.1. JDK.

The testcase is deserializing messages. A message contains about 20 properties and is 200 bytes long.

In the testcase the messages were read from a byte array.

results for 1,000,000 iterations:

JET             18.937 microsecond/message

IBM 1.3.1   11.031 microsecond/message

JET compiler settings were optimized inclusing -perfect+

The final code generated by the IBM jdk seems to be significantly faster.  I estimated that IBM JIT needs about 483 milliseconds for compilation.

Based on this I computed the number of messages in which the performance would be equal: 61,000.

JET and IBM jdk both need about 1.094 seconds.

What is causing the difference in speed of the code generated ? I noticed that increasing the amount of inling in JET decreases the performance.  Maybe the IBM JIT has better overview what to inline.

A possibility would for the JET compiler to only inline when code size does not increase. The programmer can specify a list of methods, which should be inlined more heavily. This is similar to C++ where inlined methods have to be placed in header files.

Or are there other reasons for the performance difference ?

JET settings:

-checkindex-

-checknull-

-checkarrstore-

-gcdefragment-

-genasserts-

-gendll-

-genstackalloc+

-gui-

-ignoreclassduplication-

-ignorememberabsence-

-inline+

-perfect+

-cpu=pentium

-classabsence=ERR

-compilerheap=0

-heaplimit=134301610

-inlinelimit=100

-inlinetolimit=500

Share this post


Link to post
Share on other sites

Hi,

Thanks for your investigation. We're always interested in such comparisons. Could you send us the exact test used? The reasons of the performance difference cannot be found without the example.

A possibility would for the JET compiler to only inline when code size does not increase.

It is the exact behaviour of JET with the 'inline-' option specified  :). To have absolutely no code inlined, one should specify 'neverinline+'.

The programmer can specify a list of methods, which should be inlined more heavily.

JET has a 'secret' feature allowing such specification, but it is not documented yet. If you're interested, we can provide additional information.

Our comparisons had shown that IBM JIT is generally faster for small 'synthetic' benchmarks, while JET behaves better on big real-life applications, especially GUI ones. One of the reasons is bigger memory consumption of programs under IBM JIT.

Share this post


Link to post
Share on other sites

Hi,

Yes, I am interested in the secret inline specification. It's interesting to see if the performance can be improved in this way.

Share this post


Link to post
Share on other sites

Hi,

We would like to look at the example first. It seems that the performance difference is caused not by the compiled code, but by the runtime implementation, so no compiler options (even secret ones  :)) would help.

Share this post


Link to post
Share on other sites

×