Видео смотреть бесплатно

Смотреть телеграм видео

Официальный сайт seoturbina 24/7/365

Смотреть видео бесплатно

stasikos 10.08.2011 11:10

Gentoo LinuxCFLAGS, CXXFLAGS и стоит ли так увлекаться их изменением?

Собственно, топик навеян одним спором с человеком, который упомянул что march=native это очень круто :)

Что предлагалось в оригинале?
1. Берем вот такой однострочник:
1
touch /tmp/null.c; gcc -c -march=native -v /tmp/null.c 2>&1 | grep march | egrep -o -- '\s-m\S+|--param \S+'


2. Запускаем его и смотрим то что выделил egrep (на Core2Duo T7250 например):
1
-march=core2 -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=core2


Вах, круто - "тут оно оптимизирует даже под кеш!".

Теперь выбираем жертву бенчмарка - я выбрал FireFox 5 и его попугаи в PeaceKeeper. Жертва не очень сильная, потому что возможность его собирать с кастомными флагами по-умолчанию несколько урезана.
Берем отправную точку - дефолтные флаги, которые предлагаются в любом хендбуке:
1
2
CFLAGS="-O2 -march=core2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"


Для FireFox включаем такое вот:
1
USE="custom-cflags, -custom-optimization"


Это значит что он выбросит -O2 из флагов компилятора и будет использовать все остальное.
Собираем, запускаем бенчмарк браузера. Несколько раз. Лучше 3-5. И проверяем, что у нас выключен ondemand или другое средство для уменьшения частоты процессора и т.д.
В общем, я получил столько вот попугаев в среднем: 3762, с очень небольшим отклонением между тестами.

Теперь посмотрим, чего наделал мейнтейнер ебилда FireFox5 с оптимизацией, включаяя USE-флаг custom-optimization - это, как оказалось, просто добавляет к флагам -O2. Пересобираем, повторяем бенчмарки
Новое число попугаев: 4346.
Ок. Что же будет, если воспользоваться выводом, который нам предлагают взять, т.е. изменить CFLAGS на это:
-О2 -march=core2 -pipe -fomit-frame-pointer -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=core2?
Пересоберем, запустим, протестим и получим новых попугаев: 2983
Что-то стало заметно хуже, пришлось запускать тест раз 10, но результат упорно уперся в явно худшие цифры. Начинаем думать логически. FireFox в системе не один, может не стоит оптимизировать его под весь размер кеша? Меняем l2-cache-size=1024, получаем 2986 попугаев. Ситуация не меняется, так что я начинаю выкидывать флаги один за одним.
-msahf и -mcx16 по-одиночке отобрали около 100 попугаев у FireFox
--param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=2048 отобрали все остальную тысячу.

В итоге я пришел к такому вот CFLAGS:
1
-O2 -march=core2 -pipe -fomit-frame-pointer -mtune=core2


