Профайлинг с помощью GCC (fprofile-generate/use)
Anubioz 20 сентября, 2010 - 15:18
Знатоки GCC - расскажите, пожалуйста, какие именно опции в моём CFLAGS приводят к ошибкам компиляции с -fprofile-use?
Первую сборку я делаю со следующими ключами:
#CFLAGS="-march=nocona -O2 -g0 -fprofile-generate -fprofile-dir='/var/tmp/portage/profiles' -fmodulo-sched -fmodulo-sched-allow-regmoves -fgcse-sm -fgcse-las -fgcse-after-reload -fsched-stalled-insns=0 -fsched-stalled-insns=5 -fsched2-use-superblocks -fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops -fselective-scheduling -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fno-align-functions -fno-align-loops -fno-align-labels -fno-align-jumps -ftree-loop-linear -floop-interchange -floop-strip-mine -floop-block -ftree-loop-distribution -ftree-loop-im -ftree-loop-ivcanon -fivopts -ftree-vectorize -fvect-cost-model -fpredictive-commoning -fbranch-target-load-optimize -fvariable-expansion-in-unroller -finline-functions --param l2-cache-size=4096 --param l1-cache-size=16 -mmmx -msse -msse2 -msse3"
Все собирается отлично - данные профайлинга также замечательно записываются.
А вот на компиляции с fprofile-use возникает куча ошибок:
#CFLAGS="-march=nocona -O2 -g0 -fprofile-correction -fprofile-use='/var/tmp/portage/profiles' -fmodulo-sched -fmodulo-sched-allow-regmoves -fgcse-sm -fgcse-las -fgcse-after-reload -fvpt -fsched-stalled-insns=0 -fsched-stalled-insns=5 -fsched2-use-superblocks -fsched2-use-traces -fbranch-probabilities -fsee -freschedule-modulo-scheduled-loops -fselective-scheduling -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fno-align-functions -fno-align-loops -fno-align-labels -fno-align-jumps -ftree-loop-linear -floop-interchange -floop-strip-mine -floop-block -ftree-loop-distribution -ftree-loop-im -ftree-loop-ivcanon -fivopts -ftree-vectorize -fvect-cost-model -ftracer -fpredictive-commoning -funroll-loops -fbranch-target-load-optimize -fvariable-expansion-in-unroller -finline-functions -fpeel-loops --param l2-cache-size=4096 --param l1-cache-size=16 -mmmx -msse -msse2 -msse3"
Причем, если из этого оставить только:
#CFLAGS="-march=nocona -O2 -g0 -fprofile-correction -fprofile-use='/var/tmp/portage/profiles'"
то все отлично собирается и даже дает прирост производительности процентов 5%...
Какие флаги вообще не в тему и лишние?
»
- Для комментирования войдите или зарегистрируйтесь
убрать все после -02
убрать все после -02
А что с профайлингом - тоже
А что с профайлингом - тоже убрать предлагаете????
...
Предлагаю по аналогии с бритвой Оккама и бритвой Мицгола ввести бритву си-флагов:
Итак, се являю вам бритву Си-флагов:
Пример:
Если программа "int main() { int* x(0); *x; return 0; }", и она скомпилирована с флагами -O3 -fprofile-generate -- не следует анализировать и исправлять код. Виноваты флаги компиляции, см. бритву си-флагов.
Спасибо за совет, но мне
Спасибо за совет, но мне следует сразу расставить точки на i - с моим генту все хорошо - работает как часы. Я же пытаюсь написатьруководство по максимальной оптимизации генту с момента установки и сразу с профайлингом. Соответственно суть вопроса именно в том, какое максимальное количество флагов оставить из вышеперечисленных для того, чтобы 95% программ собиралось без проблем. Вы же не будете утверждать, что такие флаги как "-fomit-frame-pointer -fno-merge-debug-strings -mmmx -msse2 -m3dnow -msse -pipe" могут помешать?
немешающие флаги гуглятся по
немешающие флаги гуглятся по safe cflags
для включения профиля сборки вообще вредно указывать оптимизацию (имхо!!!)
Сейчас буду подбирать и
Сейчас буду подбирать и тестить acovea... Как чего нарою - расскажу...
acovea'ой уже многие
acovea'ой уже многие наигрались и дают вам советы про о2 и бритву сифлагов ;)
Anubioz написал(а): Вы же не
Флаг -m3dnow указывает GCC компилить код с применением набора команд, не поддерживаемых процессорами Intel
Мы тоже не всего читали Шнитке!.. © В. Вишневский
Ну это понятно вроде, я же не
Ну это понятно вроде, я же не говорю, что я их от балды беру - я их все http://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/ здесь вычитал...
Anubioz написал(а):Ну это
Так вы же сами приводили этот флаг в "железобетонном" наборе, не могущем помешать?! Ан вот, оказывается может... В свете "пытаюсь написатьруководство по максимальной оптимизации генту" - вы считаете, что Gentoo и AMD как "Ленин и Партия" © ?
Мы тоже не всего читали Шнитке!.. © В. Вишневский
Да нет - это просто что под
Да нет - это просто что под руку попалось из make.conf с ноутбука... Вообще похоже я все-таки перемудрил с флагами и лучше всего оставить следующее:
Вроде пока все проги собираются...
Anubioz написал(а): похоже я
А вот, что говорит man gcc про такой, казалось бы, безобидный, -g0: "...GCC allows you to use -g with -O. The shortcuts taken by optimized code may occasionally produce surprising results: some variables you declared may not exist at all; flow of control may briefly move where you did not expect it; some statements may not be executed because they compute constant results or their values were already at hand; some statements may execute in different places because they were moved out of loops..."
Каково?!
В своё время, я тоже много экпериментировал с флагами. В результате у меня остались сверх O2 только -march=native -msahf -mcx16 -mmmx -msse4 -finline-functions-called-once -fno-align-labels -fpredictive-commoning -funswitch-loops, и, как видно, половина из них камнезависима. А вот даже от таких прелестей, как -combine -ftree-vectorize -fwhole-program в разное время по разным причинам пришлось отказаться...
Мы тоже не всего читали Шнитке!.. © В. Вишневский
Цитата: GCC allows you to use
Офигеть можно - спасибо огромное за инфу - я, дурак, думал что в мануале на сайте все написано - в жизни бы не догадался в man заглянуть...
Сейчас попробую прибавить Ваши флаги...
P.S. Ядро упорно отказывается собираться с fprofile-use... Видимо не судьба или придется icc расчехлять :)))
Да нет - это просто что под
Да нет - это просто что под руку попалось из make.conf с ноутбука... Вообще похоже я все-таки перемудрил с флагами и лучше всего оставить следующее:
Вроде пока все проги собираются...
Я же пытаюсь
Когото ты мне напоминаешь
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 ;)
Я и есть - просто жутким
Я и есть - просто жутким гриппом тут на недельку заболел (с туберкулёзным кашлем)...
Раз уж узнаешь меня - тогда по поводу руководства вопрос - я (пока (сегодня)) не чувствую в себе сил все разжевывать до мелочей - как бы мне пользу принести и статейку написать (с чего начать не знаю) - если флаги оптимальные вроде как подобраны, система вроде как ускоряется, zen-ядро сейчас компильну с профайлингом. Просто не под каждый же проц писать (с ума сойти можно же...)
Anubioz написал(а): не под
Камнезависивые флаги можно просто перечислить в отдельной главе
Ман создать - не поле перейти ©
Мы тоже не всего читали Шнитке!.. © В. Вишневский
Ну вот ядро вроде даже
Ну вот ядро вроде даже компилируется с сумашедшим custom-flag:
Тьфу-тьфу-тьфу - если соберется минут десять погоняю и откомпилирую уже 2-pass... В общем-то полезно все будет, я думаю, если написать конкретные флаги (подобранные в мучительной борьбе с gcc)... Но я не знаю все-таки с чего начать - у вас тут wiki есть где-нибудь???
P.S. В голове возникло несколько вопросов:
1. А ядро куда данные профайлинга скидывать будет, мне интересно - оно достаточно умное, чтобы в папку указанную все класть (врядли же - пока, например, / не подмонтирован куда все деваться будет?)
2. Про время, которое "работает" программа после 1pass (и собирает данные) по принципу "чем дольше, тем лучше" устроено? Или же необходимо выполнять те задачи для которых производится профайлинг (и не выполнять ничего лишнего)?
Правильно ли я все делаю,
Правильно ли я все делаю, если мне для включения сбора данных от профайлинга пришлось редактировать Makefile ядра?
Конечно
Конечно
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 ;)