RFR: 8345465: Fix performance regression on x64 after JDK-8345120 [v4]

Per Minborg pminborg at openjdk.org
Tue Dec 10 07:30:19 UTC 2024


> This PR proposes to fix a performance regression (on x64 platforms) for 32-bit strings introduced by [JDK-8345120](https://bugs.openjdk.org/browse/JDK-8345120).
> 
> The PR also fixes a performance regression in the benchmarks caused by using the wrong type for `MemorySegment`.
> 
> Regrettably, this PR uses different code paths for various architectures. This gives optimum performance for all platforms at the expense of slightly more code complexity.
> 
> Base (macOS, M1) (Before https://github.com/openjdk/jdk/pull/22451)
> 
> 
> Benchmark                               (size)  Mode  Cnt    Score   Error  Units
> InternalStrLen.changedElementQuad            1  avgt   30    2.057 ? 0.012  ns/op
> InternalStrLen.changedElementQuad            4  avgt   30    3.776 ? 0.031  ns/op
> InternalStrLen.changedElementQuad           16  avgt   30    6.690 ? 0.060  ns/op
> InternalStrLen.changedElementQuad          251  avgt   30   48.581 ? 0.764  ns/op
> InternalStrLen.changedElementQuad         1024  avgt   30  196.188 ? 3.484  ns/op
> InternalStrLen.chunkedDouble                 1  avgt   30    1.903 ? 0.013  ns/op
> InternalStrLen.chunkedDouble                 4  avgt   30    3.446 ? 0.025  ns/op
> InternalStrLen.chunkedDouble                16  avgt   30    5.759 ? 0.062  ns/op
> InternalStrLen.chunkedDouble               251  avgt   30   26.892 ? 0.141  ns/op
> InternalStrLen.chunkedDouble              1024  avgt   30   72.940 ? 1.562  ns/op
> InternalStrLen.chunkedSingle                 1  avgt   30    1.897 ? 0.015  ns/op
> InternalStrLen.chunkedSingle                 4  avgt   30    5.357 ? 0.560  ns/op
> InternalStrLen.chunkedSingle                16  avgt   30    3.821 ? 0.052  ns/op
> InternalStrLen.chunkedSingle               251  avgt   30   19.482 ? 0.190  ns/op
> InternalStrLen.chunkedSingle              1024  avgt   30   38.938 ? 0.411  ns/op
> InternalStrLen.chunkedSingleMisaligned       1  avgt   30    2.230 ? 0.147  ns/op
> InternalStrLen.chunkedSingleMisaligned       4  avgt   30    5.424 ? 0.688  ns/op
> InternalStrLen.chunkedSingleMisaligned      16  avgt   30    9.573 ? 0.063  ns/op
> InternalStrLen.chunkedSingleMisaligned     251  avgt   30   22.242 ? 0.182  ns/op
> InternalStrLen.chunkedSingleMisaligned    1024  avgt   30   45.442 ? 0.252  ns/op
> InternalStrLen.elementByteMisaligned         1  avgt   30    1.616 ? 0.041  ns/op
> InternalStrLen.elementByteMisaligned         4  avgt   30    2.982 ? 0.018  ns/op
> InternalStrLen.elementByteMisaligned        16  avgt   30    8.662 ? 0.085  ns/op
> InternalStrLe...

Per Minborg has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains nine additional commits since the last revision:

 - Simplify code
 - Merge branch 'master' into strlen-bench-update
 - Improve short string cases
 - Update comment
 - Merge branch 'master' into strlen-bench-update
 - Fix regression on x64
 - Go back to use MemorySegment types
 - Merge branch 'master' into strlen-bench-update
 - Use aliases for legacy code.

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/22539/files
  - new: https://git.openjdk.org/jdk/pull/22539/files/96c3a55c..e4b0b479

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=22539&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=22539&range=02-03

  Stats: 6691 lines in 259 files changed: 2630 ins; 3039 del; 1022 mod
  Patch: https://git.openjdk.org/jdk/pull/22539.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22539/head:pull/22539

PR: https://git.openjdk.org/jdk/pull/22539


More information about the core-libs-dev mailing list