RFR: 8303401: Add a Vector API equalsIgnoreCase micro benchmark [v7]
Paul Sandoz
psandoz at openjdk.org
Wed Mar 1 17:52:37 UTC 2023
On Wed, 1 Mar 2023 14:28:55 GMT, Eirik Bjorsnos <duke at openjdk.org> wrote:
>> This PR suggests we add a vectorized equalsIgnoreCase benchmark to the set of benchmarks in `org.openjdk.bench.jdk.incubator.vector`. This benchmark serves as an example of how vectorization can be useful also in the area of text processing. It takes advantage of the fact that ASCII and Latin-1 were designed to optimize case-twiddling operations.
>>
>> The code came about during the work on #12632, where vectorization was deemed out of scope.
>>
>> Benchmark results:
>>
>>
>> Benchmark (size) Mode Cnt Score Error Units
>> EqualsIgnoreCaseBenchmark.scalar 16 avgt 15 21.575 ± 0.365 ns/op
>> EqualsIgnoreCaseBenchmark.scalar 32 avgt 15 43.199 ± 2.786 ns/op
>> EqualsIgnoreCaseBenchmark.scalar 64 avgt 15 71.389 ± 0.891 ns/op
>> EqualsIgnoreCaseBenchmark.scalar 128 avgt 15 146.827 ± 1.115 ns/op
>> EqualsIgnoreCaseBenchmark.scalar 1024 avgt 15 1062.759 ± 9.331 ns/op
>> EqualsIgnoreCaseBenchmark.vectorized 16 avgt 15 21.483 ± 0.121 ns/op
>> EqualsIgnoreCaseBenchmark.vectorized 32 avgt 15 10.538 ± 0.125 ns/op
>> EqualsIgnoreCaseBenchmark.vectorized 64 avgt 15 13.182 ± 0.177 ns/op
>> EqualsIgnoreCaseBenchmark.vectorized 128 avgt 15 19.192 ± 0.421 ns/op
>> EqualsIgnoreCaseBenchmark.vectorized 1024 avgt 15 92.521 ± 3.494 ns/op
>
> Eirik Bjorsnos has updated the pull request incrementally with one additional commit since the last revision:
>
> Use GT, LT, EQ operations since they seem to outperform GE, LE, NE.
Benchmark looks good.
I think you need to look at the generated code and perf data to get more insight into the differences you are observing.
Sometimes array alignment can add variance to the results (which may not be the case here), and to rule that out i sometimes run vector tests with the HotSpot option `-XX:ObjectAlignmentInBytes` e.g. `-XX:ObjectAlignmentInBytes=32`.
test/micro/org/openjdk/bench/jdk/incubator/vector/EqualsIgnoreCaseBenchmark.java line 111:
> 109: .or(letter.and(upperA.eq(upperB)));
> 110:
> 111: if(equalsIgnoreCase.allTrue()) {
Suggestion:
if (equalsIgnoreCase.allTrue()) {
-------------
PR: https://git.openjdk.org/jdk/pull/12790
More information about the core-libs-dev
mailing list