aMule Forum
Deutsch => aMule Hilfe => Topic started by: Schuttwegraeumer on June 08, 2009, 08:51:40 PM
-
Ich will mal auf Nummer sicher gehen.
Ich würde gerne gcc falgs wie mcpu oder mtune hinzufügen.
Und zwar in der ./configure Zeile.
Wie geht man am deppensichersten for?
-
Wenn man die CFLAGS vorher setzt sollten sie eigentlich vom configure übernommen werden.
-
Hinweis: Es gibt CLAGS und CXXFLAGS. Die ersten werden für den C Compiler und zweitere für den C++ Compiler benutzt.
Beispielaufruf:
CXXFLAGS="-Os --ffunction-section --fdata-section" ./configure --disable-debug
-
Hinweis: Es gibt CLAGS und CXXFLAGS. Die ersten werden für den C Compiler und zweitere für den C++ Compiler benutzt.
Beispielaufruf:
CXXFLAGS="-Os --ffunction-section --fdata-section" ./configure --disable-debug
Wo setze ich das?
-
Einfach im Terminalfenster so eintippen.
-
Einfach im Terminalfenster so eintippen.
Aha.
Danke, werde ich beim nächsten TAR gleich mal testen.
Wirklich verwenden werde ich es erst ab Donnrstag da ich dann an meinem Zweitwohnsitz bin mit dem Rechner meines Vaters.
Das ist im Gegensatz zu meinem eine echte Rakete (Athlon XP 1600+ :) und ich möchte da mal mit ein paar Optimierungen experimentieren.
Welche Compiler Flags haben sich dann entweder bei einem PII oder einem Athlon XP als sinnvoll erwiesen?
Ich weiss anhand eines Artikels auf planet64bit dass da die SSE Einheit eine andere Genauigkeit hat:
http://planet64bit.de/node/1458 (auf Seite 2 des ARtikels gibt es ein DIFF Bild zwischen i387 und SSE)
Kann man die FP Abarbeitung mittels mfpmath= ungefährlich auf SSE beschränken oder ist das zu ungenau für amule.
Der Athlon XP ist kein 64bitter und kann kein SSE2.
-
Einfach im Terminalfenster so eintippen.
1.) ist die Reihenfolge irgendwie relevant oder kann man das ./configure da einfach druntermischen?
2.) Die gesetzten Flags gelten aber schon nur für dieses eine Build?
-
aMule verwendet ziemlich wenig Floatingpoint. Ich glaube, diese Optimierungen kannst du getrost vergessen.
-
aMule verwendet ziemlich wenig Floatingpoint. Ich glaube, diese Optimierungen kannst du getrost vergessen.
Ok, das hatte ich eigentlich schon vermutet da amule oder das ganze ed2k System mehr eine datenbankähnliche Sache ist.
Und die Verschlüsselungen sind ja auch eigentlich reine integer Berechnungen?
MMX ist ja angeblich keine FP ERweiterung, würde die etwas verbessern?
-
Wohl kaum. Cryptopp enthält bereits Optimierungen dafür.
-
Ok.
Bleibt jtzt nur noch die Frage ob diese Settings dann dauerhaft sind oder nur für den einen make Lauf gelten.
Und in welcher Reihenfolge müssen die in die configure Zeile rein?
-
Wenn du sie mit `CFLAGS=... ./configure` arbeitest, gelten sie nur für den build. Wenn du erst ein `export CFLAGS=...` und dann `./configure` startest gelten sie für alle builds (auch andere als aMule) die du in dieser Konsole, und Kindern davon, startest. Wenn du es überall haben willst, dann schreibe die export-Zeile in deine ~/.bashrc, nach einem Login is es dann dauerhaft eingestellt, bei bereits bestehenden Sitzungen kannst du mit `source ~/.bashrc` die Einstellungen neu einlesen und dort auch verwenden.
-
oh-oh, das Gentoo-Syndrom...;)
OK, zuerst deine Frage: Die Werte vor dem configure-Befehl gelten nur für den ./configure-Befehl, dieser schreibt sie dann in Dateien, von denen sie im make benutzt werden.
Achtung: --enable-optimize fügt "-O2" zu den CXXFLAGS hinzu, so dass aus CXXFLAGS="-Os" CXXFLAGS="-Os -O2" wird -- und der Compiler nutzt die letzte angegebene Flag. Also kein --enable-optimize nutzen, wenn du eine andere Optimierungsstufe willst.
Nun allgemein zu Kompileroptimierungen: Ich will dir den Spass nicht verderben, aber es ist der Mühe selten wert. Kompilerbauer wissen was sie tun -- sie haben alle sinnvollen (d.h. geschwindigkeitssteigernd und nicht gefährlichen) Optionen genommen und hinter der Option "-O2" versteckt. Sie haben sich da viele Gedanken gemacht und wenn du das zu kompilierende Programm nicht besser kennst als sie, sind die Chancen gering, dass du bessere Flags findest. Prozessoroptimierung kann Vorteile bringen, da der Compiler nicht mehr nach dem kleinsten gemeinsamen Nenner - dem 386 - gehen muss und mehr Fähigkeiten der CPU nutzt.
aMule nutzt diese Flag mit --enable-optimize.
Es gibt auch noch "-O3", das ist eine Sammlung von Flags, die versprechen noch schneller zu sein. Leider kann das auf Kosten der Korrektheit gehen, unsicheren Code produzieren oder sogar langsamer als -O2 sein.
(Das hängt dann mit Caches zusammen. Früher (<94)¹ gab es die Taktik "loops unzurollen", d.h. anstatt dem Computer zu sagen "Mach 100mal das." hat man 100mal 'das' hingeschrieben. Der Code war dadurch viel größer, lief aber auf langsamen CPUs schneller. Heute ist es in der Regel schneller Code direkt aus dem Cache auszuführen, anstatt neuen Code nachzuladen, so dass das heute nicht mehr so gemacht wird.)
Meine persönliche Lieblingseinstellung habe ich dir oben gegeben. -Os ist fast wie -O2, allerdings werden nur Optimierungen durchgeführt, die den Code nicht größer machen. Das kann gut für Caches sein, sorgt aber allgemein für kleinere Programme. Die beiden anderen Flags in der Kombination mit LDFLAGS="--Wl,--gc-sections" helfen die Größe noch weiter zu reduzieren.
-
Achtung: --enable-optimize fügt "-O2" zu den CXXFLAGS hinzu, so dass aus CXXFLAGS="-Os" CXXFLAGS="-Os -O2" wird -- und der Compiler nutzt die letzte angegebene Flag.
Nicht wahr. Längst arbeitet es so, aber jetzt Benutzeroptionen sind die Letzte.
-
Achtung: --enable-optimize fügt "-O2" zu den CXXFLAGS hinzu, so dass aus CXXFLAGS="-Os" CXXFLAGS="-Os -O2" wird -- und der Compiler nutzt die letzte angegebene Flag.
Nicht wahr. Längst arbeitet es so, aber jetzt Benutzeroptionen sind die Letzte.
Oh.
Du meinst die Settings bleiben bis ich was anderes setze?
You mean this settings will be in use until I set other flags?
-
Nein. Er meint meine Warnung stimmt so nicht mehr. Wenn du Einstellungen selbst setzt, ändert aMule diese nicht.
D.h. CXXFLAGS="-Os" ./configure --enable-optimize nutzt -Os, wie in den CXXFLAGS angegeben.
-
Nein, ich meine daß --enable-optimize und CXXFLAGS="-Os" wird "-O2 -Os" bekommen, nicht "-Os -O2" wie du schriebt. Folglich, zum beispiel wenn du benutzt --enable-optimize mit CXXFLAGS="-O0", das wird Optimierung sperren.
---
Oops, ich habe deines Letztes Post nich gesehen, wuischke. Du hast recht.