[jdk11u-dev] RFR: 8302191: Performance degradation for float/double modulo on Linux
Jan Kratochvil
duke at openjdk.org
Fri Apr 7 13:19:56 UTC 2023
On Tue, 4 Apr 2023 13:00:13 GMT, Jan Kratochvil <duke at openjdk.org> wrote:
> Backport of [JDK-8302191](https://bugs.openjdk.java.net/browse/JDK-8302191). Applies cleanly. It is already committed in trunk.
>
>
> build/linux-x86_64-normal-server-fastdebug/jdk/bin/java -jar ~/azul/jmh-jdk-microbenchmarks-git/micros-jdk8/target/micros-jdk8-1.0-SNAPSHOT.jar org.openjdk.bench.java.lang.FloatDoubleRem -i 2 -r 2 -wi 2 -f 2
> unpatched:
> Benchmark Mode Cnt Score Error Units
> FloatDoubleRem.calcDoubleJava avgt 4 103.219 ± 4.637 ns/op
> FloatDoubleRem.calcFloatJava avgt 4 106.588 ± 10.357 ns/op
> FloatDoubleRem.cornercaseDoubleJava avgt 4 11.822 ± 4.074 ns/op
> FloatDoubleRem.cornercaseFloatJava avgt 4 11.435 ± 1.355 ns/op
> patched:
> Benchmark Mode Cnt Score Error Units
> FloatDoubleRem.calcDoubleJava avgt 4 34.712 ± 22.532 ns/op
> FloatDoubleRem.calcFloatJava avgt 4 23.942 ± 5.177 ns/op
> FloatDoubleRem.cornercaseDoubleJava avgt 4 8.080 ± 1.004 ns/op
> FloatDoubleRem.cornercaseFloatJava avgt 4 10.647 ± 0.545 ns/op
This change is related to a GCC fix: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108922
gcc-4.8 -> gcc-4.9 had a performance regression. This will be fixed in future gcc-13 release. Unaware whether it also gets backported to recent GCC releases.
**This OpenJDK change fixes a performance regression when comparing recent builds of OpenJDK against older OpenJDK releases still be still compiled by <=gcc-4.8.**
This OpenJDK change makes OpenJDK immune against the GCC performance regression. This GCC performance regression is now present in mostly any GCC release in use nowadays.
While my test shows 3x slowdown a customer's testcase shows about 6x slowdown, it depends on the numbers being computed.
-------------
PR Comment: https://git.openjdk.org/jdk11u-dev/pull/1824#issuecomment-1500281161
More information about the jdk-updates-dev
mailing list