и в конце концов пересобрав с ним весь мир, получил еще почти 100 попугаев сверх старых: 4432 (это как намек на "а влияет ли остальная система как-то значительно?).
Можно было бы еще поковыряться с более другой версией gcc (использовался gcc (Gentoo 4.4.5 p1.0, pie-0.4.5) 4.4.5), включить там graphite optimizations, но выходные кончились и я забил.

Что я точно сделал правильно - я сказал "Я не верю!" любителю все компилировать из сорцов, и, мне кажется, совсем не зря. Оказалось, что он наоборот замедляет свою систему.

P.S. Очевидно, любая другая программа, собранная с теми же флагами будет давать совершенно другой результат - она будет ускоряться, как это делает, например, nbench. Так что в конце концов может оказаться что CFLAGS должен индивидуально подбираться для приложений, а не system-wide. И тут же возникает вопрос - а может бинарные пакеты, собранные и оптимизированные майнтейнером в результате череды бенчмарков, они таки лучше?

P.P.S: firefox-bin на той же системе получил 3893 попугаев


Тэги: benchmark cflags optimization
+ 10 -
Похожие Поделиться

mironov_orig 10.08.2011 11:47 #
+ 2 -
Ты преувеличиваешь вклад ментейнеров. Они собирают пакеты с -O2 и под паксимально возможное количество процов, так что всё "лучше" от бинарных пакетов уходит на то, что их не надо собирать и они дают максимальный безопасный разгон подо всё.
stasikos 10.08.2011 11:51 #
+ 0 -
Но ведь не всегда измение флагов с -O2 на что-то дополнительное даст какой-то реальный прирост. Я вот слышал байку, что bzip2, например быстрее всего работает с -march=i686, нежели с чем-то еще, но не проверял.
mironov_orig 10.08.2011 11:54 #
+ 2 -
Я не спорю про скорость, я лишь говорю, что ментейнеры не устраивают полноценное тестирование и перебор флагов.
stasikos 10.08.2011 12:11 #
+ 0 -
Я намекаю что могли бы и устроить :).
mironov_orig 10.08.2011 11:47 #
+ 2 -
А ещё было бы интерено добавить в это сравнение firefox-bin
mironov_orig 10.08.2011 11:49 #
+ 1 -
А в однострочнике лучше убрать --color, но добавить -o. В разы нагляднее имхо.
stasikos 10.08.2011 12:10 #
+ 0 -
Поправил. firefox-bin тоже прогнал.
mironov_orig 10.08.2011 12:13 #
+ 1 -
А вот это уже ощутимый удар по оптимизяторам =) Ждём megabaks'a в топике )
shisoid 10.08.2011 15:13 #
+ 1 -
а зачем меня ждать?
www-client/firefox (alsa dbus ipc linguas_en linguas_ru methodjit webm) - 5746 Points
www-client/firefox-bin - 5654 Points
stasikos 10.08.2011 15:34 #
+ 0 -
Чот слабо - у меня больше отрыв :)
shisoid 10.08.2011 15:40 #
+ 0 -
я лисой не пользуюсь - потому не и не крутил/тестил
ща посмотрю с кастом-* юзами
shisoid 10.08.2011 16:08 #
+ 0 -
оба кастом юза
5886
mironov_orig 10.08.2011 11:57 #
+ 3 -
Имхо основной прирост от оптимизации должен наблюдаться от флагов вроде msse4.(1|2) и подобного в мультимедиа числодробилках типа mencoder (хотя там есть runtime cpu detection) ffmpeg, flac или подобного.
digiwhite 10.08.2011 12:43 #
+ 1 -
Уберите текст под кат пожалуйста :)
Scrill 10.08.2011 12:50 #
+ 1 -
Я на T7500 дооптимизировался до такого:
-march=core2 -O2 -pipe -mmmx -mssse3 -msahf -mcx16 -mtune=core2
а чуть позже оказалось, что это одно и то же с:
-march=native -O2 -pipe -mmmx -mssse3
devl547 10.08.2011 13:22 #
+ 0 -
гента? на С2D? и 32-битная? нет пути!

Попробуй -fivopts, -ftree-loop-im, -ftree-loop-ivcanon, -ffast-math и что-нибудь из этой серии.

А в целом - большая часть опций сборки помогает выжать проценты производительности, не больше. Какие-то лишние секунды в архивации или перекодировании видео погоды не сделают. Сравнивая например свой SliTaz (у нас там вообще 486 тулчейн) со своей же гентой в большей части задач разницы нет.
mironov_orig 10.08.2011 13:24 #
+ 2 -
Секунды и проценты хорошо будут видны при пакетной обработке видео/аудио/картинок, но для десктопа это очень редкая задача. )
thoughtful_fox 10.08.2011 13:53 #
+ 1 -
Нян, а что такого страшного с 32бит на кор2дуо? Мне вот совсем не улыбается возиться с мультилибами и размазанным юзерлендом... Что поделать, но рабочий софт довольно часто бывает все еще 32битный.

Пожалуй, стоит собрать на одной платформе две генты и сравнить 32 и 64 на том же файрфоксе. Интересно, сколько там процентов будет профита, и стоит ли оно того?

