RFR: 8349452: Fix performance regression for Arrays.fill() with AVX512

Srinivas Vamsi Parasa sparasa at openjdk.org
Thu Nov 20 23:56:16 UTC 2025


The goal of this PR is to fix the performance regression in Arrays.fill() x86 stubs caused by masked AVX stores. The fix is to replace the masked AVX stores with store instructions without masks (i.e. unmasked stores). `fill32_masked()` and `fill64_masked()` stubs are replaced with `fill32_unmasked()` and `fill64_unmasked()` respectively.

To speedup unmasked stores, array fills for sizes < 64 bytes are broken down into sequences of 32B, 16B, 8B, 4B, 2B and 1B stores, depending on the size.


### **Performance comparison for byte array fills in a loop for 1 million times**
<body lang=en-US style='font-family:Calibri;font-size:10.0pt'>

<div style='direction:ltr'>


UseAVX=3   ByteArray Size | +OptimizeFill    (Masked store   stub)   [secs] | -OptimizeFill   (No stub)   [secs] | --->This PR: +OptimizeFill   (Unmasked store   stub)   [secs]
-- | -- | -- | --
1 | 0.46 | 0.14 | 0.263
2 | 0.46 | 0.16 | 0.264
5 | 0.46 | 0.29 | 0.30
10 | 0.46 | 0.58 | 0.32
15 | 0.46 | 0.42 | 0.276
16 | 0.46 | 0.46 | 0.32
17 | 0.21 | 0.5 | 0.3
20 | 0.21 | 0.37 | 0.3
25 | 0.21 | 0.59 | 0.288
31 | 0.21 | 0.53 | 0.284
32 | 0.21 | 0.58 | 0.322
35 | 0.5 | 0.77 | 0.29
40 | 0.5 | 0.61 | 0.367
45 | 0.5 | 0.52 | 0.324
48 | 0.5 | 0.66 | 0.368
49 | 0.22 | 0.69 | 0.342
50 | 0.22 | 0.78 | 0.346
55 | 0.22 | 0.67 | 0.3
60 | 0.22 | 0.67 | 0.322
64 | 0.22 | 0.82 | 0.362
70 | 0.51 | 1.1 | 0.32
80 | 0.49 | 0.89 | 0.37
90 | 0.225 | 0.68 | 0.343
100 | 0.54 | 1.09 | 0.41
110 | 0.6 | 0.98 | 0.36
120 | 0.26 | 0.75 | 0.386
128 | 0.266 | 1.1 | 0.402



</div>

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

Commit messages:
 - 8349452: Fix performance regression for Arrays.fill() with AVX512

Changes: https://git.openjdk.org/jdk/pull/28442/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28442&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8349452
  Stats: 120 lines in 2 files changed: 101 ins; 5 del; 14 mod
  Patch: https://git.openjdk.org/jdk/pull/28442.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28442/head:pull/28442

PR: https://git.openjdk.org/jdk/pull/28442


More information about the hotspot-dev mailing list