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