ПС. я руками-ногами за 64, только скажите это ораклу
stasikos 10.08.2011 14:39 #
+ 0 -
В каком месте она 32-битная?
tn1 10.08.2011 18:24 #
+ 0 -
> Какие-то лишние секунды
4.2, лишние проценты. к примеру 2% для gzip это
1
2
-ftree-vectorize -mfpmath=sse+387 -mmmx -msse3 -mssse3 
-ftree-loop-linear -floop-interchange -floop-block -floop-strip-mine -fgraphite-identity (graphite)
shisoid 10.08.2011 14:55 #
+ 1 -
не стОит
натив не всегда годится - например с distcc (объяснять, думаю не надо)
если уж и загоняться по флагам, то только для наиболее востребованного софта
и не стОит использовать экзотику (игры с циклами, грифты и прочее), т.к. если в данной версии компилятора они дают профит, то на следующей могут легко дать регресс
сам использую
1
CFLAGS="-O2 -march=core2 -mtune=generic -mfpmath=sse -msse4.1 -fomit-frame-pointer -pipe"
"-fomit-frame-pointer" остался даже после перехода на 4.6 (в 4.6 на 32-х битах теперь сей флажок - дефолт), т.к. некоторый софт собираю старыми версиями (например первогруб не работает, если собрать с 4.6)
по поводу генерика - на очень многих процах даёт таки профит
всякие ffast-math тоже стоит использовать осторожно - редко где дают профит, обычно или ничего или регресс
а вообще...хозяин - барин
shisoid 10.08.2011 15:14 #
+ 0 -
s/грифты/графиты/
tn1 10.08.2011 18:27 #
+ 0 -
> т.к. если в данной версии компилятора они дают профит, то на следующей могут легко дать регресс
У меня при перехода от 4.5.2 к 4.6.1 gzip дал прирост производительности 1.7%.(с графитом)
shisoid 11.08.2011 02:58 #
+ 0 -
молодец, а вот при переходе с 4.4 на 4.5 с графитом он даёт регресс
причём заметный
thoughtful_fox 10.08.2011 15:44 #
+ 1 -
Хм...
Тест SunSpider

firefox-bin : 265 мс
firefox (default) : 255 мс
firefox (c native и сflags) : 236 мс

Funtoo gcc-4.4.5, core i5, 32 бит, не graphite

эх, не потестил на Пискипере, не успел) Покопаюсь-ка я в документации к gcc по такому поводу, но как-то уже на домашней машинке, а не на рабочей.
stasikos 10.08.2011 15:57 #
+ 0 -
SunSpider: firefox-bin - 1329.9ms +/- 0.6%
firefox (с тем что в топике) - 1437 +/- 0.4%
какие-то спорные результаты... :(
thoughtful_fox 10.08.2011 16:06 #
+ 1 -
Апдейт по ПисКиперу:

файрфокс-бин - 5956 поинтов;
файрфокс с нативом и кастом флагами - 6364;

32 бит система. В данном случае это важно)

Отака штука.
На самом деле разброс не столь грандиозен, но все же небольшой профит есть. Все же, я сначала пороюсь в документации побольше, мало ли чего)
stasikos 10.08.2011 16:02 #
+ 0 -
Тот же firefox (с тем что в топике) но с включенными плагинами - 394.2 ms
firefox-bin - 402.8ms
thebeetlebum 10.08.2011 17:19 #
+ 1 -
Не знаю стоит ли лезть с моим старым железом и циферками, но все же.

Стенд: toshiba nb200-10z (UPD 2GB RAM) Intel Atom N280

firefox-bin:

  • sunspider: 1262.9 ± 0.9%

  • peacekeeper: 943 points


firefox (gcc 4.5.3)

  • sunspider: 1235.8 ± 0.9%

  • peacekeeper: 967 points



GRAPHITE="-floop-interchange -floop-block -floop-strip-mine"
CFLAGS="-O2 -march=atom -mtune=atom -mfpmath=sse -mssse3 -fomit-frame-pointer -pipe --param l2-cache-size=512 ${GRAPHITE}"


Сейчас пересяду на gcc 4.6 и посмотрим на цифры там с графитом и без него.
А пользователей с icc нет?
stasikos 10.08.2011 17:27 #
+ 0 -
Это у вас 5-й Firefox? А то я этот же суньспайдер запустил на Core i7-2600 в 64-битной системе но в Firefox 3.6 - вот я такие же циферки получил. :) Причем, что интересно, процессор тест не нагружал, а постоянно что-то дергал по сети с сервера.
thebeetlebum 10.08.2011 17:34 #
+ 0 -
5.0-r2 для сборного и 5.0 для бинарного
thebeetlebum 27.08.2011 13:18 #
+ 0 -
firefox-6.0 (gcc 4.5.3)
  • sunspider: 1217 ms ± 1.8%

  • peacekeeper: 1008 points
thebeetlebum 21.09.2011 21:32 #
+ 0 -
Intel Core 2 Duo E6400 2.13GHz @ 3.14GHz
CFLAGS="-O2 -march=core2 -mtune=generic -mfpmath=sse -mssse3 -fomit-frame-pointer -pipe"
firefox 6.0 USE="alsa crashreporter dbus ipc libnotify linguas_en linguas_ru methodjit webm"

  • sunspider 231.2ms

  • peacekeeper 6006 points



