AMD AOCC 2.3 Squeezing Out Extra Performance For EPYC Over GCC 10, Clang 11
At the start of the month AMD released AOCC 2.3 as the newest version of the AMD Optimizing C/C++ Compiler. AOCC is one of several LLVM/Clang downstream versions maintained by the company with this one being about delivering flagship AMD Zen family compiler support. From an AMD EPYC 7002 "Rome" series processor I recently wrapped up fresh benchmarks of AOCC 2.3 against the current GCC 10 and Clang 11 compiler releases.
AOCC 2.3 remains focused on optimized Zen / Zen 2 compiler support at least until the EPYC 7003 "Milan" series processors ship. At that point we imagine it will be AOCC 3.0 just as the shift to AOCC 2.0 happened with EPYC Rome. AOCC 2.3 is based on the LLVM/Clang 11 upstream code-base while continuing to carry various Zen-optimized patches that haven't yet been upstreamed.
Besides Zen patches for LLVM/Clang, AOCC also remains tuned for the AMDLibM math library, shipping FLANG for experimental Fortran compiler support, and other tuning for being their flagship compiler for EPYC hardware on enterprise Linux distributions.
Using an AMD EPYC 7502 + ASRockRack EPYCD8 test bed running Ubuntu 20.10 with the Linux 5.8 kernel, I ran a series of benchmarks on AOCC 2.3 against GCC 10.2 and LLVM Clang 11.0. Throughout testing all the compilers the CFLAGS/CXXFLAGS were set to "-O3 -march=znver2" for testing the builds catering to the current generation EPYC Rome family. No other changes were made to the system state during testing besides changing out the compiler and rebuilding the software under test with the Phoronix Test Suite.