[SOLVED] -ffast-math не компилится sqlite [РЕШЕНО]
Запустил acovea и она мне сказала что при -03 в моей системе значительную оптимизацию по скорости даст флаг компилятора -ffast-math. ну я и прописал его в make.conf, хотя подозревал что флаг специфичный. emerge -e system пересобрался замечательно за пол-суток ))) а вот emerge -e world встает на 20 пакете (sqlite) и пишет вполне ожидаемое: "SQLite will not work correctly with the -ffast-math option of GCC".
Вот и нарисовался вопрос: как сказать при пересборке мира (или вообще общесистемно) чтоб некоторые пакеты не компилились с определенными флагами компилятора. Для USE флагов я знаю где, а есть ли такое для флагов компилятора? И если так нельзя, то как бы применить флаг -ffast-math к большинству пакетов в системе, не вписывая в make.conf
Короче говоря у меня старый пень и я хочу ускориться )) Хочу пересобрать систему с -ffast-math, как бы это сделать, учтя неприятия некоторыми программами этого флага.
- Для комментирования войдите или зарегистрируйтесь
в файле /etc/portage/bashrc
в файле /etc/portage/bashrc пропишите для конкретного пакета свои флаги оптимизации, у меня вот так это выглядит:
if [[ "$CATEGORY/${PN}" = "dev-db/sqlite" ]]; then
export CFLAGS="-O3 -march=athlon-xp -fvariable-expansion-in-unroller -fprefetch-loop-arrays -ftracer -funsafe-math-optimizations -fstrength-reduce -frerun-loop-opt -mieee-fp -pipe"
export CXXFLAGS={"$CFLAGS"}
fi
, да и пакет perl тоже лучше без -ffast-math собирать, он не ругается на такой флаг, но работает некорректно))
Спасибо за быстрый ответ. Не
Спасибо за быстрый ответ. Не думал что переменные среды влияют на работу portage, надо будет уделить этому внимание, это же целое поле для администрирования ))). В манах как то редко вижу переменные среды, может про них в конце пишут? Сейчас попробую.
возможно, еще както можно это
возможно, еще както можно это сделать - не через переменные среды, я с дженту знаком месяц, и сделал первое, что вычитал в инете))
Самый нормальный спсоб -
Самый нормальный спсоб - прописать в /etc/portage/env/dev-db/sqlite
Вроде нет такого переключателя чтобы отменить -ffast-math (-fnofast-math)
Так что добавить легче
CFLAGS="${CFLAGS} -ffast-math"
чем убрать. Пропишите туда свои флаги.
Идеально!
Спасибо!
рекомендую забить на acovea и
рекомендую забить на acovea и юзать нормальные флаги
-ffast-math тебе добавит немеренное количество багов в системе
если gcc новый юзай что то типа
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
mtune
Вроде бы уже решили недавно, что
если указан -march, -mtune включается и без явного указания.
У меня сейчас произошло
У меня сейчас произошло следующее:
Добавил нужные строчки в ~/.bashrc и при компиляции все равно использовались все флаги. Когда я понял что .bashrc не используется (такое бывает), я прописал . ~/.bashrc в /etc/profile и при логине получил endless loop, так как не заметил что в конце .bashrc была строчка . /etc/profile. Получается при логине используется /etc/profile но не используется .bashrc, что как то неправильно (но я такое уже встречал), просто в самих комментах .bashrc написано что он выполняется всегда при любом интерактивном логине в оболочку. Это я так обновился, что луп получил, или это часто так в Генту. (в других системах я хотя бы луп не получал)
to alexxy: компилятор - 4.3.2-r3, я всех этих флагов не знаю, где можно почитать про них, чтоб осмысленно писать что то? Еще есть пара программ на компе, которые жрут много оперативы и проца, вот их и их зависимости бы вообще по максимуму оптимизировать, пусть даже нестабильно работать будут. Везде пишут просто, что ставьте -о3 и хватит с вас, не вижу нормальной информации по флагам. -mtune не знаю такого.
еще оч хорошо прибавляет к
еще оч хорошо прибавляет к скорости флаг -fschedule-insns, но на 32 системах он часто выдает ошибку компиляции) я думал вручную ставить флаги тем пакетам, которые с ним не компилируются, но когда их набралось около 15ти, забил на него)), но всегда можно попробовать какойто пакет откомпилить с ней)
Sunny написал(а): еще оч
В GCC 4.4.4 он по умолчанию есть в -O2
Что то не действует способ от
Что то не действует способ от Sunny, видимо не хватает у переменных окружения приоритета. Где то я его менял давно на заре этой системы hна моем шлюзе на главенство make.conf. Способ же от alexxy повидимому действует (вот идет компиляция пакета и там нет -ffast-math).
Ткните, пожалуйста, ссылками на "тонкую работу с portage и флагами компилятора" а то в хэндбуке и gentoo wiki нет ничего.
*поужинав*
Нашел кучу информации по флагам. Буду пробовать.
Вобщем emerge -e world прошел стадию сборки sqlite. Проблема решена.
Все, скомпилил все с
Все, скомпилил все с -ffast-math'ом и вижу ощутимый прирост в производительности. Юзаю целый день и все стабильно пока. Вот теперь я вижу что Генту действительно самый быстрый дистр из некастрированных. Мой шлюз теперь работает как надо! (Правда с опенбоксом, и хоть большего и не надо, но надо бы попробовать гном-лайт чтоли...)
В предыдущем посте я говорил что нашел инфу по флагам gcc, дак вот почитав инфу наткнулся на такие вопросы :
Сначала о -mfpmath=sse -mmmx. Я использую -march=pentium3 и CHOST="i686-pc-linux-gnu" - надо ли включать флаги -mmmx и -msse если явно указана архитектура проца. Везде в гугле разное мнение. Насчет -mfpmath=sse тоже неясно, сильно ли повлияет на скорость и нужен ли при указанной строго архитектуре, и еще пишут что если указан флаг -msse то он бесполезен без -mfpmath=sse, типа -mfpmath=sse указывает чем обрабатывать floating poiny operations ,а -msse включает этот самый sse.
Еще вопрос : кто использовал icc хотя бы для нескольких (к примеру самых тяжелых) приложений, как впечатления. Стоит заморачиваться?
PS Как к названию темы solved приписать?
..
отредактировать свой первый пост, у тебя в самом верху страницы должна быть вкладка "изменить"
раньше указывал -msse
раньше указывал -msse -mfpmath=sse, но прочитал, что задание типа процессора поддерживающего sse, включает этот флаг, насчет -mfpmath=sse аковея во всех задачах указывает, что этот флаг привносит отрицательный вклад в производительность, я его убрал у себя. насчет icc - он оптимизирован под интел платформу, а Gcc - кроссплатформенный, потому первый всегда будет собирать быстрее код, он поставляется с прекомпилированными математическими библиотеками, а там где они используется прирост будет 30 и больше процентов.