But GCC development adds new features, new processor supports which are not switched on by the general optimization sets. Here I am comparing peak performance (or more accurately saying close to peak performance) which can be achieved on modern processors by different versions of GCC.
For this comparison I use Intel Haswell processor (3.4 GHz i5-4670) and GCC-4.2.4, GCC-4.4.4, and GCC-4.8.2.
Why do I use these versions of GCC? It is pretty obvious for GCC-4.8 as it is the latest release of GCC. GCC-4.2 is chosen because it is the last version of the compiler with GPL v2 used by Apple in OS X (although latest Mavericks OS just imitates gcc command by LLVM, it is still true for older OS X versions). GCC-4.4 is chosen as it is a system compiler of some latest commercial LINUX distributions, e.g. RHEL-6.
I used the following options:
Here are some important remarks about the used options. -Ofast and LTO were not implemented in GCC-4.4 and GCC-4.2 yet. The same is about AVX2 support. The closest implemented machine architecture option can be used to tune code for Haswell are nocona and core2 for GCC-4.2 and GCC-4.4 correspondingly. As -Ofast switches on -ffast-math, the later option was added for GCC-4.4 and GCC-4.2.
Here are the SPEC2000 performance rates for the comparison (changes in percents relative to GCC-4.4 are given in parentheses):
|Int||3832 (-2.9%)||3945 (0%)||4228 (+7.2%)|
|FP||5001 (-9.2%)||5508 (0%)||6040 (+9.7%)|
|Int||3468 (-4.6%)||3636 (0%)||4184 (+15.1%)|
|FP||4251 (-13.8%)||4933 (0%)||5420 (+9.9%)|
GCC is too big to follow all its development. But in my opinion such improvements since GCC-4.2 were achieved mostly by:
Last modified: 03/18/2014 - vmakarov at redhat dot com
Return to index page.