RFR: 8264945: Optimize the code-gen for Math.pow(x, 0.5) [v2]

Jie Fu jiefu at openjdk.java.net
Mon Apr 19 15:10:55 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

Jie Fu has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains four commits:

 - Optimize C2
 - Merge branch 'master' into JDK-8264945
 - Revert old changes
 - 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=01
  Stats: 75 lines in 2 files changed: 61 ins; 13 del; 1 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