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.
Pytanie dotyczy czasów kompilacji, a nie wydajności uzyskanego pliku wykonywalnego. –
Prawie wszystkie powyższe mają również zastosowanie, z wyjątkiem prawdopodobnie ostatniego pomiaru prędkości kompilatora. –
Jakiś powód do przegłosowania? –