RFR: 8345120: A likely bug in StringSupport::chunkedStrlenShort [v3]

Maurizio Cimadamore mcimadamore at openjdk.org
Fri Nov 29 12:47:40 UTC 2024


On Fri, 29 Nov 2024 09:46:55 GMT, Per Minborg <pminborg at openjdk.org> wrote:

>> This PR proposes to rewrite the `StringSupport::chunkedStrlen*`  methods, fixing a bug in the `short_strlen` variant for odd offsets (`offset % 2 != 0`).
>> 
>> This PR also improves performance on modern hardware, as there is no need for pre-looping alignment. Removing this improves performance by about 30% for larger strings.
>> 
>> It passes the `jdk_foreign` test suit. Also, `tier1` through `tier3` passes on various platforms and configurations.
>> 
>> Base:
>> 
>> 
>> 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 incrementally with one additional commit since the last revision:
> 
>   Fix imports

test/jdk/java/foreign/TestStringEncoding.java line 2:

> 1: /*
> 2:  * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.

Do we have tests to check that we don't read too much? E.g. something that would trigger the problem that this PR is trying to fix?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22451#discussion_r1863475177


More information about the core-libs-dev mailing list