Also ich hab hier einen AMD Athlon(tm) 64 X2 Dual Core Processor 5000+. Und jetzt habe ich 4 mal den gleichen Sourcecode mit volgenden Optionen compiliert: -march=native -march=native -msse3 -march=athlon64-sse3 -march=athlon64-sse3 -msse3 Ich dachte da müsste 4 mal das gleiche rauskommen. Aber es kommen 4 verschiedene Anwendungen raus. Bechmarkmäßig scheint Nr. 3 die Effektivste zu sein aber ich hab's bis jetzt ja nur mit einem Programm getestet und die Unterschiede sind minimal. Aber ich verstehe nicht so wirklich warum es überhaupt unterschiedliche Anwendungen gibt. athlon64-sse3 sollte ja sse3 shon implizieren und native solte der aktuelle Prozessor sein der ja athlon64-sse3 ist. (Glaub ich mal für k9 gibt es ja keine eigenen schalter.) -march=k8 und -march=k8 -msse2 gibt ja auch genau die gleiche Anwendung.Dieser Post wurde am 21.03.2011 um 14:38 Uhr von wanne editiert.
Wie hast du festgestellt, dass es sich um unterschiedliche Anwendungen handelt? Ein diff über die Binaries tut's hier nicht; es gibt immer kleine Unterschiede in den Metadaten (Zeitstempel etc).
Ob es qualitative Unterschiede gibt, ist etwas schwieriger rauszukriegen. Du könntest mal ndisasm drüber laufen lassen (oder gcc -save-temps mitgeben) und den Assembly-Code vergleichen. Wenn es Unterschiede gibt, siehst du damit auch gleich, welche es sind. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
So habe jetzt 100MiB oder 2.535.452 Zeilen Assembler Code... Die hätte ich mir eigentlich auch gleich vom gcc machen lassen können. In erster linie unterscheiden die sich in den Speicheradressen. Aber auch wenn ich nur die 1. Spalte vergleiche sprengen die Unterschiede meine 10.000 Zeilen Verlauf in der Konsole. Selbst wenn ich en bischen mehr Assembler verstehen würde währe das ziemlich erschlagend: Hier mal ein xor statt einem or da mal ein pop mehr... Dann mal ein mov statt nem push => k.p was mir das sagen soll. Aber im großen und ganzen zeigt es mir genau das, was beim diffen der Binarys schon herausgekommen ist: Es gibt ein paar größere Blöcke in denen einiges anders ist (So alle 5 Befehle ein Änderung.) Und wenn ich die gleichen Flags setze kommt immer exakt die gleiche Binary raus. Und auch das setzten von -msse2 hat keine Auswirkungen. fisttp wird allerdings in allen beiden genutzt. mit extra sse3 Flag 556 mal und ohne 548.Dieser Post wurde am 22.03.2011 um 01:57 Uhr von wanne editiert.