2010-03-11 9 views
9

Pracujemy nad skróceniem czasów kompilacji w systemie Windows i dlatego rozważamy wszystkie opcje. Próbowałem szukać w Google porównania czasu kompilacji przy użyciu GCC (MinGW lub Cygwin) i kompilatora MSVC (CL) bez powodzenia. Oczywiście porównywanie nie byłoby trudne, ale wolałbym uniknąć ponownego odkrywania koła, jeśli mogę.Porównanie czasu kompilacji między kompilatorem Windows GCC a kompilatorem MSVC

Czy ktoś wie o takim porównaniu tam? A może ktoś ma jakieś praktyczne doświadczenie?

Wejście mile widziane :)

Odpowiedz

4

Porównując kompilator nie jest trywialne:

  • To może się różnić od procesora do procesora. GCC może lepiej zoptymalizować dla i7 i MSVC dla Core 2 Duo lub odwrotnie. Wydajność może zależeć od pamięci podręcznej itp. (Rozwiń pętle lub nie rozwijaj pętli, to jest pytanie;)).
  • To zależy w dużym stopniu od tego, jak napisano kod. Niektóre idiomy (równoważne sobie) mogą być preferowane przez jeden kompilator.
  • To zależy od sposobu użycia kodu.
  • Zależy od flag. Na przykład wiadomo, że gcc -O3 często wytwarza wolniejszy kod niż -O2 lub -Os.
  • To zależy od tego, jakie założenie można zrobić o kodzie. Czy możesz zezwolić na ścisłe aliasowanie lub nie (-fno-strict-aliasing/-fstrict-aliasing w gcc). Czy potrzebujesz pełnego IEEE 754 lub czy możesz zginać reguły obliczeń zmiennoprzecinkowych (-ffast-math).
  • Zależy to również od poszczególnych rozszerzeń procesorów. Czy włączasz MMX/SSE, czy nie. Czy używasz intrinetyki, czy nie. Czy jesteś zależny, czy kod jest kompatybilny z i386 czy nie?
  • Która wersja gcc? Która wersja msvc?
  • Czy używasz dowolnego rozszerzenia gcc/msvc?
  • Czy używasz mikro-oznaczania lub makrobenków?

A na końcu okazuje się, że wynik był mniej niż błędu statystycznego;)

Nawet jeśli jedna aplikacja służy wynik może być niejednoznaczne (Funkcja A lepiej w gcc ale B w MSVC).

PS. Powiedziałbym, że cygwin będzie najwolniejszy, ponieważ ma dodatkowy poziom pośredni między POSIX i WinAPI.

+0

Pytanie dotyczy czasów kompilacji, a nie wydajności uzyskanego pliku wykonywalnego. –

+0

Prawie wszystkie powyższe mają również zastosowanie, z wyjątkiem prawdopodobnie ostatniego pomiaru prędkości kompilatora. –

+0

Jakiś powód do przegłosowania? –

Powiązane problemy