Господа, УРА!! Теперь в новой версии gcc опцией "-fprofile-dir" можно задавать путь для сбора статистики и последующего её использования, и это работает!!! :) Пробовал компиллировать libvorbis и vorbis-tools - ускорение ощутимое! :) На Atllon64 3000+ скорость кодирования из flac'а 19-20x получается, т.е. +10% к моей тотальной оптимизации без использования профилей :) И это без пересборки мира! :)
Проблемы начались при пересборки мира, portage упал :( но видимо не из-за профилей... до этого делал зачистку системы, возможно там накасячил... поставлю gentoo заново, там посмотрим...
Предлагаю в этой теме отписываться, у кого что получилось или наоборот закосячилось с использованием профилей.
Я. честно говоря, не очень
Я. честно говоря, не очень понял, как это работает... Оно вроде должно запустится как минимум раз, чтобы записать эту информацию, да и для каждого сырца свой каталог надо хранить...
как заставить работать
как заставить работать профилирование на стабильной версии компилятора, где нет еще ключа -fprofile-dir? у меня для всех файлов на 2ом этапе компиляции вылетает предупреждение:
note: file unix_.gcda not found, execution counts estimated,
В gcc добавили метод меряться
В gcc добавили метод меряться оптимизацией, на сколько я понял? Специально для гентушников)))
Или это как-то влияет на скорость выполнения получившегося кода?
Поискал инфу, оказывается
Поискал инфу, оказывается следующее, gcc сначала компилирует "некй кусок" кода, потом запускает и смотрит, как он работает, и основываясь на этом еще раз компилирует...
Вообщем, надо будет поковыряться.... :)
Sprit написал(а):Поискал
Вобщем всё именно так и прирост производительности колоссальный :)
Здесь многое объясняется, просто раньше было проблеммно складывать эту статистику в нужном месте. Теперь же, начиная с gcc версии 4.4.0, появился флаг
, который решает сразу множество проблем :)
В общем виде метод использования компилляции с обратной связью обстоит так:
1. Добавляем к исходным CFLAGS параметры -fprofile-dir=<дирректория для сбора статистики> и -fprofile-generate
2. Некоторое время используем программы, скомпиллированные с новыми флагами. Сброс статистики в дирректорию происходит на этапе выполнения исполняемого кода.
3. Добавляем к исходным CFLAGS параметры -fprofile-dir=<дирректория для сбора статистики> и -fprofile-use, сново компиллируем и наслаждаемся гиперскоростью исполнения бинарного кода на вашем процессоре ;)
а за счет чего такой
а за счет чего такой колоссальный прирост?
а gcc сам над собой такую работу делает? а то компилиться уж больно долго :)
скрытный секс :)
http://www.insidepro.com/kk/2
http://www.insidepro.com/kk/231/231r.shtml здесь интересная инфа про профили и как они работают. Сам себя gcc должен профилировать... пока не знаю, надо попробовать в ближайшее время, но gcc при сборке себя фильтрует флаги, например -O3 меняет на -O2.
Хм... интересно :) А если
Хм... интересно :) А если компилить ядро в купе с модулями, потом какое-то время работать и снова компилить, то эффект тот же?
ОООоооуу, ядерная тема -
ОООоооуу, ядерная тема - вообще отдельный разговор, ведь во время исполнения программы сбрасывается статистика, а куда она будет сбрасываться, когда ещё ФС не примонтирована при загрузке ядра???... В инете много информации на тему оптимизации ядра (ссылки не подкину пока), и говорит она о том, что это дьявольски-шаманское занятие в том плане, что стабильно заставить оптимизированное ядро работать - дело нетривиальное,... а тут ещё профили гм... но попробовать конечно стоит :D
думаю, что не стоит пока
думаю, что не стоит пока особо набрасываться на gcc:4.4 и использовать только для конкретных приложений... собрал я gcc:4.4, установил его как основной и пересобрал мир - сутки потратил, чтобы привести систему к рабочему состоянию... помог только откат к gcc:4.3
Тоже верно... Попробую
Тоже верно...
Попробую сегодня в дебианчике поиграться с этой вишкой apt-build'ом... ведь на самом деле смысл всего несколько пакетов собрать... Qt например, KDE и кодеки...
У меня проблема сейчас
У меня проблема сейчас обратная, ессли выбирать gcc:4.3 многое уже не работает.
Хотя есть пакеты которые 4.4 пока не собирает.
- - -
Тема интересная - отмечусь тут что бы следить...
Заодно про gcc-4.4 скажу - я особых проблем не встретил - весь мир собран (1330 портежей), на трех машинах, с gcc-4.4 - все нормально работает.
.
Просьба указывать, какие именно пакеты не собрались gcc-4.4 или плохо себя вели после установки.
А то без указания как-то плохо верится.
Это подпись, которую невозможно истолковать неправильно
Expat не собирался
Expat у меня не собирался. Ошибку щас не могу привести, но что-то с ld связано. И Python-3.1.1 тоже.
В связи с этим вопрос. Во Фре есть возможность задать в /etc/make.conf разные опции, в том числе и опции компилятора, для конкретного порта, типа того:
.if ${.CURDIR} == ${PORTSDIR}/editors/vim-lite FETCH_CMD=/usr/local/bin/wget -v -t 3 -c NO_CHECKSUM=yes .endifЕсть ли такая фича в Генту? В доках ничего похожего не нашел.
- - -
Присоединяюсь к вопросу.
Тоже во FreeBSD активно использовал эту возможность - задавал персональные GCC и CFLAGS для портов.
.
http://bugs.gentoo.org/show_bug.cgi?id=111458
http://bugs.gentoo.org/show_bug.cgi?id=60891
http://bugs.gentoo.org/show_bug.cgi?id=44796
c 2004 года все хотят
http://sergiosdj.wordpress.com/2008/06/24/how-to-personalize-a-packages-cflags-in-gentoo/
http://iquark.wordpress.com/2008/10/23/gentoo-per-package-flags/
см также http://forums.gentoo.org/viewtopic.php?t=280748
я, со своей стороны, искал, где это могло бы быть полезно (не абстрактно, а конкретные пакеты - конкретные флаги), и бросил; приведённый Poor Fred пример с особенным фетчем и отключением проверки не впечатляет.
http://www.gentoo.org/proj/en/qa/asneeded.xml читал.
Это подпись, которую невозможно истолковать неправильно
.
Да я и не для того писал, чтоб все охренели. А как образец, что во Фре это таки возможно. И в Генту тоже хочется, т.к. один на 5-10 пакетов с этими волшебными флагами не собирается.
А лазить каждый раз в make.conf утомительно. Вот тебе и практическая польза.
А вот это выглядит интересно. Надо попробовать.
.
Больше двух лет на gentoo - не то, что "каждый раз", а хоть раз бы.
Умоляю назвать конкретно пакет(ы) с флагами, и пояснение(!), чтобы гентушникам захотелось воскликнуть "ты смотри! вот это тема! хочу себе!", и захотелось прикрутить flags per package
Это подпись, которую невозможно истолковать неправильно
.
Ты не читаешь что другие пишут?
Объясняю на пальцах.
Некоторые пакеты не собираются с флагами компилятора -fprofile-dir=<дирректория для сбора статистики> и -fprofile-generate. Приходится их (эти флаги) комментировать в /etc/make.conf, чтобы они (пакеты) собрались. Поэтому хотелось бы фичу, подобную /etc/portage/packages.use, чтобы некоторым пакетам можно было принудительно задать опции компилятора, с которыми их собирать.
В конце концов, если тебе эта фича неинтересна, то ты не всё человечество.
.
Во, теперь я во всё врубился :-)
Меня сообщение Theli (19 Август, 2009 - 10:48) переключило с главной темы
Это подпись, которую невозможно истолковать неправильно
Poor Fred написал(а): Поэтому
Всё уже есть и работает ;-) Делается так (на примере mplayer):
1. mkdir -pv /etc/portage/env/media-video/mplayer
2. echo "CFLAGS=\"-march=native -mtune=native -pipe -fomit-frame-pointer\"" >> /etc/portage/env/media-video/mplayer
(в общем, добавляете в этот файл все переменные окружения, которые необходимы для сборки mplayer)
3. emerge -av mplayer
Спасибо
Ага, спасибо. patamooshta и Gogast тоже уже говорили про такую возможность.
Файефокс 3.5 -тупо не
Файерфокс 3.5 -тупо не запускается собранный 4.4 (правда это на x86 только).И проблема не индивидуальная,а у многих http://www.linux.org.ru/view-message.jsp?msgid=3969734
Пишу из лисы
Пишу из лисы =)
и что же у меня не так что она работает =)
ЗЫ про каменты лоровцев вообще стоит забыть. Там ничего правдивого и умного не встречается
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
Ну причём здесь "забыть
Ну причём здесь "забыть камменты лоровцев".Люди пишут потому что не работает, не так же просто.У меня не работает файерфокс, вот ещё обнаружил баги -некоторые компоненты Xfce запускаются только из терминала(!) почему-то.Вот как такое понимать?Назревает вопрос о корректности работы программ собранных этой версией GCC -то есть эти глюки,это то что видно сразу-а многое же может проявиться в самый неподходяший момент.Не, лично я пожалуй переключусь обратно и всё взад пересоберу -и system и world.Как-то не хочется сюрпризов ожидать.Да, можно на флаги грешить -но на 4.3 с теми же флагами всё нормально.
У меня вся система им собрана
У меня вся система им собрана =) И как то проблем не наблюдается =)
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
аналогично система собрана
аналогично система собрана gcc-4.4.1. вся система работает ;)
Вот да, с XFCE такая же
Вот да, с XFCE такая же проблема, решил ее временным переходом на LXDE, подумываю на ней остаться, так как куда легче =)
а так - счас попробую пересобрать все заного, если XFCE заработает, значит просто какие-то хвосты от старого GCC остались...
:)
в системе собраной заного из
в системе собраной заного из stage-3 XFCE так же не работает =(, значит не судьба... жаль оверлэй xfce-dev сломался
:)
Вчера собрал firefox-3.5.2 с
Вчера собрал firefox-3.5.2 с gcc-4.4.
Вообще, им не пользуюсь, но для quakelive поставил :)
patamooshta
всё хорошо и быстро собралось, но работать отказались:
1. hal напрочь отказался запускаться.
2. kdm просто отключал питание монитора, которое ни в какую не включалось обратно
3. mplayer стал сегфолтиться в самых нужных местах: особенно при выводе через spdif
4. ntpd тоже засегфолтился и стал запускаться через раз...
и это только то, с чем я воевал, а сколько осталось незамечено?! ))) если бы запустились иксы, думаю, что сюрпризов оказалось бы больше )))
- - -
1,2,3,4 - не подтверждаю. Не с чем там воевать. Все собрано с gcc-4.4.1 - никаких глюков зависаний и т.п.
Ога, это у мя тоже
Ога, это у мя тоже замечательно все работает
:)
Тут проблема не в
Тут проблема не в компиляторе, скорее, а в вашей ауре =). Ну или может во флагах оптимизации. Я вот использую графит и прочая - и ничего, работает все, разве что вайн иногда глючит жестко, его надо собирать с 4.3, да. Но это единственное.
Я недопонял
Ему нужна "статистика" по конретной программе, чтобы при её перекомпиляции был какой-то выйгрыш, или ему нужна статистика о конкретной системе?
Статистика о конкретной
Статистика о конкретной программе. При включении параметра "-fprofile-generate" у gcc, компилятор добавляет код в программу для генерации статистики, потом запущенная программа на этапе выполнения генерирует эту статистику и при завершении выливает её в дирректорию, указанную параметром "-fprofile-dir=". Потом при следующей компиляции с параметром "-fprofile-use" (ну и "-fprofile-dir=" соответственно) компилятор использует эту статистику для построения оптимизированного кода.
При обновлении
При обновлении программы опять надо собирать статистику и перекомпилировать?
Да.
Да.
Лучше объясните мне как это с
Лучше объясните мне как это с портажем подружить. Раньше видел патч на emake, но может можно как-то без него обойтись?
Какой еще патч?
Какой еще патч? Выше написано же про CFLAGS.
сейчас патч уже не нужен, все
сейчас патч уже не нужен, все есть portage
- - -
А можно ли (имеет ли смысл) использовать -fprofile* совместно с ccache?
на счет совместимости пока
на счет совместимости пока трудно сказать. но ccache перед использованием этой фичи надо почистить (ИМХО).
P.S.: Linux - это красная таблетка :-) Windows - синяя...
- - -
Как пересобрать firefox с созданием профиля? С полпинка что-то не вышло... Я правильно понимаю, что USE "custom-optimization" мешает?
А как его с cmake подружить?
А как его с cmake подружить?
update
тьфу ты это я опечатался
Ох, ну когда же я увижу бенчи
Ох, ну когда же я увижу бенчи :)
У всех как то все быстрее и быстрее , да вот цифр обычно нету.
П.С Речь не про расчетный софт, кодеки или субд, речь про Qt или ff :)
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Несмог им собрать Qt в
Несмог им собрать Qt в терминал вывалилось тонна сообщений вида
А автор сам это дело
А автор сам это дело запускал?
а) там нужно делать линк на
libgcov.aизgcc, как минимум. Т.е. надо менять LDFLAGS, а их не все учитывает (далеко не все). Сама профилизация все нехило тормозитб)
-fprofile-dirдолжен смотреть на all-writible папку, иначе матюгов несчесть будет при запуске, о ошибке доступа.в) Если разные программы (вроде cp) запускаются разными пользователями - все равно будут матюги, ибо файлы создаются с владельцем первого запустившего. Избежать это можно только при помощи
chmod g+sи назначении всем пользователям некой одной группы, которая будет владеть папкой. Ну иumaskнадо подправить на эту папкуНу в папку проги исправно
Ну в папку проги исправно пишут свою профильную инфу... Но вот проблема, что не всё собирается. Например kdelibs, mysql ради которых я затеял весь этот пляс, радостно при -fprofile-use валятся на конфигурировании, qt даже не собирается. Чего делать незнаю
Пункт а) посмотри =).
Пункт а) посмотри =). Проблема в LDFLAGS. Если заставить все ебилды их юзать - проблема решится.
Ещё заметил проблему, что
Ещё заметил проблему, что профилирование отрицательно влияет на автотесты конфигураторов в итоге чексумма не совпадает
черт, в portage срочно
черт, в portage срочно необходимо добавлять фишки вида:
/etc/portage/package.cflags
/etc/portage/package.gcc-config
Надеюсь всем понятно что я имею в виду? или уже есть аналоги?
Просто после пересборки или обновления мира, все предыдущие настройки и параметры, задаваемые переменными, непосредственно перед ebuild едут лесом, а значит опять таки никакой автоматизации и ручками ручками....
cat
cat /etc/portage/env/dev-db/mysql
CFLAGS="-march=native -O3 -mno-3dnow -msse -msse2 -pipe -DPIC -fPIC"
CXXFLAGS="-march=native -O3 -mno-3dnow -msse -msse2 -pipe -DPIC -fPIC"
#и так далее
>> cat
>> cat /etc/portage/env/dev-db/mysql
Вот блин, полезно, где об этом написано O_o? man emerge нема.
На форуме несколько раз
На форуме несколько раз проскакивало, да и в этой теме давались ссылки на howto.
вот что предлагает гугль на
вот что предлагает гугль на эту тему - http://iquark.wordpress.com/2008/10/23/gentoo-per-package-flags/
хорошая штука для стабильных
хорошая штука для стабильных пакетов, которые редко обновляются
firefox помоему не нужно пересобирать, нужно пересобирать xulrunner
- - -
Кому-нибудь удалось профилировать хоть что-нибудь существенное firefox,xulrunner,qt,xorg-server,compiz? Пока кроме xterm и xlogo (для проверки что это вообще работает) больше ничего не удалось.
Firefox/xulrunner похоже просто игнорирует CFLAGS; compiz сделал профиль, но обругался на чексумы при комплияции с -fprofile-use.
попробуй вклюить флаг
попробуй вклюить флаг custom-optimization
Так как применять?
Так. Чего-то я немного не понял. Если я, например, собираю zlib, то потом при выполнении слинкованных с zlib программ выпадает ошибка(оно и понятно):
В make.conf:
Как я понимаю, все скомпилированные программы нужно линковать с gcov. Так каким образом это сделать?
Заранее спасибо :)
как заставить работать
как заставить работать профилирование на стабильной версии компилятора, где нет еще ключа -fprofile-dir? у меня для всех файлов на 2ом этапе компиляции вылетает предупреждение:
note: file unix_.gcda not found, execution counts estimated,
сорри за дубль)
просто это видимо работает
просто это видимо работает только тогда. когда программа запущена из папки, в которой собрана, а portage эти каталоги удаляет...
Нет, если -fprofile-dir
Нет, если -fprofile-dir поставить вовне, то оно и так работает, но вообщем-то эта фича явно не для портажа.
Найди в gcc соответствующий
Найди в gcc соответствующий мануал и почитай, может поможет. Я решил свою проблему довольно легко:
Далее в соотвествии с полученными знаниями изменяет /etc/make.conf:
-fprofile-generate вроде
-fprofile-generate вроде включает -fprofile-arcs.
Так оно и есть(по крайней
Так оно и есть(по крайней мере в мануале написано). Это мои недоверие и подозрительность :)
Мда... Имхо топикстартер
Мда... Имхо топикстартер аццкий провокатор. Во народу щас себе систем поломает... Еще раз повторяю - для нормальной работы нужно указывать LDFLAGS, которые много пакетов игнорируют.
я компилирую первый раз с
я компилирую первый раз с -fprofile-generate в LDFLAGS и CFLAGS, запускаю потом скомпилированный файл(тестирую на анзипе)), в рабочем каталоге портажа для каждого объектного файла появляются .gcda профайлы, но когда запускаю 2 этап компиляции -fprofile-use то они исчезают... ставлю в фичах "noclean keeptemp keepwork", и все равно подчищаются, поскажите, пож, что делать...
ребята, ну подскажите, гугл ничего путного не находит, уже все возможные варианты перепробовал, не зря ж они в новой версии гсс ввели спец ключ для провилей)
man gcc и топик этой темы
man gccи топик этой темы имеют большие шансы помочь. Если их прочитать ;)-fprofile-generate в LDFLAGS делать нечего.
Да чего там. У умных есть
Да чего там. У умных есть бекапы, ну или на крайний случай собранные архивы. У глупых ничего нет. Глупым в gentoo и не место.
После недели с лишним юзания
После недели с лишним юзания Firefox (xulrunner) и Thunderbird со сбором статистики пересобрал их с использованием собранной статистики. Ничего не заметил. Запуск если и сократился на долю секунды, то это не заметно и не принципиально. В процессе работы... Ну а что, как сайты страницы отдают так ФФ их и отображает. Так что пока этой фичи оценить не могу.
Разве что попробовать с кодировщиками, lame, avidemux с кодеками, sox, imagemagick... Может на них заметней будет?
Или, может, из-за того, что процессор Athlon X2 5600+, там, небось, и ускорять уже некуда?
.
Небольшой off topic, но тоже для ищущих "реальных тем".
http://mesadu.net/index.php?option=content&Itemid=10&task=view&id=20
согласно http://www.llvm.org/ версия 2.6 выйдет через 10 дней.
Что думаете?
см также http://www.opennet.ru/openforum/vsluhforumID3/58544.html
Это подпись, которую невозможно истолковать неправильно
patamooshta написал(а): см
в жизни не читал такого... долго смеялся =))))
Что-то меня эта тема совсем
Что-то меня эта тема совсем перестала радовать. Не запускается Pidgin. Уже на несколько раз пересобрал его и все зависимости без этих волшебных опций, и даже на gcc-4.3.4 переключился и снова пересобрал - и все равно:
Не пойму, зачем они ему нужны? Уж и не знаю, что еще пересобрать?
Poor Fred написал(а): $
попробуй пересобрать distccd, ну и попробуй задать права доступа к каталогу /var/tmp/fprofile
вот такие пирожки с котятами
и ватрушки с несварением :)
Чукча не писатель, Чукча читатель :)
Лишний слэш
Лишний слэш в fprofile-dir
Много времени прошло - как
Много времени прошло - как там поживает свежий gcc-4.4.2? Он достаточно стабилен? Если до него обновиться, не надо быть готовым к тому, что придётся потом откатываться обратно?
Вся система им собрана и
Вся система им собрана и давно прекрасно работает.
ps -fprofile и т.д. не юзал
А флаги какие? -O3 или -O2,
А флаги какие? -O3 или -O2, или -Os?
Сейчас - O2(комп и ноут) и
Сейчас - O2(комп и ноут) и Os("сервер"), когда-то было O3, но не помню на каком gcc
О3 не рекомендуют
О3 не рекомендуют использовать с gcc 4.4.х
собирал всю систему с Os и O2
разницу не ощущаю, только в размере, при Os в корне свободно 3,5Гиб,c O2 свободно 2.9Гиб
Разница между чем, и чем?
Разница между чем, и чем? Между -Os и -O2? Или между -O2 и -O3?
Что будет лучше, с новой версией gcc, но с -O2, или старую оставить с -O3?
С -Os, я так понял, без особой разницы.
O2 и Os Если старую
O2 и Os
Если старую gcc-3.*(но вряд ли все соберется) - тогда O3, на gcc-4.* O3 вообще не рекомендуют, так что лучше O2