gcc VS msvc

Тема в разделе "LANGS.C", создана пользователем cupuyc, 21 янв 2011.

  1. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Здравствуйте. Тему часто поднимали, но до практических исследований так ни разу и не дошло. Собственно предлагаю на примере своего проекта сравнить 2 этих компилятора.
    Проект представляет из себя нейросетевой алгоритм. Я уже как-то его выкладывал. В аттаче сами сорцы + 2 бинарника.

    запустить обучение НС:
    gcc: .\neuro net\bin\Release\train.bat
    msvc: .\neuro net\Release\train.bat

    запустить тестирование НС:
    gcc: .\neuro net\bin\Release\calc.bat
    msvc: .\neuro net\Release\calc.bat

    GCC код работает в ~1.5 раза быстрее
    У меня MSVC 2008, gcc 4.4.1
    процессор AMD Athlon 64 x2 1.9ГГц.
     
  2. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    а нельзя ли компиляцию тоже както в батники? ато у меня мсвс в самом урезанном варианте. не открывает слоны.
     
  3. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Параметры компилятора:
    Код (Text):
    1. /O2 /Oi /GL /I ".\std" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "TIXML_USE_STL" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /TP /errorReport:prompt
    И линкера:
    Код (Text):
    1. /OUT:".\neuro net\Release\nn.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"Release\nn.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Лол, так а кто быстрее-то? :)
     
  5. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    _DEN_, хех, не сказал. GCC :)))
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    cupuyc
    у gcc есть хитрые фишки: некие предоптимизированные алгоритмы для часто встречающихся операций. Типа вместо тупого умножения больших чисел через mul алгоритмы разбитые на те же mul со всякими lea и проч.
    Было несколько примеров таких алго, но посеял, когда линь переставлял.
     
  7. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    9620 ms - VS
    6430 ms - GCC
     
  8. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Ещё интересно было бы посмотреть другие компиляторы. Кому не лень, соберите код, плиз. Думаю, проблем с компиляцией возникнуть не должно.

    cresta примечательно, что данная задачка чисто алгоритмическая. То есть мы измеряем чистое время, требуемое для вычисления заданного алгоритма, безо всяких АПИ вызовов и пр. Мне кажется, что gcc лучше умеет работать с float point числами.
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    То, что я пробовал, флоатов не было. Сделал простенький файлик на сях, хотел попробовать, как gdb работает. Скормил отладчику, а в дизассемблере увидел вообще близко непохожее на традиционный подход. Какой-то стандартный пример вписал в исходник. А gcc замутил там такой красивый код, причём по собственной инициативе воткнул туда таблицы. Я его после этого сильно зауважал :) Под виндой vc просто тупо повторил содержимое исходника. Разница во времени была раза в два где-то.
    Возможно для флоатов тоже какие-то фишки есть.
     
  10. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    на ваших мсвс флагах и атлоне хп 1.6ггц

    мсвс ~ 8.5ms
    гцц ~10.2ms

    только собрался у меня файлик в мсвс чуток поплотнее. 64кб против 77.5кб. можно и еще попробовать флагами порулить. возможно, не лучший вариант.

    и чего гцц-шый такой толстый? там большой трой сидит?
     
  11. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    а вот ваша мсвс сборка, да, медленнее гцц раза в 1.5. думается, что это все изза мс секурити инициатив. в частнсти, изза анти буферо переполнительных манипуляций на каждом вызове
     
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    neuro net\bin\Release>nn /train nn_configuration.xml - 3875 ms
    neuro net\Release>nn /train nn_configuration.xml - 5016 ms

    Кто из них кто?
     
  13. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    убрал buffer check security - результаты те же.

    gcc 7800мс
    vc 11700мс
     
  14. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    _DEN_
    gcc: neuro net\bin\Release>nn /train nn_configuration.xml - 3875 ms
    msvc: neuro net\Release>nn /train nn_configuration.xml - 5016 ms

    быстрый у вас комп. у меня ноут значительно медленнее.

    хз. сам не пойму.
    в чём разница?
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    cupuyc
    оно так просто не убирается, тк прошито во всех рантайм либах. посмотрите в дизасме

    моя сборка на ваших флагах в аттаче
     
  16. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    cupuyc
    маленькая хитрость. тут стоит мсвс 2003. тогда мс паранойя еще не накрыла с головой.
    как отключить на 2008 и выше болезненные манипуляции - не помню

    зато могу попробывать попробывать скомпилить это завтра на овС (ов поддерживает не самый последний стандарт)
     
  17. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Хех.. у VC есть такой параметр

    Floating point model: Fast (/fp:fast)
    Даёт небольшой прирост.

    С/С++ -> Code Generation -> Buffer Security Check = No Не то?
     
  18. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Надо бы гсс обновить. Хз как эти танцы с бубном делаются.
     
  19. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    cupuyc
    не знаю. я не пользуюсь иде для компиления
    во всяком случае, рантаймы уже скомпилены и флаги на них не влияют

    когдато я пробовал добиться от 2008 плотности/скорости кода предыдущих и результата, вроде, внятного не получилось. потому держу себе кроме 2008 еще и 2003.

    а вам скорость нужна?
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    qqwe
    У меня был нехилый прирост при перекомпиляции с 2003 на 2005.

    А вообще всё это на тоненького, оптимизаций дохрена. Версии, PGO, графиты и прочее могут очень сильно влиять.