===== GCC Optimization =====
=== Compiler Options ===
To see all available (enabled) optimization flags for your CPU type (with your GCC version) you can use:
gcc -c -Q -march=native -mtune=native --help=target
or the extended version:
gcc -v -Q -march=native --help=target
... and to get all compiler Flags which are used with your choosen optimization Flags you can test with:
gcc -march= [-mtune= -FLAGS] -E -v - < /dev/null 2>&1 | grep cc1
Best results will be received with the **-march=native -mtune=native** compiler flag that effectively means to use all available optimization flags for the **local systems CPU** architecture.
If you want to compile best optimized for a range of systems with diverent CPU architectures you can add a explicite architecture flag for the least common architecture you want to support.
^ CPU generation ^ architecture flag ^ sup. since gcc version ^ Ubuntu 12.0 ^
| Haswell iX-4xxx |''-march=core-avx2''| (min. gcc 4.8) | |
| Ivy-Bridge iX-3xxx |''-march=core-avx-i'' | (min. gcc 4.6) | not working right! **use ''corei7-avx''** |
| Sandy-Bridge iX-2xxx|''-march=corei7-avx'' | (min. gcc 4.6) | fully supported |
| Ironlake (Xeons?)|''-march=corei7''| <-- preferable | |
| Core with SSE3 |''-march=core2'' | | |
Explanations and Flags for different CPUs and Instructionsets cann be found in the [http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html| online GCC documentation|_blank]
== Magic -fPIC ==
When compiling libraries as static, this ''**lib.a**'' can be linked static in shared libraries if they all are compiled with the ''**-fPIC**'' flag. ("Position Independent code").
== Ubuntu 12.04.5 / GCC 4.6.3 ==
Supported optimized Parameters for all i5 (Sandy Bridge/Ivy Bridge).
-march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-tbm -mavx -msse4.2 -msse4.1 \
--param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -fstack-protector -mtune=corei7-avx
Parameters like corei7-avx-i, per description supported on Ivy Bridge, result in different unspecific Errors for example in ** Trilinos 11.4.3 and older **.
== Fedora 20 / GCC 4.8.2 ==
Optimized Parameters for i5 Ivy Bridge (ww8stud*, ww8-2024-[1/2], ww8-2025-3, ww8-2027-2):
-march=core-avx-i -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 \
-mno-lzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=core-avx-i