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

Fei Yang fyang at openjdk.org
Tue Jan 16 07:14:19 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`
>> 
>> JMH_PARAMS="-f 1 -wi 10 -i 20" // for every loop of jmh test
>> 
>> benchmark tests `MessageDigests.java GetMessageDigest.java MessageDigestBench.java MacBench.java` which are under `test/micro/org/openjdk/bench/`, more spcifically `TESTS="MessageDigests.digest MessageDigests.getAndDigest MessageDigestBench.digest"`
>> 
>> 
>> // After
>> o.o.b.java.security.MessageDigests.digest                   N/A         N/A           SHA-1        64     DEFAULT  avgt   20      1845.446 ?     27.052  ns/op
>> o.o.b.java.security.MessageDigests.digest                   N/A         N/A           SHA-1     16384     DEFAULT  avgt   20    181455.350 ?    532.258  ns/op
>> o.o.b.java.security.MessageDigests.getAndDigest             N/A         N/A           SHA-1        64     DEFAULT  avgt   20      2447.674 ?     10.239  ns/op
>> o.o.b.java.security.MessageDigests.getAndDigest             N/A         N/A           SHA-1     16384     DEFAULT  avgt   20    182896.083 ?   1242.774  ns/op
>> o.o.b.javax.crypto.small.MessageDigestBench.digest         SHA1     1048576             N/A       N/A              avgt   20  11599227.792 ? 121442.390  ns/op
>> // Before
>> o.o.b.java.security.MessageDigests.digest                   N/A         N/A           SHA-1        64     DEFAULT  avgt   20      2352.475 ?    11.198  ns/op
>> o.o.b.java.security.MessageDigests.digest                   N/A         N/A           SHA-1     16384     DEFAULT  avgt   20    188495.684 ?  1467.942  ns/op
>> o.o.b.java.security.MessageDigests.getAndDigest             N/A         N/A           SHA-1        64     DEFAULT  avgt   20      2437.347 ?     6.398  ns/op
>> o.o.b.java.security.MessageDigests.getAndDigest             N/A         N/A           SHA-1     16384     DEFAULT  avgt   20    196086.570 ?  1140.998  ns/op
>> o.o.b.javax.crypto.small.MessageDigestBench.digest         SHA1     1048576             N/A       N/A              avgt   20  12362160.119 ? 38788.109  ns/op
>> 
>> 
>> **getAndDigest when size == 64**
>> The data is not stable for test getAndDigest when size == 64, which I think is introduced by  j.s.MessageDigest.getInstance itself, which we don't touch in this patch.
>> Check more details at [1](ht...
>
> Hamlin Li has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - remove tp/gp
>  - refine code

FYI: The performance numbers seems more stable on other platforms like Unmatched board (JMH AverageTime mode):


Before:
MessageDigests.digest                 SHA-1        64     DEFAULT  avgt   15     3974.419 ?    28.954  ns/op
MessageDigests.digest                 SHA-1     16384     DEFAULT  avgt   15   411073.165 ?  3731.988  ns/op
MessageDigests.getAndDigest           SHA-1        64     DEFAULT  avgt   15     7136.679 ?   480.850  ns/op
MessageDigests.getAndDigest           SHA-1     16384     DEFAULT  avgt   15   429881.929 ?  1265.110  ns/op

MessageDigests.digest                 SHA-1        64     DEFAULT  avgt   15     3993.060 ?     6.265  ns/op
MessageDigests.digest                 SHA-1     16384     DEFAULT  avgt   15   410724.751 ?  2075.018  ns/op
MessageDigests.getAndDigest           SHA-1        64     DEFAULT  avgt   15     7085.596 ?   496.358  ns/op
MessageDigests.getAndDigest           SHA-1     16384     DEFAULT  avgt   15   430184.356 ?  1052.236  ns/op

MessageDigests.digest                 SHA-1        64     DEFAULT  avgt   15     4016.232 ?    48.074  ns/op
MessageDigests.digest                 SHA-1     16384     DEFAULT  avgt   15   417735.231 ?  7001.640  ns/op
MessageDigests.getAndDigest           SHA-1        64     DEFAULT  avgt   15     7114.528 ?   504.775  ns/op
MessageDigests.getAndDigest           SHA-1     16384     DEFAULT  avgt   15   438041.321 ? 20056.313  ns/op

After:
MessageDigests.digest                 SHA-1        64     DEFAULT  avgt   15     3685.514 ?     5.401  ns/op
MessageDigests.digest                 SHA-1     16384     DEFAULT  avgt   15   364406.355 ?   217.797  ns/op
MessageDigests.getAndDigest           SHA-1        64     DEFAULT  avgt   15     5427.864 ?    41.520  ns/op
MessageDigests.getAndDigest           SHA-1     16384     DEFAULT  avgt   15   367995.806 ?   228.853  ns/op

MessageDigests.digest                 SHA-1        64     DEFAULT  avgt   15     3681.851 ?     6.591  ns/op
MessageDigests.digest                 SHA-1     16384     DEFAULT  avgt   15   364433.610 ?   226.146  ns/op
MessageDigests.getAndDigest           SHA-1        64     DEFAULT  avgt   15     5483.575 ?    46.445  ns/op
MessageDigests.getAndDigest           SHA-1     16384     DEFAULT  avgt   15   367713.143 ?   348.944  ns/op

MessageDigests.digest                 SHA-1        64     DEFAULT  avgt   15     3686.556 ?     6.273  ns/op
MessageDigests.digest                 SHA-1     16384     DEFAULT  avgt   15   364631.822 ?  1265.576  ns/op
MessageDigests.getAndDigest           SHA-1        64     DEFAULT  avgt   15     5496.395 ?    66.473  ns/op
MessageDigests.getAndDigest           SHA-1     16384     DEFAULT  avgt   15   367870.983 ?   296.836  ns/op

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

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


More information about the hotspot-dev mailing list