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

Dmitry Chuyko dmitry.chuyko at bell-sw.com
Fri Jul 10 19:29:04 UTC 2020


Joe, thanks for taking a look on that.

Would something like "Here d is either (signed) zero or NaN (JLS 
15.20.1)" make more sense?

-Dmitry

On 7/10/20 10:06 PM, Joe Darcy wrote:
> Hello,
>
> The comment
>
> +        // NaN is here by JLS 15.20.1
>
> is not correct; either NaN or (signed) zero is present at that point 
> in the code.
>
> -Joe
>
> On 7/10/2020 11:11 AM, Dmitry Chuyko wrote:
>> Hello,
>>
>> Please review a small change in Math.signum(double d) and 
>> Math.signum(float f) that improves performance for positive and 
>> negative numbers.
>>
>> Current version first checks if the number is NaN or zero, and for 
>> all other numbers it extracts sign bit and constructs fp result. That 
>> makes all regular numbers case ~1.2-1.5x slower than two special 
>> number cases.
>>
>> Improved version checks for regular number cases first, and does not 
>> use bit extraction. For positive and negative double numbers 
>> improvement is ~1.31-1.47x, for floats it is 1.06-1.46x. 
>> Micro-benchmark results are provided for tiered C2 on x86_64 and 
>> aarch64. For NaN and zero we see ~1.00-1.26x slowdown in same 
>> conditions.
>>
>> Please find benchmarks and results in the webrev.
>>
>> rfe: https://bugs.openjdk.java.net/browse/JDK-8249198
>>
>> webrev: http://cr.openjdk.java.net/~dchuyko/8249198/webrev.00/
>>
>> results: 
>> http://cr.openjdk.java.net/~dchuyko/8249198/webrev.00/results.txt
>>
>> testing: JCK tests, jtreg tests on different platforms.
>>
>> -Dmitry
>>


More information about the core-libs-dev mailing list