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