GCC- Компиляция с обратной связью, как заставить работать?
gorthauer 20 мая, 2009 - 13:42
Решил вот по этой статье подключить профилировщик
http://www.insidepro.com/kk/231/231r.shtml
-fprofile-use -fvpt -fbranch-probabilities
В итоге при компиляции сыплются сообщения вида
gcda not found, execution counts estimated
и ессна нифига оно не дает.
Кто нить побеждал такой косяк?
»
- Для комментирования войдите или зарегистрируйтесь
давным давно, еще сидя под
давным давно, еще сидя под слакой пытался это замутить. дело гиблое.
уберите-ка
уберите-ка "-fbranch-probabilities"
щас для интереса собрал ktorrent на
CFLAGS="-O3 -march=native -mmmx -msse -msse2 -msse3 -mfpmath=sse -fomit-frame-pointer -fprofile-use -fvpt"
$ gcc --version
gcc (Gentoo 4.4.0 p1.0) 4.4.0
Попробовал с вашими
Попробовал с вашими флагами
Поверьте мне, радости сборка
Поверьте мне, радости сборка не принесет:
$ qutim
Protocol "ICQ" was loaded
Protocol "IRC" was loaded
Protocol "Jabber" was loaded
Simple plugin "Weather" was loaded
"C" "Default"
Ошибка сегментирования
Кстати, Вы зачем в ручную прерывали?! У меня ругается на каждом building`е точно также, но ведь собрался.
Хотя толку - сами понимаете...
Дык а толку что ругается?
Дык а толку что ругается? Ежели ругается значит фичу не задействует. От того и сегфолтится
Ну знаете, я до сих пор
Ну знаете, я до сих пор плевал на все предупреждения - если вываливалось, то работало.
Хотя если вчитаться в ошибку, то ясно что ему не хватает файла, из которого он собирается читать статистику. Расшерение характерно (см. еще раз статью Криса)
=
Короче, на.. что оно?
Пойдемте-ка icc тестить, где-то темка есть...
у... а гуглом пользоваьтся не
у... а гуглом пользоваьтся не пробовали? на предмет того что же это за .gcda файлы такие?
читать http://www.geophysics.rice.edu/comp.res/apps/g/gcc/docs/Gcov-Data-Files.html
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
прочел. толку все равно
прочел. толку все равно мало.
In function ‘int pthread_equal(pthread_t, pthread_t)’ постоянно это чертово замечание...
даже если так:
CFLAGS="-O3 -march=native -mmmx -msse -msse2 -msse3 -mfpmath=sse -fomit-frame-pointer -fprofile-use -fvpt -fbranch-probabilities -fprofile-generate -fprofile-arcs"
результ:
сегфолт
Пересобираю
Пересобираю систему.
CFLAGS="-O3 -march=native -mtune=native -pipe -fpeel-loops -fvpt -ftracer -frename-registers"
Посмотрим что будет?
emerge -e world ... ошибка в pptpclient. После перезагруза emerge pptpclient прошел нормально.
Добавил еще ключи.
CFLAGS="-O3 -march=native -mtune=native -pipe -mmmx -msse -msse2 -msse3 -mfpmath=sse -fomit-frame-pointer -fprofile-use -fpeel-loops -fvpt -ftracer -frename-registers"
Пересебрал ядро и ...
Заного emerge -e world. Ждемс!
Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)
LinuxID
Думаю падучесть увеличится много больше чем скорость работы. Кстати, указывать mtune, неотличающийся от march не нужно.
Ну знаете .... аська
Ну знаете .... аська завелась, кодеки работают, ОО ставил после пересборки системы. Тоже прекрастно собрался. В прочем прибавки производительности не заметил, но при установки ОО раньше отжирал всю память и 200-250 метров от свапа. В этот раз больше 70 процентов так и не затронул. В остальном все так же.
Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)
Бросте Вы это. Вы когдалибо
Бросте Вы это. Вы когдалибо сравнивали ассемблерные листинги выдаваемые после компиляторов. Те куски кода, которые требуют максимального бысродействия ты вылизываешь на данном компиляторе (с определенными ключами). На другом компиляторе (или с другими ключами, что в принципе одно и тоже) этот код может и не заработать (компилятор его превратит после оптимизации вообще в мусор).
Ну так систему то под
Ну так систему то под конкретный проц собирают и перетаскивать ее на другой ни кто не собирается. Отсюда и задача.
вот с чем я пересобрал все:
CFLAGS="-O3 -march=native -mtune=native -pipe -mmmx -msse -msse2 -msse3 -mfpmath=sse -fomit-frame-pointer -fprofile-use -fpeel-loops -fvpt -ftracer -frename-registers"
CXXFLAGS="${CFLAGS}"
CHOST="i686-pc-linux-gnu"
MAKEOPTS="-j3"
GENTOO_MIRRORS="http://mirror.yandex.ru/gentoo-distfiles/ "
SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
LINGUAS="ru"
INPUT_DEVICES="keyboard mouse"
ALSA_CARDS="hda-intel"
VIDEO_CARDS="nvidia"
USE="X acpi hal dbus alsa nvidia opengl unicode nls cups cupsddk scanner usb ffmpeg mmx sse sse2 ssse3 truetype java jpeg mysql php apache2 png tiff jpeg2k djvu xinerama arts spell cups ctype curl ftp gd inifile xml xsl zip mp3 vorbis nsplugin kde qt qt3 tools xgl glx cairo truetype freetype cleartype xulrunner -doc -ipv6 -gtk -gnome -ppds"
------------------------------------------------
Пересобрал gcc, glibc и ядро. Перегрузился и emerge -e world. Ну да, предупреждения об отсутствующем файле были почти во всех пакетах. Ну дык это просто предупреждения. Ни разу не прервалась компиляция.
Кстати мускул немного прибавил. Выборка из 50к строк стала на 3 сек бысрее работать. В остальном пока разницы не заметил если не считать установки ОО.
<=- Добавленно -=>
LAMP тоже собрался без проблем!
Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)
Видимо я рано обрадовался!
Видимо я рано обрадовался! Kcorn вылетает с ощибкой, при открытии моей страницы на google лис сразу закрываеться, У него же "В контакте" музыка хрипеть начала. Java не всегда корректно стала работать! Ну и так ... по мелочи ...
PS Вернул все ключи назад! ФТОПКУ такие экспиременты! Мне работать с системой надо а не компилить туда<->сюда!
Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)
Естественно, сообщения
Естественно, сообщения сыплются, компиляция-то должна идти в ДВА прохода: при первом проходе профилировщиком СОБИРАЕТСЯ информация, а во втором происходит КОМПИЛЯЦИЯ с использованием этой информации. man gcc, в общем.
Если кому-то интересно, то вот мой неработающий патчик для emake.
Пасиба, как буит время
Пасиба, как буит время попробую. Единственное, я так прально понимаю это раза в 2 удлиняет время компиляции, то есть применять для всего это тяжко? Оно умеет воспринимать флаги для отдельных пакетов?
Ну и конечно же вопрос о том, насколько реально это эффективно
ЗЫ
Кстати кто читал про проект самообучающегося компилятора на основе gcc? Там всё были восторженные отзывы, что он генерит реально более шустрые бинарники.
gorthauer написал(а):Оно
Флаги для отдельных пакетов - давно , man portage, статья времен прервого fantoo.
Про эффективность - less /usr/portage/eclass/flag-o-matic.eclass.
П.С с таким походом и без чтения исходников и ассемблерного листинга всё это красноглазие.
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 ;)
Новая версия патча, у меня
Новая версия патча, у меня работает (правда немного модифицированная версия, т.к. gcc у меня не новый, поэтому прошу потестировать патч).
Необходим gcc версии 4.4.0 и старше. Проверок переменных файла make.conf и раскидывание информации профолировщика по отдельным папкам для каждой программы будет позже.
Какие переменные надо добавить в make.conf:
CFLAGS_PROFILE="-funroll-loops -fvpt -ftracer -fpeel-loops" # Флаги оптимизации, на которые воздействует профилирование
PROFILING_DIR="/var/cache/profile" # Каталогб куда пихается информацияб выдаваемая при профилировании
WANT_PROFILING=1 # Включение/отключение сабжа
PROFILE_STAGE=1 # Номер этапа
Abstract
При первой компиляции создаются исполняемые файлы, которые в процессе своего выполнения сохраняют информацию о его ходе в каталог PROFILING_DIR. При повторной компиляции "PROFILE_STAGE=2 emerge ..." информация, полцченная в ходе работы программы используется для создания ее оптимизированной версии.
Это патч к чему? Всмысле на
Это патч к чему? Всмысле на что его накладывать?
А разве нельзя обойтись тремя
А разве нельзя обойтись тремя флагами: -fprofile-dir, -fprofile-generate и fprofile-use? Они же сами активируют дополнительные нужные флаги... по крайней мере у меня всё работало.
Но вот при пересборке мира умер portage, ругаясь, что не может обнаружить функцию _gcov**что-то_там** :( В связи с этим вопрос: нужно добавлять линковщику -lgcov?? Тогда почему другие программы собирались нормально и взлетали потом? Т.е. обратная связь явно работала...
Можно, тут Вы правы. Не
Можно, тут Вы правы.
Не нужно, тут -lgcov автоматически включается флагом -fprofile-arcs.
Вот новая версия патча, теперь она раскидывает информацию о профилировании по подпапкам. Например /var/tmp/profile/dev-db/sqlite-3.6.18 для dev-db/sqlite-3.6.18.
Необходим gcc версии 4.4.0 и старше.
Какие переменные надо добавить в make.conf (тут указаны со значениями по-умолчанию):
PROF_DIR="/var/tmp/profile" # Каталог, куда пихается информация, выдаваемая при профилировании
WANT_PROF=0 # Включение/отключение сабжа (1 - вкл, 2 - выкл)
PROF_STAGE=1 # Номер этапа (1 - компиляция программ, генерирующих данные профилировщика, 2 - компиляции этих же программ с использованием данных профилировщика)
Класс, супер :)Наверное даже
Класс, супер :)
Наверное даже работает.Только не видно что то ничего типа:
elog "CFLAGS filteret by ebuild,this flag is not allowed " :)
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 ;)
Теперь параметры задаются
Теперь параметры задаются через FEATURES:
- profile = stage1
- profile-use = stage2
- profile + profile-use = stage2, т.е. можно прописать в make.conf значение profile, а profile-use передавать через переменную окружения, когда требуется (FEATURES=profile-use emerge ufed)
- noprofile = отключение профилирования
Папка, куда скидывается информация, выдаваемая профилировщиком, задаетя переменной PROFILE_DIR