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