Сравнение на времето за компилиране между компилатора на Windows GCC и MSVC

Работим върху намаляването на времето за компилиране в Windows и следователно обмисляме всички опции. Опитах се да потърся в Google сравнение между времето за компилиране с помощта на GCC (MinGW или Cygwin) и MSVC компилатор (CL) без никакъв късмет. Разбира се, не би било трудно да се направи сравнение, но предпочитам да избегна преоткриването на колелото, ако мога.

Някой знае ли за такова сравнение там? Или може би някой има практически опит?

Приносът е много ценен :)


person larsmoa    schedule 11.03.2010    source източник


Отговори (1)


Сравняването на компилатора не е тривиално:

  • Може да варира от процесор до процесор. GCC може да оптимизира по-добре за i7 и MSVC за Core 2 Duo или обратно. Ефективността може да бъде повлияна от кеш и т.н. (Развиване на цикли или не разгъване на цикли, това е въпросът ;) ).
  • Зависи много от това как е написан кодът. Определени идиоми (еквивалентни един на друг) могат да бъдат предпочитани от един компилатор.
  • Зависи как се използва кодът.
  • Зависи от флаговете. Например gcc -O3 често създава по-бавен код от -O2 или -Os.
  • Зависи какво предположение може да се направи за кода. Можете ли да разрешите строго псевдоним или не (-fno-strict-aliasing/-fstrict-aliasing в gcc). Имате ли нужда от пълен IEEE 754 или можете да изчислите правилата за огънат плаващ указател (-ffast-math).
  • Зависи и от конкретни разширения на процесора. Активирате ли MMX/SSE или не. Използвате ли intrinsics или не. Зависите ли, че кодът е i386 съвместим или не.
  • Коя версия на gcc? Коя версия на msvc?
  • Използвате ли някое от разширенията gcc/msvc?
  • Използвате ли микробенчмаркинг или макробенчмаркинг?

И накрая установявате, че резултатът е по-малък от статистическа грешка ;)

Дори ако се използва едно приложение, резултатът може да е неубедителен (функция A се представя по-добре в gcc, но B в msvc).

PS. Бих казал, че cygwin ще бъде най-бавен, тъй като има допълнително ниво на индиректност между POSIX и WinAPI.

person Maciej Piechotka    schedule 11.03.2010
comment
Въпросът е за времето за компилиране, а не за производителността на получения изпълним файл. - person Jitse Niesen; 26.05.2011
comment
Почти всичко от горното също се прилага, с изключение на възможно последното за измерване на скоростта на компилатора. - person Maciej Piechotka; 26.05.2011