On Wed, 1 Mar 2023 06:34:20 GMT, Eirik Bjorsnos <d...@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    20.671 ± 0.718  
>> ns/op
>> EqualsIgnoreCaseBenchmark.scalar          32  avgt   15    46.155 ± 3.258  
>> ns/op
>> EqualsIgnoreCaseBenchmark.scalar          64  avgt   15    68.248 ± 1.767  
>> ns/op
>> EqualsIgnoreCaseBenchmark.scalar         128  avgt   15   148.948 ± 0.890  
>> ns/op
>> EqualsIgnoreCaseBenchmark.scalar        1024  avgt   15  1090.708 ± 7.540  
>> ns/op
>> EqualsIgnoreCaseBenchmark.vectorized      16  avgt   15    21.872 ± 0.232  
>> ns/op
>> EqualsIgnoreCaseBenchmark.vectorized      32  avgt   15    11.378 ± 0.097  
>> ns/op
>> EqualsIgnoreCaseBenchmark.vectorized      64  avgt   15    13.703 ± 0.135  
>> ns/op
>> EqualsIgnoreCaseBenchmark.vectorized     128  avgt   15    21.632 ± 0.735  
>> ns/op
>> EqualsIgnoreCaseBenchmark.vectorized    1024  avgt   15   105.509 ± 7.493  
>> ns/op
>
> Eirik Bjorsnos has updated the pull request incrementally with two additional 
> commits since the last revision:
> 
>  - Adjust whitespace as suggested in review
>  - Replace Blackhold.consume with return values

I realized that the `equal.allTrue()` condition is checked early in the loop, 
so there is no need to include the `equal` in the `equalsIgnoreCase` towards 
the end the loop. Removing it also gives a small performance improvement:

Before:


Benchmark                             (size)  Mode  Cnt    Score   Error  Units
EqualsIgnoreCaseBenchmark.vectorized    1024  avgt   15  123.753 ± 1.405  ns/op


After:


Benchmark                             (size)  Mode  Cnt    Score   Error  Units
EqualsIgnoreCaseBenchmark.vectorized    1024  avgt   15  118.578 ± 1.960  ns/op

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

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

Reply via email to