RFR: 8318225: RISC-V: C2 UModI

Hamlin Li mli at openjdk.org
Sat Oct 28 09:15:39 UTC 2023


On Sat, 28 Oct 2023 07:55:36 GMT, Fei Yang <fyang at openjdk.org> wrote:

>> Hi,
>> Can you review the change to add intrinsic for UModI and UModL?
>> ( This is a quite similar patch to https://github.com/openjdk/jdk/pull/16346, which addresses UDivI and UDivL, so for the performance consideration please also check the discussion in that pr. )
>> Thanks!
>> 
>> 
>> ## Tests
>> 
>> ### Functionality
>> Run tests successfully found via `grep -nr test/jdk/ -we remainderUnsigned` and `grep -nr test/hotspot/ -we remainderUnsigned` 
>> 
>> ### Performance
>> 
>> #### Long
>> **NOTE: for positive divisor, it's the common case; for negative divisor, it's a rare case**
>> 
>> **Before**
>> 
>> LongDivMod.testRemainderUnsigned                 1024          mixed  avgt   10  21222.911 ± 57.735  ns/op
>> LongDivMod.testRemainderUnsigned                 1024       positive  avgt   10  28841.429 ±  6.294  ns/op
>> LongDivMod.testRemainderUnsigned                 1024       negative  avgt   10   7733.038 ±  3.856  ns/op
>> 
>> 
>> **After**
>> 
>> LongDivMod.testRemainderUnsigned                 1024          mixed  avgt   10  22666.448 ± 34.986  ns/op
>> LongDivMod.testRemainderUnsigned                 1024       positive  avgt   10  15967.846 ± 24.805  ns/op
>> LongDivMod.testRemainderUnsigned                 1024       negative  avgt   10  29507.865 ± 20.593  ns/op
>> 
>> 
>> #### Integer
>> **Before**
>> 
>> IntegerDivMod.testRemainderUnsigned                 1024          mixed  avgt   10  23396.475 ± 24.065  ns/op
>> IntegerDivMod.testRemainderUnsigned                 1024       positive  avgt   10  16796.796 ±  3.389  ns/op
>> IntegerDivMod.testRemainderUnsigned                 1024       negative  avgt   10  30159.407 ±  6.716  ns/op
>> 
>> 
>> **After**
>> 
>> IntegerDivMod.testRemainderUnsigned                 1024          mixed  avgt   10  23216.710 ± 14.351  ns/op
>> IntegerDivMod.testRemainderUnsigned                 1024       positive  avgt   10  16621.374 ±  3.203  ns/op
>> IntegerDivMod.testRemainderUnsigned                 1024       negative  avgt   10  30002.088 ± 41.212  ns/op
>
> And JMH result on hifive unmatched board for reference:
> Before:
> 
> LongDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  26377.726 ?  535.884  ns/op
> LongDivMod.testRemainderUnsigned                 1024       positive  avgt   15  36251.980 ?   23.214  ns/op
> LongDivMod.testRemainderUnsigned                 1024       negative  avgt   15   8441.098 ?    9.375  ns/op
> IntegerDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  28501.570 ?  14.628  ns/op
> IntegerDivMod.testRemainderUnsigned                 1024       positive  avgt   15  20226.145 ?  19.112  ns/op
> IntegerDivMod.testRemainderUnsigned                 1024       negative  avgt   15  37002.906 ?  34.361  ns/op
> 
> After:
> 
> LongDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  27140.089 ? 17.391  ns/op
> LongDivMod.testRemainderUnsigned                 1024       positive  avgt   15  18772.742 ? 18.943  ns/op
> LongDivMod.testRemainderUnsigned                 1024       negative  avgt   15  35780.310 ? 28.929  ns/op
> IntegerDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  27864.893 ? 15.551  ns/op
> IntegerDivMod.testRemainderUnsigned                 1024       positive  avgt   15  19585.612 ? 17.651  ns/op
> IntegerDivMod.testRemainderUnsigned                 1024       negative  avgt   15  36366.167 ? 18.933  ns/op

@RealFYang Thanks for testing!

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

PR Comment: https://git.openjdk.org/jdk/pull/16394#issuecomment-1783755834


More information about the hotspot-dev mailing list