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

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск

[править] Оптимизация для x86

В Gentoo замечательно продумана система пакетов - portage. Чтобы пакеты компилировались с лучшей оптимизацией, а следовательно, работали быстрее, надо ее включить.

Откройте файл make.conf и пропишите туда следующие строчки:

CFLAGS="-O3 -mcpu=pentium4 -fomit-frame-pointer" CXXFLAGS="${CFLAGS}"

Теперь детальнее рассмотрим, что какая строчка дает.

-O3 Это оптимизация третьего порядка; получаем потери в размере, но выигрываем в скорости.

-mcpu Это оптимизация под конкретный процессор. Принимаются: i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4, prescott, nocona, k6, k6-2, 6-3, k8, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, winchip-c6, winchip2, c3.

-fomit-frame-pointer - Использование общего адресного пространства (помоему разделяемой памяти (Как показала практика реального прироста производительности не дает)) :)

Для gcc версии < 4 вместо -mcpu можно использовать -march правда при этом потеряется совместимость с другими процессорами (не указанными после ключа), например бинарник собранный -march=athlon-xp не будет работать на обычном Athlon, и код собранный с -march=i686 не запустится на классическом Pentium. Для gcc версии > 4 есть параметр -mtune=cpu_type, он (насколько я понимаю) более четко настраивает компиляцию про процессор. -mcpu и -march же там уже прописаны как устаревшие.

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

[править] Оптимизация для x86_64

для оптимизации на x86_64 AMD советуют использовать такие флаги оптимизации -ffast-math -funroll-all-loops -fpeel-loops -ftracer -funswitch-loops -funit-at-a-time

т.е в /etc/make.conf CFLAGS будет выглядить примерно так CFLAGS="-march=athlon64 -O3 -pipe -ffast-math -funroll-all-loops -fpeel-loops -ftracer -funswitch-loops -funit-at-a-time"


[править] Список безопасных CFLAGS

Безопасные и рекомендуемые CFALGS находятся по ссылке http://gentoo-wiki.com/Safe_Cflags Не дают прироста скорости выполнения программ. Всё просто надежно работает.

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