RFR: 8322179: RISC-V: Implement SHA-1 intrinsic [v4]

Hamlin Li mli at openjdk.org
Thu Jan 11 10:29:24 UTC 2024


On Wed, 10 Jan 2024 09:14:05 GMT, Hamlin Li <mli at openjdk.org> wrote:

>> Hi,
>> Can you review this patch to implement SHA-1 intrinsic for riscv?
>> Thanks!
>> 
>> 
>> ## Test
>> 
>> ### Functionality
>> 
>> tests under `test/hotspot/jtreg/compiler/intrinsics/sha`
>> tests found via `find test/jdk -iname "*SHA1*.java"`
>> 
>> ### Performance
>> 
>> tested on `T-HEAD Light Lichee Pi 4A`
>> 
>> benchmark tests `MessageDigests.java GetMessageDigest.java MessageDigestBench.java MacBench.java` which are under `test/micro/org/openjdk/bench/`.
>> 
>> 
>> **perf data summary**
>> 
>> tests                                                           intrinsic (ns/op)       base (ns/op)    speed up (times) 
>> o.o.b.java.security.MessageDigests.digest (64)                  3454.207                12026.787       3.48    
>> o.o.b.java.security.MessageDigests.digest (16384)               184063.834              1307913.534     7.11    
>> o.o.b.java.security.MessageDigests.getAndDigest (64)            8260.011                17707.156       2.14    
>> o.o.b.java.security.MessageDigests.getAndDigest (16384)         191325.246              1379660.864     7.21    
>> o.o.b.javax.crypto.full.MacBench.mac (128)                      8220.886                34101.577       4.15    
>> o.o.b.javax.crypto.full.MacBench.mac (1024)                     18006.955               107906.128      5.99    
>> o.o.b.javax.crypto.small.MessageDigestBench.digest              11688843.558            82834313.280    7.09    
>> 
>> 
>> 
>> **raw perf data - when intrinsic is enabled**
>> 
>> o.o.b.java.security.GetMessageDigest.cloneInstance                    N/A         N/A           SHA-1       N/A         N/A  avgt   10        489.860 ?       6.277  ns/op
>> o.o.b.java.security.GetMessageDigest.getInstance                      N/A         N/A           SHA-1       N/A         N/A  avgt   10       3477.197 ?     204.203  ns/op
>> o.o.b.java.security.GetMessageDigest.getInstanceWithProvider          N/A         N/A           SHA-1       N/A         N/A  avgt   10       4111.164 ?     108.861  ns/op
>> o.o.b.java.security.MessageDigests.digest                             N/A         N/A           SHA-1        64     DEFAULT  avgt   10       3454.207 ?      53.924  ns/op
>> o.o.b.java.security.MessageDigests.digest                             N/A         N/A           SHA-1     16384     DEFAULT  avgt   10     184063.834 ?     677.635  ns/op
>> o.o.b.java.security.MessageDigests.getAndDigest                       N/A         N/A           SHA-1        64     DEFAULT  avgt   10       8260.011 ?    ...
>
> Hamlin Li has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - remove tp/gp
>  - refine code

The reason why there is some regression in getAndDigest when size == 64 is, 
1. for test MessageDigests.getAndDigest, it's actually j.s.MessageDigest.getInstance + j.s.MessageDigest.digest;
2. for j.s.MessageDigest.getInstance, we don't make any improvement, during the jmh test the performance jitter is kind of big, which I show below with dozens of runs.
3. for j.s.MessageDigest.digest, we made the improvement, but when the size == 64, the improvement is not big enough to fill the gap introduced by performance jitter introduced by j.s.MessageDigest.getInstance.
4. so, combine above together, the performance "regression" in getAndDigest when size == 64, should be performance jitter introduced by j.s.MessageDigest.getInstance, which I also show below with dozens of runs.

performance jitter of j.s.MessageDigest.getInstance


loop ... 1
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     674.589 ?   21.290  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     715.351 ?   16.302  ns/op
loop ... 2
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     744.618 ?   14.846  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     663.602 ?   15.462  ns/op
loop ... 3
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     695.022 ?   17.110  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     684.499 ?   17.883  ns/op
loop ... 4
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     680.238 ?   15.415  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     696.098 ?   13.663  ns/op
loop ... 5
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     676.999 ?   20.736  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     678.875 ?   14.123  ns/op
loop ... 6
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     680.661 ?   15.219  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     675.950 ?   16.287  ns/op
loop ... 7
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     666.744 ?   17.272  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     690.439 ?   17.091  ns/op
loop ... 8
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     684.327 ?   16.777  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     663.682 ?   16.646  ns/op
loop ... 9
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     688.047 ?   14.885  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     677.252 ?   17.249  ns/op
loop ... 10
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     684.169 ?   15.243  ns/op
GetMessageDigest.getInstance                       SHA-1       N/A         N/A  avgt   20     756.130 ?    6.580  ns/op

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

PR Comment: https://git.openjdk.org/jdk/pull/17130#issuecomment-1886805614
PR Comment: https://git.openjdk.org/jdk/pull/17130#issuecomment-1886807176


More information about the hotspot-dev mailing list