RFR: 8331558: AArch64: optimize integer remainder [v3]

Andrew Haley aph at openjdk.org
Wed May 8 09:24:53 UTC 2024


On Wed, 8 May 2024 01:04:37 GMT, Jin Guojie <duke at openjdk.org> wrote:

>> 8331558: AArch64: optimize integer remainder
>>     On some Arm processors, a separate multiply/subtract is actually faster than the combined instruction.
>> 
>> 8331556: AArch64: CPU_Model support for Neoverse N1/N2/V1/V2
>>     Add full platform coverage for Neoverse variants in vm_version.?pp
>> 
>> The following test has passed, which shows definite performance improvement.
>> 
>> make test TEST="micro:java.lang.IntegerDivMod"
>> make test TEST="micro:java.lang.LongDivMod"
>> 
>> * IntegerDivMod.testDivideRemainderUnsigned
>> baseline(ns/ops)                2223
>> with this pacth(ns/ops)         1885    
>> improvement(%)                  17.93%
>> 
>> * IntegerDivMod.testRemainderUnsigned
>> baseline(ns/ops)                2225
>> with this pacth(ns/ops)         1885    
>> improvement(%)                  18.03%
>> 
>> * LongDivMod.testDivideRemainderUnsigned
>> baseline(ns/ops)                2231
>> with this pacth(ns/ops)         1894    
>> improvement(%)                  17.79%
>> 
>> * LongDivMod.testRemainderUnsigned
>> baseline(ns/ops)                2232
>> with this pacth(ns/ops)         1891
>> improvement(%)                  18.03%
>
> Jin Guojie has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Applicable platforms expanded to the entire neoverse family
>   
>   Even on the V series (V1 and V2), both sdiv/udiv and msub instructions are executed in M0 unit (Integer multi cycle). It should benefit the V series as well.

src/hotspot/cpu/aarch64/vm_version_aarch64.hpp line 169:

> 167:     return _cpu == CPU_ARM
> 168:           && (model_is(CPU_MODEL_NEOVERSE_N1) || model_is(CPU_MODEL_NEOVERSE_N2) ||
> 169:               model_is(CPU_MODEL_NEOVERSE_V1) || model_is(CPU_MODEL_NEOVERSE_V2));

What is this, programming made difficult?
Suggestion:

  switch(_cpu) {
    case CPU_MODEL_NEOVERSE_N1:
    case CPU_MODEL_NEOVERSE_N2:
    case CPU_MODEL_NEOVERSE_V1:
    case CPU_MODEL_NEOVERSE_V2:  return true;
    default:  return false;
  }

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

PR Review Comment: https://git.openjdk.org/jdk/pull/19093#discussion_r1593718631


More information about the hotspot-dev mailing list