Kompilierzeitvergleich zwischen Windows GCC und MSVC Compiler

9

Wir arbeiten daran, die Kompilierzeiten unter Windows zu reduzieren und berücksichtigen daher alle Möglichkeiten. Ich habe versucht, auf Google für einen Vergleich zwischen Kompilierzeit mit GCC (MinGW oder Cygwin) und MSVC-Compiler (CL) ohne Glück zu suchen. Natürlich wäre ein Vergleich nicht zu schwierig, aber ich würde lieber vermeiden, das Rad neu zu erfinden, wenn ich kann.

Kennt jemand einen solchen Vergleich da draußen? Oder hat vielleicht jemand eine praktische Erfahrung?

Eingabe sehr geschätzt:)

    
larsmoa 11.03.2010, 16:53
quelle

1 Antwort

4

Compiler zu vergleichen ist nicht trivial:

  • Es kann von Prozessor zu Prozessor variieren. GCC optimiert möglicherweise besser für i7 und MSVC für Core 2 Duo oder umgekehrt. Die Leistung kann durch den Cache usw. beeinflusst werden (Schleifen auflösen oder Loops nicht abwickeln, das ist die Frage;)).
  • Es hängt sehr stark davon ab, wie Code geschrieben wird. Bestimmte Idiome (die einander entsprechen) können von einem Compiler bevorzugt werden.
  • Es hängt davon ab, wie der Code verwendet wird.
  • Es kommt auf Flaggen an. Zum Beispiel erzeugt gcc -O3 oft langsameren Code als -O2 oder -Os .
  • Es hängt davon ab, welche Annahme über den Code gemacht werden kann. Können Sie striktes Aliasing oder Nein zulassen ( -fno-strict-aliasing / -fstrict-aliasing in gcc). Benötigen Sie den vollen IEEE 754 oder können Sie die Berechnungsregeln für Floating Pointer verbiegen ( -ffast-math ).
  • Es hängt auch von bestimmten Prozessorerweiterungen ab. Aktivieren Sie MMX / SSE oder nicht. Verwenden Sie intrinsic oder nein? Sind Sie davon abhängig, dass der Code i386 kompatibel ist oder nicht?
  • Welche Version von gcc? Welche Version von msvc?
  • Verwenden Sie eine der gcc / msvc-Erweiterungen?
  • Verwenden Sie Microbenchmarking oder Makrobenchmarking?

Und am Ende finden Sie heraus, dass das Ergebnis weniger als ein statistischer Fehler war;)

Selbst wenn die einzelne Anwendung verwendet wird, kann das Ergebnis nicht eindeutig sein (Funktion A besser in gcc, aber B in msvc).

PS. Ich würde sagen, dass Cygwin am langsamsten sein wird, da es eine zusätzliche Umleitungsebene zwischen POSIX und WinAPI hat.

    
Maciej Piechotka 11.03.2010 17:11
quelle