gcc 4.4.x и -fprofile-** (-fprofile-dir реальная тема в новом компилляторе)
fireal 17 Августа, 2009 - 07:05
Господа, УРА!! Теперь в новой версии 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 разные опции, в том числе и опции компилятора, для конкретного порта, типа того:
Есть ли такая фича в Генту? В доках ничего похожего не нашел.
- - -
Присоединяюсь к вопросу.
Тоже во 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