Swap should be better done native?

Martin Buchholz martinrb at google.com
Wed Mar 31 16:27:56 PDT 2010


I'm having second thoughts about implementing
Short.reverseBytes by calling  Integer.reverseBytes
since it's only  faster when we have intrinsified methods available.

        return (short) Integer.reverseBytes(x << 16);

Perhaps the best way is to intrinsify all of the reverseBytes methods
in hotspot.
But that requires hotspot hacking that I don't have the skills for.

Martin

On Wed, Mar 31, 2010 at 15:49, Martin Buchholz <martinrb at google.com> wrote:
> Alan, please file a bug and review this change.
>
> Synopsis: Optimize java/nio/Bits.java
> Description:
> Use intrinsified reverseBytes operation; elide no-op constructs
>
>
> So I have a proposed patch:
> http://cr.openjdk.java.net/~martin/webrevs/openjdk7/nioBits.java/
>
> I was surprised that I had written a benchmark for this years ago,
> and also surprised how much faster the swapping got by using
> the intrinsified methods
>
> Below are before/after benchmark results:
>
> ==> javac -Xlint:all SwapMicroBenchmark.java
> ==> java -server -esa -ea SwapMicroBenchmark
> Method                   Millis Ratio
> swap char BIG_ENDIAN         84 1.000
> swap char LITTLE_ENDIAN      49 0.585
> swap short BIG_ENDIAN        97 1.153
> swap short LITTLE_ENDIAN     49 0.589
> swap int BIG_ENDIAN          70 0.834
> swap int LITTLE_ENDIAN       25 0.308
> swap long BIG_ENDIAN         77 0.913
> swap long LITTLE_ENDIAN      10 0.125
> applying nioBits.java
> now at: nioBits.java
> Recompiled:
> /usr/local/google/home/martin/ws/upstream/src/share/classes/java/nio/Bits.java
> ==> javac -Xlint:all SwapMicroBenchmark.java
> ==> java -server -esa -ea SwapMicroBenchmark
> Method                   Millis Ratio
> swap char BIG_ENDIAN         67 1.000
> swap char LITTLE_ENDIAN      50 0.741
> swap short BIG_ENDIAN        68 1.010
> swap short LITTLE_ENDIAN     50 0.739
> swap int BIG_ENDIAN          20 0.306
> swap int LITTLE_ENDIAN       26 0.393
> swap long BIG_ENDIAN         13 0.202
> swap long LITTLE_ENDIAN      10 0.157
>
> Martin
>


More information about the nio-discuss mailing list