Здравствуйте. Тему часто поднимали, но до практических исследований так ни разу и не дошло. Собственно предлагаю на примере своего проекта сравнить 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ГГц.
а нельзя ли компиляцию тоже както в батники? ато у меня мсвс в самом урезанном варианте. не открывает слоны.
Параметры компилятора: Код (Text): /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): /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
cupuyc у gcc есть хитрые фишки: некие предоптимизированные алгоритмы для часто встречающихся операций. Типа вместо тупого умножения больших чисел через mul алгоритмы разбитые на те же mul со всякими lea и проч. Было несколько примеров таких алго, но посеял, когда линь переставлял.
Ещё интересно было бы посмотреть другие компиляторы. Кому не лень, соберите код, плиз. Думаю, проблем с компиляцией возникнуть не должно. cresta примечательно, что данная задачка чисто алгоритмическая. То есть мы измеряем чистое время, требуемое для вычисления заданного алгоритма, безо всяких АПИ вызовов и пр. Мне кажется, что gcc лучше умеет работать с float point числами.
То, что я пробовал, флоатов не было. Сделал простенький файлик на сях, хотел попробовать, как gdb работает. Скормил отладчику, а в дизассемблере увидел вообще близко непохожее на традиционный подход. Какой-то стандартный пример вписал в исходник. А gcc замутил там такой красивый код, причём по собственной инициативе воткнул туда таблицы. Я его после этого сильно зауважал Под виндой vc просто тупо повторил содержимое исходника. Разница во времени была раза в два где-то. Возможно для флоатов тоже какие-то фишки есть.
на ваших мсвс флагах и атлоне хп 1.6ггц мсвс ~ 8.5ms гцц ~10.2ms только собрался у меня файлик в мсвс чуток поплотнее. 64кб против 77.5кб. можно и еще попробовать флагами порулить. возможно, не лучший вариант. и чего гцц-шый такой толстый? там большой трой сидит?
а вот ваша мсвс сборка, да, медленнее гцц раза в 1.5. думается, что это все изза мс секурити инициатив. в частнсти, изза анти буферо переполнительных манипуляций на каждом вызове
neuro net\bin\Release>nn /train nn_configuration.xml - 3875 ms neuro net\Release>nn /train nn_configuration.xml - 5016 ms Кто из них кто?
_DEN_ gcc: neuro net\bin\Release>nn /train nn_configuration.xml - 3875 ms msvc: neuro net\Release>nn /train nn_configuration.xml - 5016 ms быстрый у вас комп. у меня ноут значительно медленнее. хз. сам не пойму. в чём разница?
cupuyc оно так просто не убирается, тк прошито во всех рантайм либах. посмотрите в дизасме моя сборка на ваших флагах в аттаче
cupuyc маленькая хитрость. тут стоит мсвс 2003. тогда мс паранойя еще не накрыла с головой. как отключить на 2008 и выше болезненные манипуляции - не помню зато могу попробывать попробывать скомпилить это завтра на овС (ов поддерживает не самый последний стандарт)
Хех.. у VC есть такой параметр Floating point model: Fast (/fp:fast) Даёт небольшой прирост. С/С++ -> Code Generation -> Buffer Security Check = No Не то?
cupuyc не знаю. я не пользуюсь иде для компиления во всяком случае, рантаймы уже скомпилены и флаги на них не влияют когдато я пробовал добиться от 2008 плотности/скорости кода предыдущих и результата, вроде, внятного не получилось. потому держу себе кроме 2008 еще и 2003. а вам скорость нужна?
qqwe У меня был нехилый прирост при перекомпиляции с 2003 на 2005. А вообще всё это на тоненького, оптимизаций дохрена. Версии, PGO, графиты и прочее могут очень сильно влиять.