On 11/15/2017 09:44 PM, Andrew Haley wrote:
On 15/11/17 18:38, Vitaly Davidovich wrote:
On Wed, Nov 15, 2017 at 12:40 PM, Andrew Haley <a...@redhat.com> wrote:
On 15/11/17 15:38, Alan Bateman wrote:
Moving the nativeOrder out of the loop make sense but I'm curious about
the context for improving this implementation.
I wonder about lifting ByteOrder.nativeOrder(). Maybe it fails to
inline because the method is too large: if that happens, we really
lose. I'm not seeing that, though: it seems to be inlined just fine,
and has no effect.
Sure, it is the effect of missing inlining. But you can relatively
easily break it by your tiered JIT settings. Not sure about AOT. Like
(in Hotspot):
-XX:-Inline, -XX:MaxInlineLevel=0 (no wonder to meet this one in wild),
-XX:FreqInlineSize=3, -XX:InlineSmallCode=15..
In any case, this patch doesn't help anything on my test hardware.
Is this with -Xcomp though? That can generate crap code because
there's no profiling information. Not that -Xcomp should be the way
to test peak performance IMO, but that is the setting that was used I
believe.
Another noticeable case is -Xint where absolute times of CRC calculation
are quite long.
Here is a benchmark that is easier to experiment with (no need to build
jdk or to turn off intrinsics):
http://cr.openjdk.java.net/~dchuyko/8191328/CRC32CAltBench.java
Some x86 results:
default tiered
before 380.957 ± 11.621 ns/op
after 350.838 ± 5.149 ns/op
-XX:MaxInlineLevel=0
before 656.791 ± 8.216 ns/op
after 340.999 ± 2.686 ns/op
-Xint
before 36113.441 ± 197.716 ns/op
after 26928.593 ± 133.309 ns/op
-Dmitry
Shrug; maybe. We shouldn't mess the code up for -Xcomp.