On Sat, 31 Oct 2026 10:59:41 GMT, April Ivy <[email protected]> wrote:

>> Larry has updated the pull request incrementally with one additional commit 
>> since the last revision:
>> 
>>   8394260: Address Adler32 AVX2 review comments
>>   
>>   Use an unsigned 32-bit type for the division magic constant and update the 
>> LIMIT overflow comment to refer to the unsigned 32-bit range.
>>   
>>   Add an AVX2-specific jtreg run using all-0xFF input around LIMIT.
>
> src/hotspot/cpu/x86/stubGenerator_x86_64_adler.cpp line 167:
> 
>> 165:   if (VM_Version::supports_avx512vl()) {
>> 166:     // AVX2 performs better for smaller inputs because of leaner post 
>> loop reduction sequence..
>> 167:     __ cmpl(s, MAX2(128, CopyAVX3Threshold));
> 
> `CopyAVX3Threshold` is 0 by default on Zen 5 and Intel server parts with 
> `serialize`, so chunks over 128 bytes still take the AVX-512 loop. On a 
> 9950X3D2, 256 to 65536 bytes are within 1.3% of baseline with default flags, 
> and 40 to 88% faster with `-XX:CopyAVX3Threshold=8192`. What do you get on 
> Granite Rapids with default flags?

Here are the results on Intel Xeon 6980P (Granite Rapids) 
#### with default flags:
  Size | Baseline | Patched | Delta
  -- | -- | -- | --
  1 | 104325.5 | 167061.5 | +60.1%
  2 | 101708.2 | 159783.6 | +57.1%
  4 | 94652.5 | 145264.7 | +53.5%
  8 | 84135.6 | 122935.7 | +46.1%
  15 | 69287.3 | 91524.2 | +32.1%
  16 | 66872.3 | 161635.9 | +141.7%
  24 | 56290.3 | 111302.9 | +97.7%
  31 | 50366.9 | 84498.7 | +67.8%
  32 | 54083.1 | 71421.1 | +32.1%
  64 | 50034.2 | 70733.0 | +41.4%
  256 | 33063.5 | 32400.1 | -2.0%
  1024 | 15952.0 | 15967.3 | +0.1%
  4096 | 4674.7 | 4669.7 | -0.1%
  8192 | 2408.7 | 2469.6 | +2.5%
  65536 | 317.1 | 335.5 | +5.8%

#### CopyAVX3Threshold=8192
  
  Size | Baseline | Patched | Delta
  -- | -- | -- | --
  256 | 30065.5 | 59974.6 | +99.5%
  1024 | 14347.0 | 33659.3 | +134.6%
  4096 | 4473.0 | 10687.9 | +138.9%
  5552 | 3378.4 | 8130.8 | +140.7%
  8192 | 2268.1 | 5496.8 | +142.4%
  65536 | 291.5 | 565.4 | +94.0%

This patch is scoped to improving the AVX2 implementation, so I think the 
Adler32 AVX2/AVX-512 dispatch should be handled in a separate issue. Would you 
be willing to help create a follow-up JBS issue for this dispatch question? I 
will track it and work on the follow-up.  
Alternatively, if you prefer, I can address it in this issue.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/33338#discussion_r4440818348

Reply via email to