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 Не дают прироста скорости выполнения программ. Всё просто надежно работает.
