AMD Zen 3 Performance With The Initial "znver3" GCC Compiler Support
Last week AMD published their Zen 3 support for GCC code compiler. That initial support, which has already been merged into GCC 11, is the initial support flipping on newly supported instructions but not yet offering any tuned scheduler model or other optimizations compared to the existing Zen 2 path. In any case, here is a look at the performance changes with building the open-source benchmarks under test with "znver3" compared to the prior Zen 2 and Zen 1 targets along with generic x86_64 and then also looking at the performance if catering the compiler targets for Intel's Skylake and Haswell processors.
From the GCC 11.0 development code on 3 December with the Znver3 patch applied and compiled as a release build, I ran benchmarks with the Ryzen 9 5950X while looking at various compiler flags (CFLAGS/CXXFLAGS) for a look at the resulting performance of the open-source C/C++ benchmarks under test. The "-O3" optimization level was consistent across all the compiler targets tested while "-march=" values of znver3, znver2, znver1, x86-64, haswell, and skylake were all tested. The Zen 3/2/1 comparison is obvious and x86-64 offers a look at the generic x86-64 base level performance.
The Intel "Haswell" and "Skylake" builds were also tested for seeing how those Intel-optimized binaries perform on Zen 3. This was done since at least with past AMD processors we have often seen cases where the performance is still great or in some cases superior since Intel tends to invest heavily on timely optimized compiler support with tuned scheduler models for their various CPU families, etc. There are also some that prefer a sane compiler target base for supporting both recent Intel and AMD processors, to which the x86-64 microarchitecture feature levels are also working to address.
The Ryzen 9 5950X was running with the ASUS ROG CROSSHAIR VIII HERO WiFi motherboard, 16GB of DDR4-4266 memory, and 2TB Corsair Force MP600 NVMe SSD. The GCC 11 compiler testing was carried out with the system running Ubuntu 20.04.1 LTS on the Linux 5.4 kernel. Being changed out between runs was just the "-march=" target with the -O3 optimization level being persistent and no other changes.