firefox 6.0 USE="alsa crashreporter custom-cflags custom-optimization dbus ipc libnotify linguas_en linguas_ru methodjit pgo startup-notification system-sqlite webm"

  • sunspider 220.1ms

  • peacekeeper 6687 points



Итого, по первому тесту увеличение производительности на 5%, по второму на 11%
tn1 10.08.2011 18:29 #
+ 1 -
У firefox есть pgo(включает профилирование), кто не будь пробовал?
tn1 10.08.2011 18:41 #
+ -1 -
> Оказалось, что он наоборот замедляет свою систему.
Что замедляет? у тебя 2с половиной калеки, а не разные CFLAGS.

CFLAGS="-O2 -march=native -mtune=native -pipe -fomit-frame-pointer \
-mfpmath=sse+387 -mmmx -msse3 -mssse3 -mcx16 -msahf -ftree-vectorize -ftracer \
-ftree-loop-linear -floop-interchange -floop-block -floop-strip-mine -fgraphite-identity \
--param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 \
-fbranch-probabilities -fvpt -fexcess-precision=fast -fexpensive-optimizations -mstackrealign \
-finline-functions-called-once -fno-align-labels -fpredictive-commoning -funswitch-loops \
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fpeel-loops \
-fforce-addr -fgcse-after-reload -fivopts -fmerge-all-constants \
-frename-registers -ftree-loop-im -fsee \
${PROFILE} \
"
некоторые из -f* подключаются на native/02, но мне так надёжнее.
stasikos 10.08.2011 19:37 #
+ -1 -
А аргументы повесомее чем "два с половиной калеки" есть?
tn1 10.08.2011 19:40 #
+ -1 -
Этого недостаточно?
stasikos 10.08.2011 19:45 #
+ 0 -
Нет, недостаточно - и я как раз написал что вот только это:
-mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024
как раз таки может отобрать 20% производительности приложения. Что, собственно явно показано именно на этих калеках. Или ты из тех кто "больше флагов - быстрее приложения"? :)
tn1 11.08.2011 05:24 #
+ 0 -
> Или ты из тех кто "больше флагов - быстрее приложения"? :)
Телепат?
> -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024
Пробовал отключать при сборке gzip, потери производительности не обнаружено -> у тебя жёсткое и двойное 4.2
stasikos 11.08.2011 09:58 #
+ 0 -
>> Пробовал отключать при сборке gzip, потери производительности не обнаружено -> у тебя жёсткое и двойное 4.2
У тебя лучше аргументы есть? Или 4.2 это твой показатель нефанатичности?
tn1 11.08.2011 18:08 #
+ -1 -
> У тебя лучше аргументы есть?
Ты обкуренный, или отсутствие потери производительности не аргумент?
stasikos 11.08.2011 18:39 #
+ -1 -
Не, ну чтобы меня еще обкуреным обозвали после целого поста с результатами, которые показывают потерю производительности - такого я от этого ресурса не ожидал.
tn1 11.08.2011 19:11 #
+ 0 -
1 Результаты тестов сомнительны.
2 Ты не осилил текст после запятой.
stasikos 11.08.2011 19:25 #
+ -2 -
Сомнительные? В чем?
Ну так покажи не сомнительные-то, чего от тебя добиваются уже много дней-то. Еще и толпу своих фанатиков на меня натравил.
tn1 11.08.2011 19:34 #
+ 0 -
gzip и другой рабочий софт.
shisoid 11.08.2011 03:01 #
+ 0 -
ну и ужас )
tn1 11.08.2011 05:29 #
+ 0 -
сойдёт) не разворачиваются:
-march=native -pipe -O2
-mfpmath=sse+387 -mmmx -msse3 -mssse3 -ftree-vectorize -ftracer
-ftree-loop-linear -floop-interchange -floop-block -floop-strip-mine -fgraphite-identity(graphite)
и пара -f*
shisoid 11.08.2011 05:56 #
+ 0 -
не сойдёт
ибо графит даёт профит на очень малом кол-ве пакетов
на том же bzip2 только регресс причём овер 10%
так что думай дальше
tn1 11.08.2011 06:23 #
+ 0 -
щас допилю bench.sh и ... проверю!!!(скоро допилю
tn1 11.08.2011 06:24 #
+ 0 -
кхм ... скоро допилю
stasikos 11.08.2011 10:00 #
+ 0 -
не надо совать sudo с echo PASSWORD | sudo в скрипты, это не сработает (ну и это почти все знают) ;). Лучше тогда уже весь скрипт запускать от рута чем такие выкрутасы делать.
tn1 11.08.2011 18:15 #
+ 0 -
От root`а одна команда.
tn1 11.08.2011 23:16 #
+ 0 -
> это не сработает (ну и это почти все знают) ;)
а теперь "жри свои слова"
echo "$ROOT_PASSWORD" | sudo -S bash -c "$1"
stasikos 11.08.2011 23:23 #
+ 0 -
Ты чего такой злобный-то? :)
tn1 11.08.2011 23:27 #
+ 0 -
"" же.
lexore 14.09.2011 00:31 #
+ 0 -
NOPASSWD в visudo
tn1 10.08.2011 19:06 #
+ 0 -
> Собственно, топик навеян одним спором с человеком, который упомянул что march=native это очень круто :)
ссылку.
thebeetlebum 10.08.2011 19:13 #
+ 0 -
Это начинает напоминать передачу MythBusters. Вышел слух, и человек его проверил. И как правило эксперимент всегда можно довести до ума, как и флаги в данном случае. native крут лишь в том случае, если ты ничего кроме него не знаешь и у тебя нет времени/желания/потенции с этим заниматься. Ну и опять же. Native сильно зависит от машины. У кого-то оно даст прирост в сравнении с bin, у кого-то регресс. Надо взять того человека и посмотреть на тесты у него.
stasikos 10.08.2011 19:36 #
+ 0 -
Ссылку на что? IRC-канал? :)
hate 11.08.2011 11:29 #
+ -1 -
-march=native и моя распределенная сборка (distcc) на трех компах будет выдавать бинари кусочно-оптимизированные под разные процы. будет весело запускать!
thebeetlebum 11.08.2011 12:51 #
+ -1 -
ну так на время отключи distcc и покажи результаты своих тестов. И кстати говоря, у меня есть мнение, что ff вообще под distcc не соберется.
sanaris 25.08.2011 19:02 #
+ 0 -
Вот в том то и дело - речь идет о глобальном изменении, или только в отношении некоторого пакета. Многие пакеты не оптимизируются флагами оптимизации, имея жестко заданные.

Глобально стоит переключать только march (mtune уже включен в march, поэтому зачем его припекли еще, неясно - разница только в том, что mtune вносит несовместимый код).

Использовать ли глобально O2 или O3 - сугубо индивидуально, ибо разжирение бинарников на 30% даёт может быть процентов 5-10 скорости.
Использовать ли локально разные ключи оптимизации, коих намного больше, чем было указано - конечно использовать. На чем оптимизировать ключи? Для каждого пакета, в рамках того, насколько разработчики исходников обладали пониманием.

Есть ли какая-нибудь кукла для испытаний? Скорее всего, нет. Ибо пакеты слишком разнородны. Медиапакеты заточены на использование флагов фич процессоров. Пакеты для мультикоре не нуждаются в оптимизациях вообще. Что в остатке? Оптимизировать виджеты и разные другие рюшечки-окошечки? В общем, я не вижу смысла для себя поднимать глобально выше -O2, а лучше вообще -O. Код должен быть написан нормально, чтобы его не приходилось вообще "оптимизировать".
sanaris 25.08.2011 19:03 #
+ 0 -
mtune вносит несовместимый код
cppmm 14.09.2011 07:11 #
+ 0 -
Вообще, на современном железе заниматься подобной оптимизацией, имхо, смысла нет. Я изначально, когда ставил себе Gentoo, тоже долго вчитывался в мануалы gcc и искал максимально быстрое сочетание флагов. Но в итоге выяснилось, что это приносит прирост производительности в полпроцента(если судить в среднем по приложениям). Поигравшись с разными настройками, я пришёл к мнению, что достаточно включить оптимизацию по типу процессора(в моём случае это ARCH="amd64" и MARCH="k8") и минимум флагов, основной смысл из которых несёт -O2.
Да, возможно, если тот же firefox пересобрать, используя множество хитрых оптимизирующих ключей, он будет запускаться на полсекунды быстрее. Но при этом никто не гарантирует, что эти же флаги хорошо повлияют на какой-нибудь mplayer. И в таком случае мне эти полсекунды совершенно не нужны.

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн