RFR: 8264054: Bad XMM performance on java.lang.MathBench.sqrtDouble

Eric Caspole ecaspole at openjdk.java.net
Tue Mar 30 14:56:08 UTC 2021


On Tue, 30 Mar 2021 12:27:27 GMT, Nils Eliasson <neliasso at openjdk.org> wrote:

>> For the j.l.Math JMH at https://github.com/openjdk/jmh-jdk-microbenchmarks/blob/master/micros-jdk11/src/main/java/org/openjdk/bench/java/lang/MathBench.java, the performance for sqrt benchmark could be improved.  Thanks a lot to Eric Caspole for finding this issue.
>> 
>> Benchmark:
>>     @Benchmark
>>     public double  sqrtDouble() {
>>         return  Math.sqrt(double4Dot1);
>>     }
>> 
>> Current code generated (linux format) by c2 JIT is:
>>      vsqrtsd 0x50(%r10),%xmm0,%xmm0
>> 
>> The vsqrtsd instruction operation is specified as below: 
>>      VSQRTSD (VEX.128 encoded version)
>>      DEST[63:0] := SQRT(SRC2[63:0])
>>      DEST[127:64] := SRC1[127:64]
>>      DEST[MAXVL-1:128] := 0
>> 
>> The upper 127:64 bits are set from previous contents of xmm0. As the destination xmm0 register was not initialized prior to use by c2 JIT, this causes stall and lower performance.
>> 
>> By adding xmm0 initialization prior to use, the performance of the above benchmark improves significantly.
>> 
>> Code generated after patch:
>>      vxorpd %xmm0,%xmm0,%xmm0
>>      vsqrtsd 0x50(%r10),%xmm0,%xmm0
>> 
>> Performance before patch:
>> Benchmark                    Mode  Cnt       Score      Error   Units
>> MathBench.sqrtDouble        thrpt    8  193612.396 ±  95.807  ops/ms
>> 
>> Performance after patch:
>> MathBench.sqrtDouble        thrpt    8  276388.024 ± 846.372  ops/ms
>> 
>> Best Regards,
>> Sandhya
>
> In the bug report you are mentioning new test micro benchmark test cases. Have you already contributed those, or would you like to add those to this PR?

I added these micros the the  https://github.com/openjdk/jmh-jdk-microbenchmarks a couple weeks ago, before we knew about this problem, because it is easy to work on JMH with Maven.  But it would be best to contribute these micros into the JDK repo at the same time as this patch. I will get it together for the JDK repo and connect with Sandhya.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3256


More information about the hotspot-compiler-dev mailing list