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