Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GCC - Максимальная производительность 
:(
    Опции темы
Randajad
Дата 14.6.2012, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Сабж! Тут будет клуб тех, кто не наигрался в детстве в конструкторы и теперь играет с настройками компиляторов!
Недовольных, утверждающих, что "по дефолту" производительности хватает, просьба проходить мимо.
Цель всего этого - добиться максимальной производительности от GCC.
Это позволит более эффективно использовать нашими приложениями ресурсы компьютера и увеличивать колво попугаев.
Быть может, эту темку даже закрепят. smile

Что нашел и протестировал я:
Цитата

-maccumulate-outgoing-args - заставляет GCC реже дергать указатель стека, снижает количество зависимостей(? из хелпа к этому параметру), также заставляет класть аргументы в стек при вызове функций не через push, а через mov. Хорошо влияет на производительность.
-minline-all-stringops - инлайнит все функции из string.h(memcpy, strcpy, ...) даже тогда, когда GCC не знает, эффективно это или нет. Код немного разбухает, но это также может(и делает) увеличить скорость.
-funroll-all-loops - разворачиват все циклы, что положительно сказывается на быстродействии.
-ftree-vectorize - заставляет использовать SSE для векторизации циклов, что хорошо сказывается на производительности.
-mfpmath=both - использует SSE & 387 инструкции для работы числами с запятой, GCC сам выбирает оптимальные инструкции из двух наборов. Вроде как экспериментально появилось в GCC 4.0, но программа не развалилась и работает отлично.
-mmmx - использует MMX инструкции.
-msse - SSE инструкции соотвественно, сейчас можно так компилять программы, ибо MMX & SSE поддерживаются процессорами начиная с третьего пня.
-Ofast - использует уровень оптимизаций -O3, а также другие улучшения, например --fast-math.
-momit-leaf-frame-pointer - заставляет не сохранять кадр стека в leaf функциях, таким образом уменьшает количество инструкций в них, плюс добавляется один свободный регистр для вычислений, что не так уж и мало. Минус - отладка невозможна.
-fomit-frame-pointer - то же самое, что и выше, только для обычных функций.
-flto - заставляет линкер производить глобальную оптимизацию. Это увеличивает время компиляции очень сильно, но стоит того. Выкидывает dead-code, благодаря чему размер уменьшается. Плюс gcc старается инлайнить все, что может.

Имхо стОит юзать эти флаги при компиляции релизного билда программы, который не будет ни отлаживаться, ни изменяться, и пойдет напрямую к пользователю.

Также я пробовал юзать другие параметры, более опасные, например:

Цитата

-mregparm=3 - заставляет GCC передавать 3 аргумента при вызове функции напрямую через регистры, а остальные - через стек. Должно сильно поднять производительность. Собирается с этим все, но работает только хелло-ворлд. На больших, реальных проектах, приложение крашится еще где-то в прологе компилятора, до кода пользователя не доходит. Может кто запилит багу в багрепорт GCC? Авось поправят.


Все это тестировалось на графическом движке irrlicht с его примерами.
Кстати, эти флаги нужно дублировать также и линкеру. Иначе - он проигнорирует их все и вы получите нисколько не оптимизированную экзешку.

Это сообщение отредактировал(а) Randajad - 14.6.2012, 11:58
PM MAIL   Вверх
borisbn
Дата 14.6.2012, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Randajad, а цифры где ? Насколько каждый из параметров ускоряет работу программы ? Ведь может же быть, что и в отрицательную сторону, а это, наверное, даже полезнее знать, чем какая-то опция ускоряет на 0,5 %, а такая - на 10%.

Это сообщение отредактировал(а) borisbn - 14.6.2012, 10:25


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Randajad
Дата 14.6.2012, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Цифирок нету. Бенчи проводились в условиях строжайшей секретности, результаты утеряны!
Но я на днях займусь цифирками, выложу коды и будут красявые цифирки.
PM MAIL   Вверх
EvilsInterrupt
Дата 14.6.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Randajad, А Вы CLang не смотрели?
PM MAIL WWW ICQ Jabber   Вверх
Randajad
Дата 14.6.2012, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Почти что не смотрели. С линупсами дружим плохо. Под вяндой он крайне нестабилен.
Под линупсы еще есть оптимизирующий компилятор от AMD - Open64, очень жду виндовый порт.
PM MAIL   Вверх
boostcoder
Дата 14.6.2012, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Randajad, сделай набор тестов со скриптом который позволит все это дело восспроизвести на машине пользователя(типа ">$ ./run_tests"). тогда и будет повод обсудить.

Добавлено через 1 минуту и 33 секунды
Цитата(Randajad @  14.6.2012,  11:55 Найти цитируемый пост)
есть оптимизирующий компилятор от AMD - Open64

и еще есть http://www.path64.org/

PM WWW   Вверх
borisbn
Дата 14.6.2012, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Randajad @  14.6.2012,  11:55 Найти цитируемый пост)
Под линупсы еще есть оптимизирующий компилятор от AMD - Open64

