RFR: 8268229: Aarch64: Use Neon in intrinsics for String.equals
Wang Huang
whuang at openjdk.java.net
Wed Jun 9 03:21:30 UTC 2021
Dear all,
Could you give me a favor to review this patch? It improves the performance of the intrinsic of `String.equals` on Neon backend of Aarch64.
We profile the performance by using this JMH case:
```java
package com.huawei.string;
import java.util.*;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.CompilerControl;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.infra.Blackhole;
@State(Scope.Thread)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public class StringEqual {
@Param({"8", "64", "4096"})
int size;
String str1;
String str2;
@Setup(Level.Trial)
public void init() {
str1 = newString(size, 'c', '1');
str2 = newString(size, 'c', '2');
}
public String newString(int length, char charToFill, char lastChar) {
if (length > 0) {
char[] array = new char[length];
Arrays.fill(array, charToFill);
array[length - 1] = lastChar;
return new String(array);
}
return "";
}
@Benchmark
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public boolean EqualString() {
return str1.equals(str2);
}
}
```
The result is list as following:(Linux aarch64 with 128cores)
Benchmark | (size) | Mode | Cnt | Score | Error | Units
----------------------------------|-------|---------|-------|------------|------------|----------
StringEqual.EqualString | 8 | thrpt | 10 | 123971.994 | ± 1462.131 | ops/ms
StringEqual.EqualString | 64 | thrpt | 10 | 56009.960 | ± 999.734 | ops/ms
StringEqual.EqualString | 4096 | thrpt | 10 | 1943.852 | ± 8.159 | ops/ms
StringEqual.EqualStringWithNEON | 8 | thrpt | 10 | 120319.271 | ± 1392.185 | ops/ms
StringEqual.EqualStringWithNEON | 64 | thrpt | 10 | 72914.767 | ± 1814.173 | ops/ms
StringEqual.EqualStringWithNEON | 4096 | thrpt | 10 | 2579.155 | ± 15.589 | ops/ms
Yours,
WANG Huang
-------------
Commit messages:
- 8268229: Aarch64: Use Neon in intrinsics for String.equals
Changes: https://git.openjdk.java.net/jdk/pull/4423/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4423&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8268229
Stats: 28 lines in 2 files changed: 25 ins; 0 del; 3 mod
Patch: https://git.openjdk.java.net/jdk/pull/4423.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/4423/head:pull/4423
PR: https://git.openjdk.java.net/jdk/pull/4423
More information about the hotspot-dev
mailing list