RFR(S): 8249198: Faster Math.signum(fp) for positive and negative numbers

Dmitry Chuyko dmitry.chuyko at bell-sw.com
Sun Jul 12 11:44:33 UTC 2020


Hello,

After much more thorough analysis of benchmarks on different platforms I 
tend to cancel this patch proposal.

As Brian rightly remarked [3], the benchmark has peculiar explicit 
iteration over the data. This is more like 2nd anti-pattern in safe 
looping JMH sample [4]. This actually came out of larger experiment in 
Lucene geo-search. But canonical case like [5] is also important.

For micro-benchmarks with any kind of safe looping, there can be a 
degradation up to 7x. It is caused by spilling/re-materialization of 
registers that hold constants when they are alive around the call (good 
case benefits when they are moved out of loops).

The possible other way to improve singnum should probably be platform 
specific.

Joe and Brian, thanks again for taking a look.

[3] 
https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-July/067671.html

[4] 
https://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_34_SafeLooping.java

[5] http://cr.openjdk.java.net/~dchuyko/8249198/DoubleSignum.java

On 7/10/20 11:56 PM, Brian Burkhalter wrote:
> Hi Dmitry,
>
> Regarding the benchmarks [1], I was curious as to why you chose to use 
> the reduce() method, which inside it loops over invocations of 
> signum(), given the considerations discussed in the sample 
> JMHSample_11_Loops.java [2]? Is that in order to force inlining? I 
> have not used the @CompilerControl annotation.
>
> Thanks,
>
> Brian
>
> [1] 
> http://cr.openjdk.java.net/~dchuyko/8249198/webrev.00/test/micro/org/openjdk/bench/java/lang/DoubleSignum.java.html
> http://cr.openjdk.java.net/~dchuyko/8249198/webrev.00/test/micro/org/openjdk/bench/java/lang/FloatSignum.java.html
> [2] 
> https://hg.openjdk.java.net/code-tools/jmh/file/4a420afe8a9e/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_11_Loops.java 
>
>
>> On Jul 10, 2020, at 1:28 PM, Joe Darcy <joe.darcy at oracle.com 
>> <mailto:joe.darcy at oracle.com>> wrote:
>>
>> I'll leave it to others to review the benchmarks.
>


More information about the core-libs-dev mailing list