Если на то пошло, то по различным тестам Intel'увский компилятор самый быстрый. Там, правда, тоже нужно опциями играться, чтобы выставить максимальную скорость


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 14.6.2012, 13:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Randajad @  14.6.2012,  10:16 Найти цитируемый пост)
-mregparm=3 - заставляет GCC передавать 3 аргумента при вызове функции напрямую через регистры, а остальные - через стек. Должно сильно поднять производительность. Собирается с этим все, но работает только хелло-ворлд. На больших, реальных проектах, приложение крашится еще где-то в прологе компилятора, до кода пользователя не доходит.

Что бы воспользоваться этой опцией надо с ней же пересобрать все библиотеки (включая libc). Иначе будет падать
Цитата(Randajad @  14.6.2012,  10:16 Найти цитируемый пост)
Может кто запилит багу в багрепорт GCC?
Это не баг - это фича  smile 

А вообще вопрос настройки опций весьма и весьма непростой, и сильно зависит от приложения, которое собираете. У нас тут этим целый отдел (маленький правда) занимается  smile 

PM MAIL   Вверх
Randajad
Дата 14.6.2012, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Я пересобирал.
Да нет, либц не надо вроде. Хелло-ворлд то работает.

Это сообщение отредактировал(а) Randajad - 14.6.2012, 19:17
PM MAIL   Вверх
xvr
Дата 14.6.2012, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Randajad @  14.6.2012,  19:16 Найти цитируемый пост)
Да нет, либц не надо вроде. Хелло-ворлд то работает.

Надо что нибудь посерьезнее попробовать. На printf опция могла и не сказаться (это функция с переменным числом аргументов, а у них свои особенности при вызове)

PM MAIL   Вверх
Randajad
Дата 14.6.2012, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Хм. Магия. Сегодня со мной много интересных вещей приключилось. Сегодня хелло-ворлд уже не работает.
Гцц сгенерил сие чудо:

.text:004079CB                 mov     eax, offset aHelloWorld ; "hello, world!"
.text:004079D0                 call    puts

puts гордо взял из msvcrt.dll. Вследствие чего - крашик. Дллки вянды тоже пересобирать?  smile 
Неужели эта функция работает только в абстрактной машине и особенности оси ломают ее полностью? smile

Это сообщение отредактировал(а) Randajad - 14.6.2012, 21:45
PM MAIL   Вверх
xvr
Дата 15.6.2012, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Randajad @  14.6.2012,  21:44 Найти цитируемый пост)
puts гордо взял из msvcrt.dll. Вследствие чего - крашик. 

У вас судя по всему MingW - с ним этот номер не пройдет, увы  smile Попробуйте cygwin

Цитата(Randajad @  14.6.2012,  21:44 Найти цитируемый пост)
Неужели эта функция работает только в абстрактной машине

Почти - в Linux'е. В остальных портах gcc - как получится  smile 

PM MAIL   Вверх
Randajad
Дата 15.6.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Сигвин безбожно устарел. У меня сборка от boostcoder'а. smile

Добавлено через 1 минуту и 10 секунд
Ладно, не будем мучать эту бедную опцию. smile
PM MAIL   Вверх
xvr
Дата 15.6.2012, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Randajad @  15.6.2012,  11:00 Найти цитируемый пост)
Сигвин безбожно устарел.

Соберите сами, посвежее (если уж очень надо)  smile 

Цитата(Randajad @  15.6.2012,  11:00 Найти цитируемый пост)
Ладно, не будем мучать эту бедную опцию.

Ну, если не надо - не собирайте  smile 

PM MAIL   Вверх
bsa
Дата 15.6.2012, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Randajad @  14.6.2012,  22:44 Найти цитируемый пост)
Неужели эта функция работает только в абстрактной машине и особенности оси ломают ее полностью?
да! Не на совсем абстрактной, конечно... Возможно, дистрибутив Gentoo можно с такой опцией пересобрать и будет работать почти все. Кроме проприетарных программ. Это скорей для встраиваемых систем.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0732 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.