Eigentlich wollte ich bereits Ende 2004 einen 64 Bit Compiler-Vergleich machen, doch stieß ich damals recht schnell auf diverse Probleme der noch sehr jungen x86_64 Architektur und das Projekt wurde wieder fallen gelassen.
Trotzdem wurden bereits einige Stunden Benchmarks angefertigt und die Ergebnisse verstauben seit dem auf meinen Festplatten. Da sie aber immer noch allgemein gültig sind, will ich sie euch hier noch kurz präsentieren.
Die erste Benchmark Serie befasste sich mit dem Persistence of Vision Raytracer in der Version 3.6.1.
Als Compiler kam der GCC in Version 3.3.4 und 3.4.2 zum Einsatz, der im damaligen Gentoo Portage Tree (amd64/~amd64) vorhanden waren.
Das Testsystem auf dem damaligen Stand:
Prozessor
|
Athlon 64
3000+, 2010 MHz, 512 KiB L2 Cache
|
Mainboard
|
Gigabyte
GA-K8VT800, BIOS F5
|
Speicher
|
1024 MiB
Infineon
PC2700 CL2,5, Auto-Settings
|
Grafikkarte
|
MSI FX5900XT
VTD128 - DVI out
Driver:
amd64_1.0-6629
|
Soundkarte
|
Terratec DMX
Fire 1024, Crystal CS4624
|
Festplatte
|
Seagate
Barracuda ATA V ST380023A
|
Betriebssystem
|
Gentoo Linux
AMD64-Kernel 2.6.7-r11
|
Die verschiedenen Optimierungslevel des GCC beinhalten eine ganze Reihe einzelner Flags, eine Beschreibung zu den einzelnen Optionen findet ihr im GCC Handbuch.
Flag
|
Optimization (Not all optimizations are controlled directly by a flag. Only
optimizations that have a flag are listed.) |
| -O1 |
-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fcrossjumping (only GCC 3.3) -fif-conversion -fif-conversion2 -fdelayed-branch -fguess-branch-probability -fcprop-registers -fomit-frame-pointer (only GCC 3.4)
|
-O2
|
(-O1 +)
-fforce-mem -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las (only GCC 3.4) -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks -freorder-functions -fstrict-aliasing -funit-at-a-time (only GCC 3.4) -falign-functions -falign-jumps -falign-loops -falign-labels -fcrossjumping
|
-O3
|
(-O2 +)
-finline-functions
-fweb (only GCC 3.4)
-frename-registers
|
-Os
|
-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fif-conversion -fif-conversion2 -fdelayed-branch -fguess-branch-probability -fcprop-registers -fomit-frame-pointer (only GCC 3.4) -fforce-mem -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las (only GCC 3.4) -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-functions -fstrict-aliasing -funit-at-a-time (only GCC 3.4) -fcrossjumping
|