[aarch64-port-dev ] [16] RFR(S): 8251525: AARCH64: Faster Math.signum(fp)
Dmitry Chuyko
dmitry.chuyko at bell-sw.com
Mon Aug 31 14:28:46 UTC 2020
Hi Andrew,
Here is another version of intrinsics. It is an extension of webrev.03.
Additional thing is that constants 0 and 1 that are used internally by
intrinics are constructed as nodes. This is somehow similar to what is
done for passing pointers to tables.
webrev: http://cr.openjdk.java.net/~dchuyko/8251525/webrev.04/
results:
http://cr.openjdk.java.net/~dchuyko/8251525/webrev.04/benchmarks/signum-facgt_ir-copysign.ods
As you can see the case of intrinsic for entire signum is now up to
29.2% better for "random" data. NaN is 30% better also. The only
suffering case is 0, which is just 1 number (in two representations) of
the whole range, and the regression is ~7%/10%. Performance in case of 0
becomes the same as for all other numbers (and NaN). I don't suppose
that 0 is so special. Because if input data is all zeroes and program
produces zeroes during the computation, it is trivial. If zero make half
of the data, there still be a win.
For the case of copySign(double), making a constant in IR amplifies
regression in Blackhole benchmark, but still may be interesting to
experiment with.
Just in case, it will be interesting to remeasure Blackhole variants if
compiler support [1] will be implemented.
Here is also a benchmark variant [2] where we consume different data,
and it shows same effects as Blackhole.consume(signum).
-Dmitry
[1] https://bugs.openjdk.java.net/browse/JDK-8252505
[2]
http://cr.openjdk.java.net/~dchuyko/8251525/webrev.04/benchmarks/DoubleSideSinkBench.java
More information about the hotspot-compiler-dev
mailing list