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

Hamlin Li mli at openjdk.org
Thu Jan 11 10:34:25 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

performance jitter of MessageDigests.getAndDigest (when size == 64) introduced by j.s.MessageDigest.getInstance


loop ... 1
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2521.461 ?   16.450  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2428.247 ?   10.967  ns/op
loop ... 2
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2436.408 ?   32.545  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2424.811 ?   11.521  ns/op
loop ... 3
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2484.609 ?    9.321  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2462.019 ?   16.622  ns/op
loop ... 4
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2550.315 ?   32.915  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2459.512 ?   95.334  ns/op
loop ... 5
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2852.858 ?   45.638  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2472.366 ?   87.208  ns/op
loop ... 6
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2580.812 ?   41.330  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2452.006 ?   86.735  ns/op
loop ... 7
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2427.592 ?   44.410  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2437.358 ?   92.754  ns/op
loop ... 8
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2438.203 ?   20.321  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2633.727 ?   72.077  ns/op
loop ... 9
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2424.485 ?   24.730  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2464.582 ?   14.058  ns/op
loop ... 10
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2408.087 ?   34.954  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2464.284 ?   65.394  ns/op



loop ... 1
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2452.427 ?   12.069  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2451.976 ?    6.551  ns/op
loop ... 2
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2428.869 ?    8.818  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2520.389 ?    8.184  ns/op
loop ... 3
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2511.975 ?   16.673  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2509.494 ?   21.087  ns/op
loop ... 4
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2483.784 ?   16.029  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2512.870 ?    9.201  ns/op
loop ... 5
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2441.026 ?    9.222  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2431.875 ?    9.295  ns/op
loop ... 6
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2402.302 ?    9.737  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2474.198 ?    6.352  ns/op
loop ... 7
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2484.982 ?   13.996  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2444.898 ?   14.270  ns/op
loop ... 8
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2565.433 ?   10.722  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2469.290 ?   32.165  ns/op
loop ... 9
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2527.289 ?   18.710  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2480.432 ?    9.804  ns/op
loop ... 10
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2474.362 ?   23.856  ns/op
MessageDigests.getAndDigest                        SHA-1        64     DEFAULT  avgt   20    2433.547 ?   30.935  ns/op

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

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


More information about the hotspot-dev mailing list