gcc VS msvc

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

  1. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Символы поотрезали при помощи strip?
    Они по умолчанию в GCC всегда пишутся даже для релизов, и нехило бинарник увеличивают.
    Например я когда сам GCC пересобирал, после отрезания символов бинарник в два раза меньше стал.

    Кстати почему у MSVC /O2 - /Ox лучше не делает?
     
  2. rat4

    rat4 Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    30
    cupuyc, посмотрел CB проект, зачем одновременно включены O, O1, O2, O3, Os? Наверное, стоит почитать документацию.

    А у GCC есть ffast-math ;)
     
  3. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    cupuyc
    Спс, давно хотелось, чтобы кто-нибудь сравнил.

    qqwe
    Это что такое?

    И, кстати, читал, что Микрософт собирает всё с опцией минимизации размера, а не увеличения скорости. Кроме того там все приблуды вроде BSC.
    А в пдб командная строка, с помощью которой делался объектник не сохраняется?
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    cupuyc

    Я в командлайн параметрах не шарю. У студии выставлены Maximize speed, Favor fast code, Enable link-time code generation, SSE2 ?
     
  5. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    rat4, честно говоря, я в gcc вообще не разбираюсь. Если Вам не сложно - укажите какие флаги лучше поставить для оптимизации по скорости.

    _DEN_, да, все флажки выставил. Сейчас следующие результаты:
    gcc 7500
    vc 10700
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    cupuyc

    Omit frame pointers?
     
  7. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    _DEN_ не сильно помогло. В пределах погрешности.
     
  8. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Может я чего не понимаю, но в командах сборки которые ты выше постил ничего из этого нет.
     
  9. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    cupuyc
    CPU Intel Core2 E8400 @ 3 GHz
    VC++ 9.0(2008) - 6060 ms (/O2 /GL)
    GCC 4.5.1 (MinGW) - 3646 ms (/O3 -fomit-frame-pointer)

    Однако...
    Нужно будет поисследовать на досуге.
    ---
    Update:
    VC++ 10.0(2010) - 3050 ms (/O2 /GL)

    Реванш :)
     
  10. rat4

    rat4 Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    30
    основные оптимизации: -O2 -fomit-frame-pointer
    экстримальная (возможна некорректная работа :)) оптимизация: -O3 -fomit-frame-pointer -ffast-math
     
  11. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Частая и меняющая все ошибка. Это не сравнение компиляторов, это сравнение связки компилятора и stl, код которого, естественно, разный.
    Для msvc могу посоветовать ключи /O2 /GS- /GR- /GF /GL /fp:fast /DNDEBUG
    Так же в обоих компиляторах можно задействовать PGO.
    Узкое место наверняка в STL, хотя код смотрел по диагонали - может это и не так.
     
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    green

    Выложи пожалуйста VS2010 сборку.
     
  13. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Посмотрел.
    semen прав - всё дело в STL, а именно в checked iterators (которые в VC++ 9.0 включены даже в Release-конфигурации, в отличие от GCC и VC++ 10.0).
    Отключение checked-итераторов в VC9 (/D_SECURE_SCL=0) ставит всё на место - код становится слегка быстрее GCC-шного.

    VC++ 10 обошёл обоих за счёт автовекторизации некоторых циклов.
     
  14. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
  15. cupuyc

    cupuyc New Member

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

    Да, видать, десятая студия всё-таки генерирует лучший код.
    Может кто-нибудь сможет добить gcc'шную сборку? Линуксоиды говорят что там всякие хитрые опции есть. Если поплясать с бубном, то можно получить лучший код.
     
  16. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    Что то я очень сомневаюсь...
     
  17. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    newbie, подождём линуксоидов.
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    green

    Ниасилил :dntknw: Динамический рантайм. У меня студия не установлена, и рантайма нет.

    Всмысле - 10-я не установлена.
     
  19. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
  20. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    rat4
    -fomit-frame-pointer входит в сет -O2. По-моему, он даже входит в сет -O1.
    cupuyc
    Плясать не надо. Надо взять мануал к используемой версии gcc и втыкать в мануал. Если много лишнего времени, то можно параллельно запустить emacs, писать код, компилировать с разными опциями оптимизации добавляя к ним -S -fverbose-asm, и разглядывать ассемблерный код на выходе. Я, к сожалению, не имею много лишнего времени последние года три. Поэтому советы мои могли устареть.
    Но я бы взял -O3 и добавил бы к нему -ftracer. Можно -ffast-math, если деления на ноль и извлечения корней из отрицательных чисел в программе не случаются или не обрабатываются. Можно ещё повтыкать в -funroll-loops и ещё один -funroll-loops (другая опция, не помню как точно называется, но тоже разворачивающая циклы). Вроде вторая не врубалась ни одним из сетов -O, да и ещё вокруг обоих были целые облака сопутствующих опций, которые могли сделать разворачивание циклов эффективнее.