AMD AOCC 3.0 Is Here To Help Squeeze A Bit Extra Performance Out Of Zen 3
This week alongside the EPYC 7003 series launch was the introduction of AOCC 3.0 as AMD's Zen-optimized LLVM/Clang downstream. We have started putting this updated compiler through its paces to see what it means for AMD Zen 3 performance.
Within the next week or so I should have some new AOCC vs. LLVM Clang upstream vs. GCC 11 development benchmarks while for today's article is looking at AOCC 2.3 as the prior release compared to the newly-minted AOCC 3.0. The AMD Optimizing C/C++ Compiler 3.0 update re-bases its base against LLVM Clang 12 in its development state towards the end of last year compared to an LLVM Clang 11 base used by AOCC 2.3. AOCC 3.0 is the first AMD compiler release with Zen 3 optimizations, using the same -march=znver3 option of course as upstream LLVM and GCC. AOCC 3.0 is also tuned for AMD's AMDLibM 3.7 math library, improves its FLANG-based Fortran compiler support, offers improvements around OpenMP debugging, and other changes.
The AMD Optimizing C/C++ Compiler is focused on EPYC processors and hence why AOCC 3.0 wasn't released until the AMD Milan launch, but it obviously works as well on AMD Ryzen processors. For this initial testing I was running benchmarks from an AMD Ryzen 9 5950X system with the Daytona server being busy running other tests at the moment while waiting for other motherboards to see Milan-supported BIOS updates. Shortly I should have out some EPYC 7003 compiler benchmarks while this article is just looking at the Ryzen 9 5950X.
Running AOCC 3.0 went well on the Ryzen 9 5950X test box that was running Ubuntu 20.10. For this quick look, AOCC 2.3 versus AOCC 3.0 was compared while the CFLAGS/CXXFLAGS were set to "-O3 -march=native" to see the impact of the Zen 3 support with AOCC 3.0 while the older compiler release falls back to Zen 2 level optimizations. Via the Phoronix Test Suite various C/C++ benchmarks were carried out for this initla AOCC 3.0 benchmark run.