Frage

Wir haben uns bei g++ Version 3.2.3 und 4.2.4.Mit 4.2.4, die performance-Verbesserungen auf einigen unserer code-Basis erheblich.

Ich habe versucht, auf der Suche, die gcc buzilla Datenbank finden Hinweise darauf, was Fehler gehabt haben können, eine so dramatische Verbesserung, aber ich habe nicht jeden einzelnen Fehler, der Stand da als ein Kandidat.

Sind die Verbesserungen, die das Ergebnis von vielen kleinen Veränderungen, die langsam hatte eine Wirkung?Oder war es zu sagen, ein top-5-Reihe von Verbesserungen, die kann haben einen Unterschied gemacht?

Für einige Hintergrundinformationen, unsere code-Basis macht gute Verwendung von STL-Containern und algorithmen, sowie die C++ - features wie das 'inline' keyword.

War es hilfreich?

Lösung

In meiner Erfahrung, 3.4 wird, wenn die Leistung im Grunde spitz;4.2 ist tatsächlich langsamer als 3.4 auf meinem Projekt, mit 4.3 der erste entspricht ungefähr 3.4 Leistung.4.4 ist etwas schneller als 3.4.

Gibt es ein bestimmtes paar Fälle, die ich gefunden habe, wo ältere Versionen von gcc haben einige unglaublich verzögert sich die Dinge in code-es war eine Besondere Funktion, die ging von 128 bis 21 Uhren von 3,4 bis 4,3, aber das war offensichtlich ein besonderer Fall (es war eine kurze Schleife, wo die Zugabe von ein paar unnötigen Anweisungen, die Massiv die Leistung beeinträchtigen).

Ich persönlich benutze 3.4, nur weil es kompiliert wird, so viel schneller, so dass die Prüfung viel schneller.Ich versuche auch zu vermeiden, die neuesten Versionen, da Sie offenbar böse Gewohnheiten miscompiling code;--März core2 auf neuere gcc-Versionen Ursachen segfaults in meinem Programm, zum Beispiel, weil es strahlt autovectorized code, der versucht, führen Sie ausgerichtet Zugriffe auf nicht ausgerichtete Adressen.

Insgesamt, obwohl die Unterschiede sind sehr selten;3-5% ist die absolute die meisten Ich habe gesehen, in Bezug auf die Leistung.

Nun, Hinweis: dies ist C;Dinge können anders sein, in C++.

Andere Tipps

Ich glaube, dass der Optimierer wurde komplett überarbeitet, in der gcc4-Serie.Sehen Sie diese Seite, zum Beispiel, über Vektorisierung:

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

Zur info, ich habe einmal einen benchmark, c[i] = a[i] + b[i] mit dynamischen arrays statische arrays und std::vector und es war die std::vector das war die Schnellste (w/ gcc 4.1).30% Unterschied in der Leistung.

Bäche waren sehr langsam in 3.3 und kam viel schneller in 3.4.(Nachricht auf gcc mailing-Liste) Ich Wette, andere besserten sich die Dinge zu.

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