Performance GNU vs MS Compiler



  • Ok, aber was ist denn an einem Filter betriebsspezifisch? Die Anforderungen des Heaps oder auch Zugriffe darauf? Weiß da Jemand mehr? Gibt es irgendwo Infos wo mal direkt ein Vergleich zwischen dem G++ 4.5 und VS2010 zu sehen gibt?



  • Janjan schrieb:

    Der GNU Compiler ist halt auf Linux ausgelegt, der MS Compiler für Windows. Daher kommen diese deutlichen Geschwindigkeitsunterschiede.

    Etwas platt, oder?

    Wenns um den erzeugten Code geht, so sind die Gründe wohl etwas verzweigter, denn der GCC erzeugt für Windows wie für (x86-)Linux gewöhnlichen x86-Code (abgesehen von Shared Objects unter Linux, wo, glaube ich, PIC benötigt wird), und die relevanten Optimierungen werden bei C++ ohnehin oberhalb des Backends vorgenommen.

    Wenn die Frage auf die Übersetzungsgeschwindigkeit ausgelegt ist, so sei angemerkt, daß es nicht allzu schwer ist, darin schneller als GCC zu sein. Der Visual C++-Compiler wurde schon mehrfach "generalüberholt" (bei Code Project gibt es irgendwo eine längere Artikelserie, die unter anderem das etwas näher beleuchtet) und offenbar dabei auch immer wieder optimiert. Der GCC scheint nicht mit besonderer Rücksicht auf den Einsatz effizienter Algorithmen programmiert worden zu sein, und man scheint noch immer mit diesen Altlasten zu kämpfen zu haben. (Mehr darüber hier.)



  • danke, nein mit Geschwindigkeit meine ich nicht wie schnell er kompiliert das ist mir so ziemlich schnuppe, sonder wie schnell beispielsweise die gleiche FFT in G++ verglichen mit MS ist. Hier müssten schon sehr viele Prozente bei raus kommen um den Compiler als deutlich schneller zu betiteln. Wenn es nur 10% oder so sind kann es mir herzlich egal sein, wenn es deutlich mehr sind würde sich ein Umstieg für mich schon lohnen, da ja der Compiler von MS auch kostenlos ist.



  • willywillswissen schrieb:

    Hier müssten schon sehr viele Prozente bei raus kommen um den Compiler als deutlich schneller zu betiteln. Wenn es nur 10% oder so sind kann es mir herzlich egal sein, wenn es deutlich mehr sind würde sich ein Umstieg für mich schon lohnen, da ja der Compiler von MS auch kostenlos ist.

    Es gibt dafür zwar Benchmarks (und gemeinhin schneidet der Intel-Compiler da am besten ab), aber wirklich "relevant" entsprechend deiner Vorgabe sind die Unterschiede eher nicht. Das kann natürlich je nach Anwendungsfall variieren - daher empfehle ich dir, aus den entscheidenden Stellen deines Codes einen kleinen Benchmark zu basteln und ihn mit allen in Frage kommenden Compilern zu übersetzen.


  • Mod

    willywillswissen schrieb:

    danke, nein mit Geschwindigkeit meine ich nicht wie schnell er kompiliert das ist mir so ziemlich schnuppe, sonder wie schnell beispielsweise die gleiche FFT in G++ verglichen mit MS ist. Hier müssten schon sehr viele Prozente bei raus kommen um den Compiler als deutlich schneller zu betiteln. Wenn es nur 10% oder so sind kann es mir herzlich egal sein, wenn es deutlich mehr sind würde sich ein Umstieg für mich schon lohnen, da ja der Compiler von MS auch kostenlos ist.

    Wenn überhaupt reden wir hier vom niedrigen Prozentbereich. Ich habe vor kurzem mal den Intel Compiler mit dem GCC verglichen. Ist zwar nicht der Microsoft Compiler, aber der von Intel hat den Ruf den mitunter schnellsten Code für x86 zu erzeugen. Die Unterschiede bewegten sich in Größenordnungen von weniger als 5%, meistens (aber nicht immer) war der Intel schneller. Der größte Unterschied war der Intel mit höchster Optimierung (PGO) gegen den GCC mit einfachster (O1) Optimierung, das waren 14 %. Ob sich dafür aber die überaus lange Compilierungszeit lohnt ist eine andere Frage.



  • Danke, das waren doch mal zwei kompetente Antworten, also nix mit deutlich schneller für mein Verständnis.



  • Warum sind 5% nicht deutlich schneller? 😕 Wenn ein Algorithmus 5% schneller läuft, und der Algorithmus 5 Tage laufen muß, werden diese 5% sehr wohl relevant sein! Dann ist der ICC-Algo 6 Stunden früher fertig. Wenn jemand was über Monate rechnen lassen muß (z.B. ein PIXAR-Film), wird der GCC abstinken.

    Wenn bei der Formel 1 ein Auto 0,5 Sek. schneller pro Runde ist als die Konkurrenz, mag die 0,5 Sek. lächerlich sein für einen Laien. Aber ein Rennen dauert im Schnitt 60 Runden! Das Auto das 0,5 Sek. schneller als die Konkurrenz ist, wird am Ende des Rennens 30 Sek. früher durch das Ziel fahren, als das langsamere Auto. Und das zeigt sich in jedem Rennen, das es keine Theorie ist.

    Also, es macht sehr wohl was aus, wenn der ICC oder MSVC nur ein paar Prozent schnelleren Code generiert. Vielleicht nicht für eure Programme, aber ihr seid nicht die einzigen, die Software einsetzen.



  • Artchi schrieb:

    Immer wieder beachtlich, wie die Menschen ihre Bedürfnisse auf den Rest der Welt übertragen.

    Langsam. Es hat ja niemand behauptet, daß es egal sei. Der Fragesteller hat eine Größenordnung genannt, die durch derartige Optimierungen nicht erzielbar ist, was sie für ihn irrelevant macht. Wenn du es nicht glaubst, lies nochmal genauer: da steht "also nix mit deutlich schneller für mein Verständnis".

    (Hoppla, da wurde die "immer wieder erstaunlich"-Anmerkung, über die ich mich gerade noch belustigen wollte, plötzlich herauseditiert 😃 Anyways: immer wieder erstaunlich, wie gerne mal voreilig zurückgeschlagen wird, anstatt einfach mal genauer zu lesen.)



  • Habe ich weg editiert, bevor du die Antwort gepostet hast. :p Siehe Timestamp.



  • 5% sind nur 5%. Das ist wenig, wenn man sieht, daß man bereitwillig mit der Sprachenwahl >100% zahlt.
    Du argumentierst fast wie ein Wirtschaftsingenieur. Wenn man eine Million Autos baut, dann sind die Einsparungen durch die minderwertigen Rückspiegelbefestigung von einem halben Cent auf einmal 5000 Euro wert!
    Das gesamte Rennen ist Theorie.



  • Interessant wäre, wieviele Projekte werden denn in der Praxis so geschrieben, dass man sie mit mehreren Compilern kompilieren kann 😕
    Ich kenne das nämlich so, dass wenn MS Visual Studio Projekt - für immer und ewig MS Visual Studio. Wenn gcc - für immer und ewig gcc. Bei gcc hat man vielleicht noch den Vorteil, dass es portabel ist und unter Windows und Linux läuft.
    Daher macht es denn Sinn, die Compiler mit künstlichen Algorithmen zu vergleichen 😕
    Wenn vergleichen, dann doch mit Porjekten aus der freien Wildbahn... aber da wäre der Aufwand zu hoch, um den Quellcode "Compiler-kompatibel" umzuschreiben, oder 😕


  • Mod

    Es gibt sowas wie einen C und einen C++ Standard. Den können alle Compiler übersetzen. Solltest du mal ausprobieren, das funktioniert wirklich!

    Ich schreibe beruflich Programme die mit 4 verschiedenen Compilern(Gnu, Sun, Intel, IBM) benutzt werden, ganz ohne Probleme.



  • Artchi schrieb:

    Warum sind 5% nicht deutlich schneller? 😕 Wenn ein Algorithmus 5% schneller läuft, und der Algorithmus 5 Tage laufen muß, werden diese 5% sehr wohl relevant sein! Dann ist der ICC-Algo 6 Stunden früher fertig. Wenn jemand was über Monate rechnen lassen muß (z.B. ein PIXAR-Film), wird der GCC abstinken.

    Wenn bei der Formel 1 ein Auto 0,5 Sek. schneller pro Runde ist als die Konkurrenz, mag die 0,5 Sek. lächerlich sein für einen Laien. Aber ein Rennen dauert im Schnitt 60 Runden! Das Auto das 0,5 Sek. schneller als die Konkurrenz ist, wird am Ende des Rennens 30 Sek. früher durch das Ziel fahren, als das langsamere Auto. Und das zeigt sich in jedem Rennen, das es keine Theorie ist.

    Also, es macht sehr wohl was aus, wenn der ICC oder MSVC nur ein paar Prozent schnelleren Code generiert. Vielleicht nicht für eure Programme, aber ihr seid nicht die einzigen, die Software einsetzen.

    Wenn ich das richtig verstanden habe sind die 5% auch nicht stetig aber egal, wenn es dir auf jedes Prozentchen ankommt dann bist du aber mit dem MS-Compiler falsch beraten, da ja der Intel-Compiler nochmals besser optimiert. Aber deine Begründungen sind eh sehr schwach, da zumal auch unterschiedliche RAMs oder CPUs diese geringen Performanceschwankungen hervorrufen können.

    Für Praxis sind diese 5% heutzutage also wirklich völlig irrelevant, sorry.



  • SeppJ schrieb:

    ... Ich schreibe beruflich Programme die mit 4 verschiedenen Compilern(Gnu, Sun, Intel, IBM) benutzt werden, ganz ohne Probleme.

    Machst du wirklich "make -f Gnu", "make -f Sun", "make -f Intel" und "make -f IBM"?
    Respekt 👍



  • Traurig wenn man ohne IDE nicht mehr programmieren kann, wenn das der Stroustrup liest 😃 der arbeitet am liebsten mit einem einfachen Editor.


  • Mod

    abc.w schrieb:

    SeppJ schrieb:

    ... Ich schreibe beruflich Programme die mit 4 verschiedenen Compilern(Gnu, Sun, Intel, IBM) benutzt werden, ganz ohne Probleme.

    Machst du wirklich "make -f Gnu", "make -f Sun", "make -f Intel" und "make -f IBM"?
    Respekt 👍

    😕 Nein, ich mache make . Keine Anpassung oder vorbereitung des Codes in irgendeiner Weise ist notwendig. Welche tollen Compilererweiterungen benutzt du denn ständig, dass dich dies so verwundert, dass man auch ohne sie auskommt?



  • __cpp schrieb:

    Traurig wenn man ohne IDE nicht mehr programmieren kann, wenn das der Stroustrup liest 😃 der arbeitet am liebsten mit einem einfachen Editor.

    Vom Erfinder seiner Sprache kann man schon verlangen *gg*



  • Der weiß gar nicht was im Hintergrund seiner IDE abgeht, es gibt halt viele die ihre Programme zusammenklicken ist ja auch ok. Jeder halt wie er am besten will/kann.

    @Zeus: Ja das kann man erwarten, eigentlich dürfte er auch nur mit Lynx browsen 😃 Da könnte man genauso schicken Aussagen treffen wie für Chuck Norris 😃



  • abc.w schrieb:

    SeppJ schrieb:

    ... Ich schreibe beruflich Programme die mit 4 verschiedenen Compilern(Gnu, Sun, Intel, IBM) benutzt werden, ganz ohne Probleme.

    Machst du wirklich "make -f Gnu", "make -f Sun", "make -f Intel" und "make -f IBM"?
    Respekt 👍

    Sowas kann man von einem Buildtool automatisch erledigen lassen. Oder man schreibt sich einfach nur einmalig ein Script.
    Und was die Syntax angeht: es gibt bei den aktuellen Compilern nur noch sehr wenige Inkompatibilitäten. Und diese kann man immer durch einen automatisierten Build recht schnell erkennen und beheben.



  • @SeppJ und Artchi: Ah, dann könnt ihr mir vielleicht hier weiterhelfen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-257817-and-highlight-is-.html 🙂


Anmelden zum Antworten