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