Performance GNU vs MS Compiler



  • Hallo,

    ich lese hier immer das der Microsoft Compiler in den VisualStudios deutlich schneller ist als der von GNU. Was ist da dran? Stimmt es wirklich das er deutlich schneller ist, oder ist das einfach nur getrollt und kann damit nicht ernst genommen werden? Ich z.B. verstehe unter deutlich schneller schon so einen Geschwindigkeitsunterschied von 200% von MS zu GNU.



  • Da scheint schon was dran zu sein, denn ich habe mal in einem Buch gelesen, dass der GNU-Compiler als "Resourcenfresser" bezeichnet wurde. Allerdings ist es jetzt nicht so schlimm das du Jahre länger warten müsstest bis dein Programm compiliert wurde.



  • Der GNU Compiler ist halt auf Linux ausgelegt, der MS Compiler für Windows. Daher kommen diese deutlichen Geschwindigkeitsunterschiede. Daher kannst du den GNU Compiler auch nicht mit den MS Compiler vergleichen.



  • Ok verstehe, und wie macht sich das bemerkbar? Wenn ich jetzt z.B ein Programm mit wxWidgets schreibe welches irgendwelche Filter auf Grafiken anwendet, wie und wo kann denn da MS schneller sein? Kann er C++ besser optimieren?



  • Ja, er kann besser für Windows optimieren.



  • 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.


Log in to reply