optimiert gcc automatisch?
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich habe mal ins Makefile folgendes eingetragen:
#------------------------------------------- CPPFLAGS_1 = -mtune=i686 \ -O3
leider gibts es eine Fehlermeldung "error: bad value (core2) for -mtune= switch"
habe die GNU make Version 3.81.
Mit "-mtune=i686" läuft es. Kennt er den CoreDuo nicht?
-
Welche Compiler Version nutzt du denn? IIRC kam die 'core2' Option erst mit dem 4.2er oder 4.3er hinzu. Ausserdem solltest du nochmal genau nachschauen, welcher Prozessor denn wirklich zum Einsatz kommt. Die Core 2 Derivate, genauer Core 2 Duo, waren die ersten Prozessoren mit Core Architektur (Merom Basis). Der Core Duo (Yonah Basis) gehört aber nicht dazu. Ist also kein Core 2 Derivat bzw basiert nicht auf der Core Architektur. So seltsam und verwirrend das auch klingen mag. Der Core Duo ist im Grunde nicht viel mehr als zwei Pentium-M Kerne, die an einen gemeinsamen L2 Cache angebunden sind. Dh, 'pentium-m' wäre in dem Fall die passende Option.
Damit SSE genutzt wird, musst du noch den Schalter '-mfpmath=' angeben. Und die SSE Version dann über '-msse...'. Mittels '-march=' kannst du dies auch dem Compiler überlassen.
Noch ein Hinweis, SSE kann durchaus langsamer sein als Legacy Code, wie zB x87. Vor allem dann, wenn kaum vektorisierte und hauptsächlich skalare Instruktionen erzeugt werden können.
-
groovemaster schrieb:
Welche Compiler Version nutzt du denn? IIRC kam die 'core2' Option erst mit dem 4.2er oder 4.3er hinzu. Ausserdem solltest du nochmal genau nachschauen, welcher Prozessor denn wirklich zum Einsatz kommt. Die Core 2 Derivate, genauer Core 2 Duo, waren die ersten Prozessoren mit Core Architektur (Merom Basis). Der Core Duo (Yonah Basis) gehört aber nicht dazu. Ist also kein Core 2 Derivat bzw basiert nicht auf der Core Architektur. So seltsam und verwirrend das auch klingen mag. Der Core Duo ist im Grunde nicht viel mehr als zwei Pentium-M Kerne, die an einen gemeinsamen L2 Cache angebunden sind. Dh, 'pentium-m' wäre in dem Fall die passende Option.
Damit SSE genutzt wird, musst du noch den Schalter '-mfpmath=' angeben. Und die SSE Version dann über '-msse...'. Mittels '-march=' kannst du dies auch dem Compiler überlassen.
Noch ein Hinweis, SSE kann durchaus langsamer sein als Legacy Code, wie zB x87. Vor allem dann, wenn kaum vektorisierte und hauptsächlich skalare Instruktionen erzeugt werden können.Die GCC Version ist 4.2.4. Und der Prozessor ist ein Core2 Duo E6750. Das sollte ja ein "vollwertiger" core2 sein, oder? Ich werde es mal mit den Schaltern versuchen.
-
Yep, der E6750 ist ein Core 2 Prozessor.
-
Hallo,
man könnte noch, um sicher zu sein, in der Datei /proc/cpuinfo nachschauen, dort gibt es eine "flags" Zeile. Ich habe mal so zufällig erfahren, dass meine Centrino Duo CPU für GCC nicht -march=pentium-m sondern richtiger -march=prescott sein soll. Ich nehme an, so soll es auch für die E6750 CPU sein, es sei denn, sie ist 64 Bit...
-
prescott ist das richtige Flag für den Core2, allerdings könntest du auch gcc 4.3 nutzen, denn dort kannst du einfach "native" angeben und gcc sucht für dich das/die passende(n) Flag(s) heraus.
-
Leute, bitte nicht alles durcheinander werfen. Für den Core2 ist das richtige Flag _core2_. Das hatten wir doch mittlerweile geklärt. Prescott hat damit nichts zu tun und gehört zur Netburst Familie, also Pentium 4.
@abc.w
Wenn du einen Pentium 4 Mobile hast, wäre _prescott_ durchaus korrekt. Ich vermute aber mal, weil du von Centrino sprachst, du hast eher einen Core Duo. Dafür kennt der GCC kein entsprechendes Flag. _pentium-m_ wäre immer noch am passendsten. Das Problem ist nur, beim Core wurde im Gegensatz zum Pentium-M noch SSE3 hinzugefügt. Rein von der ISA ist er mit dem Prescott also ziemlich identisch. Nur sind es völlig verschiedene Mikroarchitekturen. Und entsprechend unterschiedlich wird auch optimiert. Deshalb ist _prescott_ an der Stelle suboptimal.
-
suboptimal, oh nein, habe bereits die gesamte Gentoo Installation mit prescott Einstellung gemacht. Ist eigentlich kein Problem, man könnte alles neu rekompilieren lassen, dauert halt ein wenig...
SSE3 war übrigens der Grund, warum ich von pentium-m auf prescott geändert hab. Dachte, wenn die CPU diesen Befehlssatz unterstützt, wäre es naheliegend, die passendste Einstellung aus dem GCC manual rauszusuchen. Hab gar nicht an die Mikroarchitekturen gedacht.
-
Wenn ich sage, dass es suboptimal ist, dann ist es auch suboptimal. Es geht schliesslich nicht um Machbarkeitsstudien.