Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » g++ -athlon64-sse3 -msse3

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.03.2011, 14:36 Uhr
wanne



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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.03.2011, 19:59 Uhr
0xdeadbeef
Gott
(Operator)


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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.03.2011, 01:53 Uhr
wanne



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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: