[jdk25u] RFR: 8362596: RISC-V: Improve _vectorizedHashCode intrinsic

Dingli Zhang dzhang at openjdk.org
Mon Jul 28 00:58:11 UTC 2025


On Mon, 28 Jul 2025 00:53:19 GMT, Dingli Zhang <dzhang at openjdk.org> wrote:

> Hi all,
> 
> This pull request contains a backport of commit [4189fcba](https://github.com/openjdk/jdk/commit/4189fcbac40943f3b26c3a01938837b4e4762285) from the [openjdk/jdk](https://git.openjdk.org/jdk) repository.
> 
> The commit being backported was authored by Yuri Gaevsky on 27 Jul 2025 and was reviewed by Fei Yang and Feilong Jiang.
> 
> Thanks!

Test on k1:

$ 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


Before this patch:

--- -XX:DisableIntrinsic=_vectorizedHashCode ---    
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   11.278 ± 0.004  ns/op
ArraysHashCode.ints       5  avgt   30   28.923 ± 0.295  ns/op
ArraysHashCode.ints      10  avgt   30   41.271 ± 0.418  ns/op
ArraysHashCode.ints      20  avgt   30   68.275 ± 0.018  ns/op
ArraysHashCode.ints      30  avgt   30   88.004 ± 0.176  ns/op
ArraysHashCode.ints      40  avgt   30  115.206 ± 0.117  ns/op
ArraysHashCode.ints      50  avgt   30  135.322 ± 0.080  ns/op
ArraysHashCode.ints      60  avgt   30  161.843 ± 0.345  ns/op
ArraysHashCode.ints      70  avgt   30  170.085 ± 0.471  ns/op
ArraysHashCode.ints      80  avgt   30  193.860 ± 0.407  ns/op
ArraysHashCode.ints      90  avgt   30  208.385 ± 0.433  ns/op
ArraysHashCode.ints     100  avgt   30  232.398 ± 0.232  ns/op
ArraysHashCode.ints     200  avgt   30  448.131 ± 0.497  ns/op
ArraysHashCode.ints     300  avgt   30  654.970 ± 0.697  ns/op
--- -XX:-UseRVV ---
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   11.276 ± 0.003  ns/op
ArraysHashCode.ints       5  avgt   30   24.449 ± 0.024  ns/op
ArraysHashCode.ints      10  avgt   30   35.710 ± 0.017  ns/op
ArraysHashCode.ints      20  avgt   30   58.887 ± 0.017  ns/op
ArraysHashCode.ints      30  avgt   30   82.695 ± 0.028  ns/op
ArraysHashCode.ints      40  avgt   30  105.880 ± 0.028  ns/op
ArraysHashCode.ints      50  avgt   30  129.733 ± 0.153  ns/op
ArraysHashCode.ints      60  avgt   30  152.854 ± 0.062  ns/op
ArraysHashCode.ints      70  avgt   30  176.661 ± 0.073  ns/op
ArraysHashCode.ints      80  avgt   30  199.873 ± 0.231  ns/op
ArraysHashCode.ints      90  avgt   30  223.657 ± 0.101  ns/op
ArraysHashCode.ints     100  avgt   30  246.876 ± 0.113  ns/op
ArraysHashCode.ints     200  avgt   30  481.766 ± 0.175  ns/op
ArraysHashCode.ints     300  avgt   30  717.091 ± 0.616  ns/op
--- -XX:+UseRVV ---
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   11.276 ± 0.002  ns/op
ArraysHashCode.ints       5  avgt   30   24.436 ± 0.013  ns/op
ArraysHashCode.ints      10  avgt   30   35.710 ± 0.011  ns/op
ArraysHashCode.ints      20  avgt   30   58.882 ± 0.022  ns/op
ArraysHashCode.ints      30  avgt   30   82.703 ± 0.035  ns/op
ArraysHashCode.ints      40  avgt   30  105.883 ± 0.058  ns/op
ArraysHashCode.ints      50  avgt   30  129.681 ± 0.050  ns/op
ArraysHashCode.ints      60  avgt   30  152.911 ± 0.088  ns/op
ArraysHashCode.ints      70  avgt   30  176.678 ± 0.074  ns/op
ArraysHashCode.ints      80  avgt   30  199.898 ± 0.229  ns/op
ArraysHashCode.ints      90  avgt   30  223.674 ± 0.092  ns/op
ArraysHashCode.ints     100  avgt   30  246.850 ± 0.040  ns/op
ArraysHashCode.ints     200  avgt   30  481.790 ± 0.162  ns/op
ArraysHashCode.ints     300  avgt   30  716.580 ± 0.237  ns/op


After this patch:

--- -XX:DisableIntrinsic=_vectorizedHashCode ---                       
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   10.650 ± 0.004  ns/op
ArraysHashCode.ints       5  avgt   30   29.543 ± 0.354  ns/op
ArraysHashCode.ints      10  avgt   30   41.614 ± 0.208  ns/op
ArraysHashCode.ints      20  avgt   30   68.263 ± 0.042  ns/op
ArraysHashCode.ints      30  avgt   30   88.748 ± 0.141  ns/op
ArraysHashCode.ints      40  avgt   30  115.109 ± 0.180  ns/op
ArraysHashCode.ints      50  avgt   30  136.116 ± 0.522  ns/op
ArraysHashCode.ints      60  avgt   30  162.157 ± 0.167  ns/op
ArraysHashCode.ints      70  avgt   30  171.946 ± 0.215  ns/op
ArraysHashCode.ints      60  avgt   30  162.157 ± 0.167  ns/op
ArraysHashCode.ints      70  avgt   30  171.946 ± 0.215  ns/op
ArraysHashCode.ints      80  avgt   30  195.261 ± 0.173  ns/op
ArraysHashCode.ints      90  avgt   30  208.916 ± 0.377  ns/op
ArraysHashCode.ints     100  avgt   30  233.241 ± 0.216  ns/op
ArraysHashCode.ints     200  avgt   30  448.779 ± 0.196  ns/op
ArraysHashCode.ints     300  avgt   30  655.929 ± 0.519  ns/op
--- -XX:-UseRVV ---
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   10.649 ± 0.004  ns/op
ArraysHashCode.ints       5  avgt   30   22.556 ± 0.012  ns/op
ArraysHashCode.ints      10  avgt   30   31.952 ± 0.011  ns/op
ArraysHashCode.ints      20  avgt   30   50.120 ± 0.018  ns/op
ArraysHashCode.ints      30  avgt   30   69.602 ± 0.182  ns/op
ArraysHashCode.ints      40  avgt   30   87.694 ± 0.018  ns/op
ArraysHashCode.ints      50  avgt   30  107.130 ± 0.026  ns/op
ArraysHashCode.ints      60  avgt   30  125.349 ± 0.169  ns/op
ArraysHashCode.ints      70  avgt   30  144.814 ± 0.096  ns/op
ArraysHashCode.ints      80  avgt   30  163.463 ± 2.065  ns/op
ArraysHashCode.ints      90  avgt   30  182.362 ± 0.077  ns/op
ArraysHashCode.ints     100  avgt   30  200.452 ± 0.051  ns/op
ArraysHashCode.ints     200  avgt   30  388.406 ± 0.132  ns/op
ArraysHashCode.ints     300  avgt   30  576.520 ± 0.347  ns/op
--- -XX:+UseRVV ---
Benchmark            (size)  Mode  Cnt    Score   Error  Units
ArraysHashCode.ints       1  avgt   30   10.650 ± 0.004  ns/op
ArraysHashCode.ints       5  avgt   30   22.551 ± 0.007  ns/op
ArraysHashCode.ints      10  avgt   30   31.949 ± 0.005  ns/op
ArraysHashCode.ints      20  avgt   30   50.177 ± 0.173  ns/op
ArraysHashCode.ints      30  avgt   30   69.532 ± 0.025  ns/op
ArraysHashCode.ints      40  avgt   30   87.691 ± 0.026  ns/op
ArraysHashCode.ints      50  avgt   30  107.121 ± 0.041  ns/op
ArraysHashCode.ints      60  avgt   30  125.280 ± 0.054  ns/op
ArraysHashCode.ints      70  avgt   30  144.714 ± 0.036  ns/op
ArraysHashCode.ints      80  avgt   30  162.882 ± 0.048  ns/op
ArraysHashCode.ints      90  avgt   30  182.339 ± 0.076  ns/op
ArraysHashCode.ints     100  avgt   30  200.487 ± 0.087  ns/op
ArraysHashCode.ints     200  avgt   30  388.452 ± 0.177  ns/op
ArraysHashCode.ints     300  avgt   30  576.325 ± 0.177  ns/op

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

PR Comment: https://git.openjdk.org/jdk25u/pull/42#issuecomment-3124869057


More information about the jdk-updates-dev mailing list