Frage

Stellen Sie Ihren Compiler normalerweise so ein, dass er auf maximale Geschwindigkeit oder kleinste Codegröße optimiert ist?Oder konfigurieren Sie einzelne Optimierungseinstellungen manuell?Warum?

Mir ist aufgefallen, dass die meisten Leute dazu neigen, die Compiler-Optimierungseinstellungen einfach auf ihrem Standardzustand zu belassen, was bei Visual C++ maximale Geschwindigkeit bedeutet.Ich hatte immer das Gefühl, dass es bei den Standardeinstellungen eher darum geht, bei Benchmarks gut auszusehen, bei denen es sich in der Regel um kleine Programme handelt, die vollständig in den L2-Cache passen, als darum, was für die Gesamtleistung am besten ist. Deshalb stelle ich die Optimierung normalerweise auf die kleinste Größe ein.

War es hilfreich?

Lösung

Als Gentoo Benutzer Ich habe versucht, eine ganze Reihe von Optimierungen auf dem gesamten O und es gibt endlose Diskussionen über die Gentoo-Foren darüber. Einige gute Flags für GCC finden Sie in der Wiki .

Kurz gesagt, die Optimierung für Größe am besten funktionierte auf einem alten Pentium3 Laptop mit eingeschränktem ram, aber auf meinem Haupt-Desktop-Rechner mit einem Core2Duo, gab -O2 bessere Ergebnisse über allem.

Es gibt auch ein , wenn Sie interessieren sich für die x86 (32 Bit) spezifische Flags dass die meisten optimiert.

sind

Wenn Sie gcc verwenden und wollen wirklich eine bestimmte Anwendung zu optimieren, versuchen acovea . Es läuft eine Reihe von Benchmarks, dann neu kompiliert sie mit allen möglichen Kombinationen von Compile-Flags. Es ist ein Beispiel unter Verwendung von Huffman-Kodierung auf der Website (weniger ist besser):

A relative graph of fitnesses:

   Acovea Best-of-the-Best: **************************************                (2.55366)
     Acovea Common Options: *******************************************           (2.86788)
                       -O1: **********************************************        (3.0752)
                       -O2: ***********************************************       (3.12343)
                       -O3: ***********************************************       (3.1277)
           -O3 -ffast-math: **************************************************    (3.31539)
                       -Os: *************************************************     (3.30573)

(Beachten Sie, dass es -Os fand am langsamsten auf diesem Opteron-System zu sein.)

Andere Tipps

Ich ziehe es minimale Größe zu verwenden. Speicher billig sein kann, Cache ist nicht .

Neben der Tatsache, dass Cache-Lokalität Angelegenheiten (wie auf Freund sagte), eine andere Dinge Microsoft tut, ist ihre Anwendung zu profilieren und herauszufinden, welche Codepfade während der ersten paar Sekunden des Starts ausgeführt werden. Danach werden sie füttern diese Daten zurück an den Compiler und sie auffordern, die Teile zu setzen, die dicht nebeneinander während des Startvorgangs ausgeführt werden. Dies führt zu schnellerer Startzeit.

Ich glaube, dass diese Technik öffentlich in VS verfügbar ist, aber ich bin nicht 100% sicher.

Für mich ist es hängt davon ab, welche Plattform ich verwende. Für einige Embedded-Plattformen oder wenn ich auf dem Cell-Prozessor arbeite Sie Einschränkungen wie eine sehr kleine Cache oder nur wenig Platz für Code zur Verfügung gestellt hat.

Ich benutze GCC und neigen dazu, es auf „-O2“ zu verlassen, das ist die „sicherste“ Optimierungsstufe und Bevorzugungen beschleunigen eine minimale Größe über.

Ich würde sagen, dass es wahrscheinlich keinen großen Unterschied macht, wenn Sie für eine sehr leistungsfähige Anwendung entwickeln, in dem Fall, dass Sie wahrscheinlich sein sollten, um die verschiedenen Optionen für Ihren speziellen Anwendungsfall Benchmarking.

Microsoft liefert alle seine C / C ++ Software für Größe optimiert. Nach Benchmarking entdeckten sie, dass es (aufgrund von Cache-Lokalität) tatsächlich eine bessere Geschwindigkeit gibt.

Es gibt viele Arten der Optimierung ist die maximale Geschwindigkeit im Vergleich zu kleinem Code nur ein. In diesem Fall würde ich Höchstgeschwindigkeit wählen, da die ausführbare Datei nur ein bisschen größer sein wird. Auf der anderen Seite, können Sie Ihre Anwendung für einen bestimmten Typ des Prozessors optimieren. In einigen Fällen ist dies eine gute Idee (wenn Sie das Programm laufen nur auf Ihrer Station beabsichtigen), aber in diesem Fall ist es wahrscheinlich, dass das Programm nicht auf anderer Architektur arbeiten (zB: Sie Ihr Programm kompiliert auf einem Pentium arbeiten 4 Maschine. -> es wird wahrscheinlich nicht auf einem Pentium arbeiten 3)

beiden Build Profile fest, welche besser funktioniert auf spezifisches Projekt und Hardware.

Für Leistung kritischen Code, das heißt -. Sonst jeden wählen und nicht die Mühe

Wir verwenden immer für eine optimale Geschwindigkeit zu maximieren, aber dann, den ganzen Code, den ich in C ++ schreiben irgendwie in die Bioinformatik-Algorithmen und Geschwindigkeit verbunden ist, ist von entscheidender Bedeutung, während die Codegröße relativ klein ist.

Der Speicher ist billig jetzt Tage :) So kann es sinnvoll sein, Compiler-Einstellungen auf maximale Geschwindigkeit einzustellen, wenn Sie mit Embedded-Systemen arbeiten. Natürlich hängt Antwort auf konkrete Situation.

Dies ist abhängig von der Anwendung des Programms. Wenn eine Anwendung, die Programmierung eines schnellen industriellen Prozess zu steuern, Geschwindigkeit optimieren würde Sinn machen. Wenn eine Anwendung, Programmierung, die muss nur auf eine Benutzereingabe, die Optimierung für Größe reagieren könnte Sinn machen. Das heißt, wenn Sie über die Größe der ausführbaren Datei betroffen sind.

Tweaking Compiler-Einstellungen, wie das ist eine Optimierung. Nach dem Prinzip, dass „vorzeitige Optimierung ist die Wurzel alle Übels ist,“ ich damit nicht die Mühe machen, bis das Programm in der Nähe seines endgültigen Versand Zustand ist, und ich habe entdeckt, dass es nicht schnell genug ist -. Also so gut wie nie

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top