RFR: 8362596: RISC-V: Improve _vectorizedHashCode intrinsic

Yuri Gaevsky duke at openjdk.org
Mon Jul 21 08:13:25 UTC 2025


On Mon, 21 Jul 2025 08:07:48 GMT, Yuri Gaevsky <duke at openjdk.org> wrote:

> This is a micro-optimization for RISC-V SpacemiT K1 CPU to fix [encountered performance regression](https://github.com/openjdk/jdk/pull/17413#issuecomment-3082664335).

bpif3-16g% for i in "-XX:DisableIntrinsic=_vectorizedHashCode" "-XX:-UseRVV" "-XX:+UseRVV" ; \
    do ( echo "--- ${i} ---" && ${JAVA_HOME}/bin/java  -jar benchmarks.jar  \
	--jvmArgs="-XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions ${i}" \
	org.openjdk.bench.java.lang.ArraysHashCode.ints  \
	-p size=1,5,10,20,30,40,50,60,70,80,90,100,200,300 \
	-f 3 -r 1 -w 1 -wi 5 -i 10 2>&1 | tail -15 ) done
--- -XX:DisableIntrinsic=_vectorizedHashCode ---
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   11.280 ± 0.004  ns/op
ArraysHashCode.ints       5  avgt   30   28.831 ± 0.032  ns/op
ArraysHashCode.ints      10  avgt   30   41.179 ± 0.220  ns/op
ArraysHashCode.ints      20  avgt   30   68.178 ± 0.142  ns/op
ArraysHashCode.ints      30  avgt   30   88.911 ± 0.385  ns/op
ArraysHashCode.ints      40  avgt   30  115.043 ± 0.186  ns/op
ArraysHashCode.ints      50  avgt   30  135.755 ± 0.607  ns/op
ArraysHashCode.ints      60  avgt   30  161.924 ± 0.187  ns/op
ArraysHashCode.ints      70  avgt   30  170.367 ± 0.413  ns/op
ArraysHashCode.ints      80  avgt   30  193.985 ± 0.707  ns/op
ArraysHashCode.ints      90  avgt   30  207.633 ± 0.147  ns/op
ArraysHashCode.ints     100  avgt   30  232.362 ± 0.259  ns/op
ArraysHashCode.ints     200  avgt   30  447.390 ± 0.677  ns/op
ArraysHashCode.ints     300  avgt   30  656.324 ± 1.100  ns/op
--- -XX:-UseRVV ---
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   11.291 ± 0.017  ns/op
ArraysHashCode.ints       5  avgt   30   23.176 ± 0.011  ns/op
ArraysHashCode.ints      10  avgt   30   33.264 ± 0.073  ns/op
ArraysHashCode.ints      20  avgt   30   50.726 ± 0.006  ns/op
ArraysHashCode.ints      30  avgt   30   70.990 ± 0.184  ns/op
ArraysHashCode.ints      40  avgt   30   88.368 ± 0.050  ns/op
ArraysHashCode.ints      50  avgt   30  108.582 ± 0.175  ns/op
ArraysHashCode.ints      60  avgt   30  126.084 ± 0.202  ns/op
ArraysHashCode.ints      70  avgt   30  146.201 ± 0.169  ns/op
ArraysHashCode.ints      80  avgt   30  163.469 ± 0.033  ns/op
ArraysHashCode.ints      90  avgt   30  183.653 ± 0.182  ns/op
ArraysHashCode.ints     100  avgt   30  201.063 ± 0.156  ns/op
ArraysHashCode.ints     200  avgt   30  389.657 ± 0.752  ns/op
ArraysHashCode.ints     300  avgt   30  577.283 ± 0.434  ns/op
--- -XX:+UseRVV ---
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   11.273 ± 0.001  ns/op
ArraysHashCode.ints       5  avgt   30   23.184 ± 0.010  ns/op
ArraysHashCode.ints      10  avgt   30   33.262 ± 0.086  ns/op
ArraysHashCode.ints      20  avgt   30   50.811 ± 0.078  ns/op
ArraysHashCode.ints      30  avgt   30   71.019 ± 0.164  ns/op
ArraysHashCode.ints      40  avgt   30   88.331 ± 0.096  ns/op
ArraysHashCode.ints      50  avgt   30  108.852 ± 0.212  ns/op
ArraysHashCode.ints      60  avgt   30  125.948 ± 0.039  ns/op
ArraysHashCode.ints      70  avgt   30  146.518 ± 0.345  ns/op
ArraysHashCode.ints      80  avgt   30  163.464 ± 0.029  ns/op
ArraysHashCode.ints      90  avgt   30  183.722 ± 0.237  ns/op
ArraysHashCode.ints     100  avgt   30  201.307 ± 0.346  ns/op
ArraysHashCode.ints     200  avgt   30  389.048 ± 0.322  ns/op
ArraysHashCode.ints     300  avgt   30  576.821 ± 0.130  ns/op

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

PR Comment: https://git.openjdk.org/jdk/pull/26409#issuecomment-3095669754


More information about the hotspot-compiler-dev mailing list