RFR: 8286823: Default to UseAVX=2 on all Skylake/Cascade Lake CPUs

Vladimir Kozlov kvn at openjdk.java.net
Sat May 21 16:24:47 UTC 2022


On Mon, 16 May 2022 15:52:22 GMT, olivergillespie <duke at openjdk.java.net> wrote:

> The current code already does this for 'older' Skylake processors,
> namely those with _stepping < 5. My testing indicates this is a
> problem for later processors in this family too, so I have removed the
> max stepping condition.
> 
> The original exclusion was added in https://bugs.openjdk.java.net/browse/JDK-8221092.
> 
> A general description of the overall issue is given at
> https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Downclocking.
> 
> According to https://en.wikichip.org/wiki/intel/microarchitectures/cascade_lake#CPUID,
> stepping values 5..7 indicate Cascade Lake. I have tested on a CPU with stepping=7,
> and I see CPU frequency reduction from 3.1GHz down to 2.7GHz (~23%) when using
> -XX:UseAVX=3, along with a corresponding performance reduction.
> 
> I first saw this issue in a real production workload, where the main AVX3 instructions
> being executed were those generated for various flavours of disjoint_arraycopy.
> 
> I can reproduce a similar effect using SPECjvm2008's xml.transform benchmark.
> 
> 
> java --add-opens=java.xml/com.sun.org.apache.xerces.internal.parsers=ALL-UNNAMED \
> --add-opens=java.xml/com.sun.org.apache.xerces.internal.util=ALL-UNNAMED \
> -jar SPECjvm2008.jar -ikv -ict xml.transform
> 
> 
> Before the change, or with -XX:UseAVX=3:
> 
> 
> Valid run!
> Score on xml.transform: 776.00 ops/m
> 
> 
> After the change, or with -XX:UseAVX=2:
> 
> 
> Valid run!
> Score on xml.transform: 894.07 ops/m
> 
> 
> So, a 15% improvement in this benchmark. It's possible some benchmarks will be negatively
> affected by this change, but I contend that this is still the right move given the stark
> difference in this benchmark combined with the fact that use of AVX3 instructions can
> affect *all* processes/code on the host due to the downclocking, and the fact that this
> effect is very hard to root-cause, for example CPU profiles look very similar before and
> after since all code is equally slowed.

I did standalone runs of sub-benchmarks several times to get best results. Some of them show 2 sets of results: fast and slow. `crypto.aes` and `crypto.rsa` one of them. I suspect it is caused by difference in code generation (slightly different profiling and inlining) and nothing to do with AVX setting. I did see (termal?/turbo boost?) effects if I run benchmarks without pause between them. So I kept system idle for about 10 min between runs.

I did not re-run benchmarks if difference was < 3%.

We need to look what is going on with `mpegaudio` and `scimark.lu.small`. And also test with Parallel GC.

<img width="682" alt="SEPCjvm2008_avx2_vs_avx512_qrtr_separate" src="https://user-images.githubusercontent.com/5215794/169660023-6a7e0507-35da-444c-a717-cdefb33a457e.png">

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

PR: https://git.openjdk.java.net/jdk/pull/8731


More information about the hotspot-dev mailing list