RFR: 8322174: RISC-V: C2 VectorizedHashCode RVV Version [v16]

Yuri Gaevsky duke at openjdk.org
Wed Aug 6 10:13:51 UTC 2025


On Tue, 5 Aug 2025 12:53:24 GMT, Yuri Gaevsky <duke at openjdk.org> wrote:

>> The patch adds possibility to use RVV instructions for faster vectorizedHashCode calculations on RVV v1.0.0 capable hardware.
>> 
>> Testing: hotspot/jtreg/compiler/ under QEMU-8.1 with RVV v1.0.0.
>
> Yuri Gaevsky has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 17 commits:
> 
>  - Merge master
>  - replaced vmul_vv + vadd_vv by vmadd_vv
>  - returned lmul==m4
>  - fixed error made for prevoius lmul-m1 experiment
>  - make an experiment with lmul==1 instead of lmul==4.
>  - move vredsum_vs out of VEC_LOOP to improve performance
>  - - removed tail processing with RVV instructions as simple scalar loop provides in general better results
>  - simplified arrays_hashcode_v() to be closer to VLA and use less general-purpose registers; minor cosmetic changes
>  - change slli+add sequence to shadd
>  - reorder instructions to make RVV instructions contiguous
>  - ... and 7 more: https://git.openjdk.org/jdk/compare/ba0ae4cb...e7fac6c7

`bbcd1ec`:

--- -XX:DisableIntrinsic=_vectorizedHashCode ---
Benchmark            (size)  Mode  Cnt      Score    Error  Units
ArraysHashCode.ints       1  avgt   30     11.293 ±  0.019  ns/op
ArraysHashCode.ints       5  avgt   30     28.861 ±  0.052  ns/op
ArraysHashCode.ints      10  avgt   30     41.105 ±  0.170  ns/op
ArraysHashCode.ints      20  avgt   30     68.275 ±  0.028  ns/op
ArraysHashCode.ints      30  avgt   30     89.379 ±  0.659  ns/op
ArraysHashCode.ints      40  avgt   30    115.111 ±  0.157  ns/op
ArraysHashCode.ints      50  avgt   30    136.252 ±  0.522  ns/op
ArraysHashCode.ints      60  avgt   30    161.913 ±  0.276  ns/op
ArraysHashCode.ints      70  avgt   30    170.858 ±  0.367  ns/op
ArraysHashCode.ints      80  avgt   30    195.566 ±  0.288  ns/op
ArraysHashCode.ints      90  avgt   30    208.160 ±  0.527  ns/op
ArraysHashCode.ints     100  avgt   30    232.718 ±  0.688  ns/op
ArraysHashCode.ints     200  avgt   30    448.118 ±  1.079  ns/op
ArraysHashCode.ints     300  avgt   30    656.164 ±  0.647  ns/op
ArraysHashCode.ints    1000  avgt   30   2139.643 ±  0.729  ns/op
ArraysHashCode.ints   10000  avgt   30  23584.704 ± 40.276  ns/op
--- -XX:-UseRVV ---
Benchmark            (size)  Mode  Cnt      Score     Error  Units
ArraysHashCode.ints       1  avgt   30     11.282 ±   0.010  ns/op
ArraysHashCode.ints       5  avgt   30     23.216 ±   0.042  ns/op
ArraysHashCode.ints      10  avgt   30     33.251 ±   0.055  ns/op
ArraysHashCode.ints      20  avgt   30     50.740 ±   0.010  ns/op
ArraysHashCode.ints      30  avgt   30     70.871 ±   0.100  ns/op
ArraysHashCode.ints      40  avgt   30     88.330 ±   0.026  ns/op
ArraysHashCode.ints      50  avgt   30    108.937 ±   0.097  ns/op
ArraysHashCode.ints      60  avgt   30    125.877 ±   0.024  ns/op
ArraysHashCode.ints      70  avgt   30    146.213 ±   0.166  ns/op
ArraysHashCode.ints      80  avgt   30    163.545 ±   0.072  ns/op
ArraysHashCode.ints      90  avgt   30    183.957 ±   0.371  ns/op
ArraysHashCode.ints     100  avgt   30    201.147 ±   0.322  ns/op
ArraysHashCode.ints     200  avgt   30    389.061 ±   0.168  ns/op
ArraysHashCode.ints     300  avgt   30    576.751 ±   0.091  ns/op
ArraysHashCode.ints    1000  avgt   30   1994.798 ± 116.508  ns/op
ArraysHashCode.ints   10000  avgt   30  20482.232 ±  40.742  ns/op
--- -XX:+UseRVV ---
Benchmark            (size)  Mode  Cnt     Score    Error  Units
ArraysHashCode.ints       1  avgt   30    11.291 ±  0.019  ns/op
ArraysHashCode.ints       5  avgt   30    23.245 ±  0.104  ns/op
ArraysHashCode.ints      10  avgt   30    38.872 ±  0.061  ns/op
ArraysHashCode.ints      20  avgt   30    70.267 ±  0.127  ns/op
ArraysHashCode.ints      30  avgt   30   102.054 ±  0.478  ns/op
ArraysHashCode.ints      40  avgt   30    71.729 ±  0.890  ns/op
ArraysHashCode.ints      50  avgt   30   105.017 ±  0.726  ns/op
ArraysHashCode.ints      60  avgt   30   136.776 ±  0.407  ns/op
ArraysHashCode.ints      70  avgt   30    77.465 ±  0.204  ns/op
ArraysHashCode.ints      80  avgt   30   106.172 ±  1.303  ns/op
ArraysHashCode.ints      90  avgt   30   137.791 ±  1.098  ns/op
ArraysHashCode.ints     100  avgt   30    74.734 ±  0.115  ns/op
ArraysHashCode.ints     200  avgt   30   116.477 ±  0.015  ns/op
ArraysHashCode.ints     300  avgt   30   161.045 ±  1.155  ns/op
ArraysHashCode.ints    1000  avgt   30   336.027 ±  0.953  ns/op
ArraysHashCode.ints   10000  avgt   30  5427.369 ± 37.820  ns/op

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

PR Comment: https://git.openjdk.org/jdk/pull/17413#issuecomment-3159077967


More information about the hotspot-compiler-dev mailing list