RFR: 8264945: Optimize the code-gen for Math.pow(x, 0.5)
Jie Fu
jiefu at openjdk.java.net
Fri Apr 9 02:26:46 UTC 2021
Hi all,
I'd like to optimize the code-gen for Math.pow(x, 0.5).
And 7x ~ 14x performance improvement is observed by the jmh micro-benchmarks.
While I was optimizing a machine learning program, I found both Math.pow(x, 2) and Math.pow(x, 0.5) are used.
To my surprise, C2 just optimizes the case for Math.pow(x, 2) [1], but still not for Math.pow(x, 0.5) yet.
The patch just replace Math.pow(x, 0.5) with Math.sqrt(x).
Before:
Benchmark (seed) Mode Cnt Score Error Units
MathBench.powDouble0Dot5 0 thrpt 8 45525.117 ? 11.686 ops/ms
MathBench.powDouble0Dot5Loop 0 thrpt 8 0.031 ? 0.001 ops/ms
Benchmark (seed) Mode Cnt Score Error Units
MathBench.powDouble0Dot5 0 thrpt 8 45509.317 ? 6.581 ops/ms
MathBench.powDouble0Dot5Loop 0 thrpt 8 0.031 ? 0.001 ops/ms
After:
Benchmark (seed) Mode Cnt Score Error Units
MathBench.powDouble0Dot5 0 thrpt 8 343354.892 ? 362.900 ops/ms
MathBench.powDouble0Dot5Loop 0 thrpt 8 0.457 ? 0.001 ops/mso
Benchmark (seed) Mode Cnt Score Error Units
MathBench.powDouble0Dot5 0 thrpt 8 343421.559 ? 49.326 ops/ms
MathBench.powDouble0Dot5Loop 0 thrpt 8 0.457 ? 0.001 ops/ms
Testing:
- tier1~3 on Linux/x64
Thanks,
Best regards,
Jie
[1] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/library_call.cpp#L1680
-------------
Commit messages:
- 8264945: Optimize the code-gen for Math.pow(x, 0.5)
Changes: https://git.openjdk.java.net/jdk/pull/3404/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3404&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8264945
Stats: 28 lines in 2 files changed: 23 ins; 0 del; 5 mod
Patch: https://git.openjdk.java.net/jdk/pull/3404.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3404/head:pull/3404
PR: https://git.openjdk.java.net/jdk/pull/3404
More information about the hotspot-compiler-dev
mailing list