RFR[S]:8241874 [PPC64] Improve performance of Long.reverseBytes() and Integer.reverseBytes() on Power9

Doerr, Martin martin.doerr at sap.com
Tue Apr 14 13:26:08 UTC 2020


Hi Corey,

thanks for contributing it. Looks good to me. I’ll run it through our testing and let you know about the results.

Best regards,
Martin


From: ppc-aix-port-dev <ppc-aix-port-dev-bounces at openjdk.java.net> On Behalf Of Michihiro Horie
Sent: Freitag, 10. April 2020 10:48
To: cjashfor at linux.ibm.com
Cc: hotspot-compiler-dev at openjdk.java.net; ppc-aix-port-dev at openjdk.java.net
Subject: Re: RFR[S]:8241874 [PPC64] Improve performance of Long.reverseBytes() and Integer.reverseBytes() on Power9


Hi Corey,

Thank you for sharing your benchmarks. I confirmed your change reduced the elapsed time of the benchmarks by more than 30% on my P9 node. Also, I checked JTREG results, which look no problem.

BTW, I cannot find further points of improvement in your change.

Best regards,
Michihiro


----- Original message -----
From: "Corey Ashford" <cjashfor at linux.ibm.com<mailto:cjashfor at linux.ibm.com>>
To: Michihiro Horie/Japan/IBM at IBMJP
Cc: hotspot-compiler-dev at openjdk.java.net<mailto:hotspot-compiler-dev at openjdk.java.net>, ppc-aix-port-dev at openjdk.java.net<mailto:ppc-aix-port-dev at openjdk.java.net>, "Gustavo Romero" <gromero at linux.vnet.ibm.com<mailto:gromero at linux.vnet.ibm.com>>
Subject: Re: RFR[S]:8241874 [PPC64] Improve performance of Long.reverseBytes() and Integer.reverseBytes() on Power9
Date: Fri, Apr 3, 2020 8:07 AM

On 4/2/20 7:27 AM, Michihiro Horie wrote:
> Hi Corey,
>
> I’m not a reviewer, but I can run your benchmark in my local P9 node if
> you share it.
>
> Best regards,
> Michihiro

The tests are somewhat hokey; I added the shifts to keep the compiler
from hoisting the code that it could predetermine the result.

Here's the one for Long.reverseBytes():

import java.lang.*;

class ReverseLong
{
     public static void main(String args[])
     {
         long reversed, re_reversed;
long accum = 0;
long orig = 0x1122334455667788L;
long start = System.currentTimeMillis();
for (int i = 0; i < 1_000_000_000; i++) {
// Try to keep java from figuring out stuff in advance
reversed = Long.reverseBytes(orig);
re_reversed = Long.reverseBytes(reversed);
if (re_reversed != orig) {
         System.out.println("Orig: " + String.format("%16x", orig) +
"  Re-reversed: " + String.format("%16x", re_reversed));
}
accum += orig;
orig = Long.rotateRight(orig, 3);
}
System.out.println("Elapsed time: " +
Long.toString(System.currentTimeMillis() - start));
System.out.println("accum: " + Long.toString(accum));
     }
}


And the one for Integer.reverseBytes():

import java.lang.*;

class ReverseInt
{
     public static void main(String args[])
     {
         int reversed, re_reversed;
int orig = 0x11223344;
int accum = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < 1_000_000_000; i++) {
// Try to keep java from figuring out stuff in advance
reversed = Integer.reverseBytes(orig);
re_reversed = Integer.reverseBytes(reversed);
if (re_reversed != orig) {
         System.out.println("Orig: " + String.format("%08x", orig) +
"  Re-reversed: " + String.format("%08x", re_reversed));
}
accum += orig;
orig = Integer.rotateRight(orig, 3);
}
System.out.println("Elapsed time: " +
Long.toString(System.currentTimeMillis() - start));
System.out.println("accum: " + Integer.toString(accum));
     }
}


More information about the hotspot-compiler-dev mailing list