Ich habe vor einiger Zeit das Prinzip von Makefiles anhand eines kleines Beispiels gezeigt -> http://suckup.de/howto/c/c-programm-primzahlen-makefiles/ <- den selben Quelltext kompilieren wir heute mit verschiedenen C-Flags und 1000000 Schleifendurchläufen …
1.) ohne C-Flags
gcc -lm primzahlen.c -o primzahlen_slow
Output: time ./primzahlen_slow
[...]
999961
999979
999983
real 0m1.760s
user 0m1.420s
sys 0m0.164s
2.) ohne C-Flags & ohne “math.h” (sqrt)
gcc primzahlen.c -o primzahlen_slow
Output: time ./primzahlen_slow
[...]
999961
999979
999983
real 0m1.407s
user 0m0.988s
sys 0m0.192s
3.) -O2 & ohne “math.h” (sqrt)
gcc -O2 primzahlen.c -o primzahlen_2
Output: time ./primzahlen_slow
[...]
999961
999979
999983
real 0m1.405s
user 0m0.976s
sys 0m0.188s
4.) -Ofast (http://gcc.gnu.org/gcc-4.6/changes.html) & ohne “math.h” (sqrt)
gcc -Ofast primzahlen.c -o primzahlen_fast
Output: time ./primzahlen_fast
[...]
999961
999979
999983
real 0m1.377s
user 0m0.980s
sys 0m0.180s
5.) -Ofast + amdfam10 (http://en.gentoo-wiki.com/wiki/Safe_Cflags/AMD#Athlon_X2_7x50.2C_Phenom_X3.2FX4.2C_Phenom_II.2C_Athlon_II_X2.2FX3.2FX4)
Ein paar spezielle CFlags für meine CPU. :) (cat /proc/cpuinfo)
gcc -Ofast -funsafe-math-optimizations -funsafe-loop-optimizations -m64 -mtune=amdfam10 -mabm -msse4a -floop-parallelize-all -ftree-parallelize-loops=4 -floop-strip-mine -floop-block -funroll-all-loops -fbranch-target-load-optimize -lm primzahlen.c -o primzahlen_fast
Output: time ./primzahlen_fast
[...]
999961
999979
999983
real 0m1.327s
user 0m0.944s
sys 0m0.172s
Fazit:
Sobald ich -O1, -O2, -O3 oder -Ofast bei diesem kleinen Beispiel nutze ist der Geschwindigkeitsunterschied minimal und es ist egal, ob vorgefertigte mathematische Funktionen genutzt werden oder nicht.