RFR: 8265768 [aarch64] Use glibc libm impl for dlog, dlog10, dexp iff 2.29 or greater on AArch64.
Joe Darcy
joe.darcy at oracle.com
Thu May 6 16:29:49 UTC 2021
On 5/6/2021 5:21 AM, Carlos O'Donell wrote:
> On Thu, 15 Apr 2021 08:33:47 GMT, gregcawthorne <github.com+73799211+gregcawthorne at openjdk.org> wrote:
>
>> Glibc 2.29 onwards provides optimised versions of log,log10,exp.
>> These functions have an accuracy of 0.9ulp or better in glibc
>> 2.29.
>>
>> Therefore this patch adds code to parse, store and check
>> the runtime glibcs version in os_linux.cpp/hpp.
>> This is then used to select the glibcs implementation of
>> log, log10, exp at runtime for c1 and c2, iff we have
>> glibc 2.29 or greater.
>>
>> This will ensure OpenJDK can benefit from future improvements
>> to glibc.
>>
>> Glibc adheres to the ieee754 standard, unless stated otherwise
>> in its spec.
>>
>> As there are no stated exceptions in the current glibc spec
>> for dlog, dlog10 and dexp, we can assume they currently follow
>> ieee754 (which testing confirms). As such, future version of
>> glibc are unlikely to lose this compliance with ieee754 in
>> future.
>>
>> W.r.t performance this patch sees ~15-30% performance improvements for
>> log and log10, with ~50-80% performance improvements for exp for the
>> common input ranged (which output real numbers). However for the NaN
>> and inf output ranges we see a slow down of up to a factor of 2 for
>> some functions and architectures.
>>
>> Due to this being the uncommon case we assert that this is a
>> worthwhile tradeoff.
> Where does the requirement for monotonicity come from?
>
From the specifications:
"The computed result [of log] must be within 1 ulp of the exact result.
Results must be semi-monotonic."
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Math.html#log(double)
and similarly for the other method.
-Joe
More information about the core-libs-dev
mailing list