HOWTO Использование CFLAGS для оптимизации собранных программ

Материал из Википедии - свободной энциклопедии.

Вернутся в раздел руководства


Это - незавершённая статья. Вы можете помочь проекту, исправив и дополнив материал (http://ru.gentoo-wiki.com/index.php?title=HOWTO_%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_CFLAGS_%D0%B4%D0%BB%D1%8F_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81%D0%BE%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC&action=edit).
Содержание

Для чего все это надо?

Стремление выжать из своего компьютера максимум производительности есть в каждом, ну почти в каждом ;-). Особенно его много в русских линуксоидах Gentoo'шниках ;) Мы попытаемся путем изменения флагов оптимизации ускорить работу приложений нашей системы. ВНИМАНИЕ Некоторые флаги могут сделать приложения нестабильными, так что нужно быть аккуратным.

Оптимизация

Переменная окружения CFLAGS

Для указания параметров оптимизации компилятору GCC, используется переменная окружения CFLAGS. Эта переменная определена в /etc/make.conf, её можно изменить двумя способами:
  • Отредактировать эту переменную в /etc/make.conf;
  • Экспортировать ее в окружение (emerge будет использовать эти параметры, но каждый раз выполнять export неудобно):
export CFLAGS='параметры оптимизации'

Уровни оптимизации

Существует несколько уровней оптимизации собираемых пакетов: от полного ее отсутствия(-O0) до уровня(-O9). В зависимости от уровня оптимизации меняется и размер получаемого бинарного файла. При -O9 размер максимален,а при -O0 -минимален. Также существует уровень -Os, который предназначен для оптимизации размера получаемого файла. Этот режим включает все опции, которые есть в режиме -O2, кроме тех которые приводят к увеличению размера файла.
ВНИМАНИЕ!!! Уровни выше -O4 заставляют компилятор максимально упрощать ассемблерный код, это может привести к тому, что некоторые программы не соберутся, а некоторые будут работать нестабильно.

Оптимизация под тип процессора

Не все процессоры одинаковы,поэтому давайте укажем компилятору на наш тип процессора.Для этого есть опции -mcpu и -march.Отличие в том,что с опцией -mcpu компилятор сделает код,который будет совместим с более младшими моделями процессора,в то время как с -march этого не происходит.Вот список возможных значений для данных опций:

  • i386
  • i486
  • i586
  • i686
  • pentium
  • pentium-mmx
  • pentiumpro
  • pentium2
  • pentium3
  • pentium4
  • prescott
  • nocona
  • k6
  • k6-2
  • k6-3
  • athlon
  • athlon-tbird
  • athlon-4
  • athlon-xp
  • athlon-mp
  • winchip-c6
  • winchip2
  • c3.

Выбор оптимальных параметров

Для этого есть очень инетересная утилита.

emerge acovea

Правда существующие профили рассчитаны только на pentium 3/4, и на gcc 3.3/3.4, Но в принципе добавить свою конфигурацию тоже не составляет труда.

После чего вызываем утилиту

runacovea -config gcc33_pentium3.acovea -bench evobench.c

Ждем несколько часов и получаем оптимальные флаги компиляции.

Возможны различные тесты, которые хранятся в каталоге /usr/share/acovea/benchmarks, И различные конфигурации платформы /usr/share/acovea/config, к которым при желании можно добавить свою.

Полезные ссылки

Личные инструменты
advertisement