HOWTO Использование CFLAGS для оптимизации собранных программ
Материал из Википедии - свободной энциклопедии.
- Вернутся в раздел руководства
Содержание |
Для чего все это надо?
Стремление выжать из своего компьютера максимум производительности есть в каждом, ну почти в каждом ;-). Особенно его много в русских линуксоидах 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, к которым при желании можно добавить свою.
Полезные ссылки
- Gentoo gcc flags FAQ (http://www.freehackers.org/gentoo/gccflags/faq.html)
- Intel 386 and AMD x86-64 GCC Options (http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/i386-and-x86_002d64-Options.html)