# Оптимизация бинарников

## nerff

Доброго времени суток!

Задался я ускорением работы домашней машинки и решил поиграться с компилятором, дабы выжать все, что только возможно. (Когда все нормально работает - русский человек начинает оптимизировать все, что только можно - это наверное на уровне генокода)

При флагах:

CFLAGS="-march=pentium4 -Os -fforce-addr -pipe -ffast-math -mfpmath=sse -mmmx -msse -msse2 -fomit-frame-pointer" наблюдается ощутимое ускорение работы.

При -march=prescott откомпилированное ядро периодически теряет /dev/null  :Sad: 

(cat /proc/cpuinfo не показывает sse3 - надо архитектуру почитать наверное) 

При -mfpmath=sse,387 многие вещи не компилируются вообще

При O3 - ускорение настолько незначительно, что о нем можно забыть

Машинка пентиум4-3000, 1024 памяти, gcc 3.3.5

Вопрос следующий - кто пытался (и успешно) заниматься чем-то подобным?

Что помогло? Что дает ускорение работы в плане оптимизации бинарников, а не скажем отключения сервисов и параллельного старта, etc?

----------

## viy

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

И в продолжении: чем ты занимаешся по большей части на своей домашней машине? Будет ли иметь смысл такая оптимизация для большинства пикладух, что ты используешь?

----------

## hermes_jr

 *nerff wrote:*   

> 
> 
> При -march=prescott откомпилированное ядро периодически теряет /dev/null 
> 
> (cat /proc/cpuinfo не показывает sse3 - надо архитектуру почитать наверное) 
> ...

 

Вот кстати меня тоже этот вопрос интересует. На iXBT написано что прескоты набор инструкций sse3 поддерживают, я особо не вчитывался, но ничего типа "не все йогурты одинаково полезны" (не все прескоты поддерживают sse3) не нашёл. А если вдруг это так и есть, то -march=prescott получается только вредит  :Confused: 

Вощим если найдёшь инфу, поделись пжалста  :Wink: 

----------

## WI

Прежде чем выставлять флаги оптимизации, и тратить время на компиляцию

неплохо было бы ознакомиться с  воздействием оных на результат. 

Помогает man gcc но при соответсвующем знании английского. Русского описания на gcc не встречал (возможно искал плохо  :Smile: 

----------

## cerebrum

да фсё нормалёк с prescott-ами!!! У меня селерончик в 2.4 - на 2004.3+2005.0 - собирал со stage1 немного поигравшись с ebuilds добился чтоб компилер стал 3.4.2...

---------------------------------------------

CFLAGS="-O3 -march=prescott -mtune=prescott -mmmx -msse -msse2 -msse3 -ffast-math -fomit-frame-pointer -pipe"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

MAKEOPTS="-j2"

--------------------------------------------

И ОФИГЕННО ФСЁ РАБОТАЕТ!!!

----------

## nerff

На самом деле мне это надо - не в том дело, что на домашней машинке работает что-то критичнее squid'a, а в том, что на ней обкатываются проекты систем для клиентов. Это попытка найти баланс между надежностью работы и скоростью.

Единственная инструкция, реально ускоряющая работу программ на моей машине это -mfpmath=sse. Причем это заметно на глаз - раза в 1.5. Я не имею желания заниматься копеечными вещами в 0.3% и запускать бенчмарки когда не могу отличить сам в какую сторону понесло систему.

Я собственно и спрашивал о таких вещах - что реально ускоряет систему и это можно различить невооруженным глазом? Кто использует например W etc?

Вообще, я читал gcc.gnu.org, в бытность студентомами писали простенькие компиляторы, но тут я считаю просто необходимо спросить у общественности

----------

## YD

 *cerebrum wrote:*   

> 
> 
> CFLAGS="-O3 -march=prescott -mtune=prescott -mmmx -msse -msse2 -msse3 -ffast-math -fomit-frame-pointer -pipe"
> 
> 

 

Зачем? -march=prescott подразумевает эти флаги. На работе на P4 2.8E стоит с -O2 и некоторыми опциями из -O3. Проблем не возникает (были, но то было связано с битым RAM).

----------

## nerff

 *Quote:*   

> Прежде чем выставлять флаги оптимизации, и тратить время на компиляцию
> 
> неплохо было бы ознакомиться с воздействием оных на результат.
> 
> Помогает man gcc но при соответсвующем знании английского. Русского описания на gcc не встречал (возможно искал плохо 

 

Это не Window$ -  у меня есть дурацкая привычка переставлять сервера посреди рабочего дня по ssh - никто еще ничего не заметил за 2 года. Так что тратить время на компиляцию - я не трачу, все идет параллельно или в фоне. Не надо думать, что я сижу и 4 часа тупо гляжу на бегущий вывод компилятора.

С воздействием на результат (теоретически, с помощью man gcc и gcc.gnu.org) ознакомлен. Теория не всегда подтверждается практикой, поэтому попросил уважаемую общественность поделиться практическими выводами. Например про -mfpmath=sse,387, который "теоретически" должен ускорять работу я написал в начале треда.

Соответствующее знание английского имеется, я его изучал вторым языком. Первым - разговорную латынь.

Надеюсь, я ответил на все вопросы. Прошу прощения, если что не так.

----------

## chiko

Напишите плиз что изменилось настолько, что видно невооруженным взглядом? Апач с РНР быстрее генерит странички? MySQL шустрее делает серию селектов? Иксы грузятся на n сек. реще?

ЧТО собственно так радует?

----------

## ManJak

Да, сорри за оффтоп (хотя, не совсем оффтоп, т.к. это тоже к оптимизации), но может кто поделится, есть ли смысл врубать nptl?

Точнее, вопрос даже не в этом, а в:

1) много-ли глюков наловишь с него и несовместимостей?

2) виден ли реальный прирост? (по идее, должен быть)

----------

## bukazoid

hi ALL

app-benchmarks/acovea

пробовали ?

и что показует ?

----------

## YD

 *ManJak wrote:*   

> Да, сорри за оффтоп (хотя, не совсем оффтоп, т.к. это тоже к оптимизации), но может кто поделится, есть ли смысл врубать nptl?
> 
> Точнее, вопрос даже не в этом, а в:
> 
> 1) много-ли глюков наловишь с него и несовместимостей?
> ...

 

Вот ниразу не сталкивался с проблемами из-за nptl. По скорости значительно быстрее fork'a (где-то видел сравнительные тесты). Поставил апаче с  mpm-worker (~x86). Стабильно пашет. Вообще использую nptlonly.

----------

## WI

 *nerff wrote:*   

> 
> 
> Это не Window$ -  у меня есть дурацкая привычка переставлять сервера посреди рабочего дня по ssh - никто еще ничего не заметил за 2 года. 

 

Вредная привычка, однако. Вам здорово везет  :Smile:  .  

По поводу сабжа http://gazette.linux.ru.net/lg88/piszcz.html - интересный опыт с ядром. Автор пытался выяснить влияние флагов. 

Из собственных наблюдений:

Реально (видно на глаз) производительность поднимается за счет заточки под камень, практически на всех приложениях. Оптимизация операций с плавающей точкой (типа  -msse ) - мало  влияет на скорость строковых операций, а  утилиты кодирования видео стали у меня шевелиться заметно шустрей.  В общем и целом опции действительно работают так как писано в мане, просто в некоторых случаях они излишни, а иногда даже дают обратный эффект. Авторы многих приложений в доках указывают какие флаги оптимизации стоит включить для получения лучших показателей, а какие включать крайне нежелательно. Некоторые инсталляторы забивают на практически на все флаги и точат так как автор прописал.

Очень сильно помогает "облегчение" приложения. Большинство написаны так что при выкидывании ненужной фичи снимается куча ненужных проверок.  После жесткой правки ебилда (выкинул всякую ерунду и поставил то что надо) мой апач на глаз шустрее стал бегать (реально измерить теперь невозможно, но жалоб больше нет) .

<имхо>

Получить "золотой" набор оптимизирующих флагов на все случаи жизни практически невозможно.

Выжать 90% от максимума производительности позволяют два (три ?) всем известных флага. 

Трата времени - это поиск оставшихся 10% там, где это не критично, а там где это критично - пора покупать новую железку  :Smile: 

</имхо>

ЗЫ

Ни в коей мере не хотелось поставить под сомнение личные качества nerff, 

Приношу извинения за предоставленную мной возможность так подумать  :Smile: 

----------

## ManJak

 *WI wrote:*   

>  *nerff wrote:*   
> 
> Это не Window$ -  у меня есть дурацкая привычка переставлять сервера посреди рабочего дня по ssh - никто еще ничего не заметил за 2 года.  
> 
> Вредная привычка, однако. Вам здорово везет  .  
> ...

 

RESPECT!!!

ИМХО, тоже весьма рискованный выбор (еще посреди дня), хотя автор не уточнил какого  :Smile: 

24 часа в сутках  & 12 часовых поясов & 8 часов рабочего дня = +/-  :Idea: 

----------

## WI

Кому это еще интересно, утилита автоподбора оптимальных флагов описана здесь :

http://ru.gentoo-wiki.com/HOWTO_Использование_CFLAGS_для_оптимизации_собранных_программ

В силу вышесказанного лично я сомневаюсь в ее необходимости.

----------

## iTux_Tux

Поможите люди добрые  :Smile: 

Ставлю с первого стэйджа, на athlon xp 2700+/512MB DDR-333/60GB Винт...

Какие флаги ставить, чтобы НЕ ГЛЮЧИЛО и ЛЕТАЛО???

Спасибо за ранее...

----------

