RFR: 8265768 [aarch64] Use glibc libm impl for dlog, dlog10, dexp iff 2.29 or greater on AArch64.

Anton Kozlov akozlov at openjdk.java.net
Tue Apr 27 13:31:36 UTC 2021


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.

Changes requested by akozlov (no project role).

src/hotspot/os_cpu/windows_aarch64/os_windows_aarch64.hpp line 29:

> 27: 
> 28:   static void setup_fpu();
> 29:   static bool stub_use_cmath_impl(int intrinsicID);

Something similar should be done in hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp. I've pushed this patch in my GHA and the build have failed: https://github.com/AntonKozlov/jdk/runs/2447540531. Similar check can be made if you set up GHA as described in https://github.com/openjdk/jdk/pull/3510/checks

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

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


More information about the hotspot-dev mailing list