LINUX.ORG.RU

[gentoo] Оптимизация

 


0

0

Пара вопросов по генте

1) Изменил флаги компиляции, как теперь пересобрать всё?

2) Заодно хотелось бы погонять тесты до и после, чтоб посмотреть разницу в быстродействии (а не только на глаз). Какие тесты посоветуете?

3) Может флаги изменить чтоб было более Ъ:

Сейчас: CFLAGS="-O2 -mtune=i686 -pipe"

По http://gentoo-wiki.com/Safe_Cflags : CFLAGS="-march=pentium-m -O2 -pipe -fomit-frame-pointer"

# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 14
model name : Intel(R) Celeron(R) M CPU 430 @ 1.73GHz
stepping : 8
cpu MHz : 1733.476
cache size : 1024 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe constant_tsc up arch_perfmon bts pni monitor tm2 xtpr
bogomips : 3472.06
clflush size : 64

Ноут Toshiba Sattelite A110

anonymous

>Изменил флаги компиляции, как теперь пересобрать всё?

emerge -e world

>Может флаги изменить чтоб было более Ъ:

>Сейчас: CFLAGS="-O2 -mtune=i686 -pipe"

>model name : Intel(R) Celeron(R) M CPU 430 @ 1.73GHz

Тяжелый случай. Тебе уже ничто не поможет.

TuxR ★★★★
()
Ответ на: комментарий от TuxR

>Тяжелый случай. Тебе уже ничто не поможет.

Да это дефолтные!! Я не занимался оптимизацией еще)) Первый раз генту поставил)

ЗЫ надо было тег [noob]

anonymous
()
Ответ на: комментарий от TuxR

>чтоб было более Ъ

Имел ввиду более Ъ чем собираюсь сделать...

anonymous
()

Ладно, тогда что насчет теста? Раз так стебались, значит прирост будет заметным =)

anonymous
()
Ответ на: комментарий от anonymous

Хм. Он просто при общении по джабберу ну просто дико похоже разговаривает и тоже решил перепоползти на гентоо.

NekoExMachina
()

$ set |grep CFLAGS
CFLAGS='-g0 -pipe -mmmx -msse -msse2 -march=pentium4 -mtune=pentium4 -mfpmath=sse -ftree-vectorize -O4 -fomit-frame-pointer'



не для генты ноут ( ставьте слаку

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

в принципе даже лучше -O2 вместо -O4 на селероне кеш короткий, O3 (O4 это паранойа) может вызывать сброс кеша инструкций

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>CFLAGS='-g0 -pipe -mmmx -msse -msse2 -march=pentium4 -mtune=pentium4 -mfpmath=sse -ftree-vectorize -O4 -fomit-frame-pointer'

чтение man gcc открыло мне, что -mtune=pentium4 включает -mmmx -msse -msse2, что до -O4, то почему не -O99 сразу? ну и -mfpmath=sse -ftree-vectorize нужны далеко не везде да и просто может привести к различным странным глюкам.

mic ★★★★★
()

Не флагами однако "оптимизация" делается. Да и что хочется оптимизировать? Может и стоит начать с того, чтобы решить, а что собственно нужно? Какая цель преследуется?

GAMer ★★★★★
()

У меня:

CFLAGS="-march=core2 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
LDFLAGS="-Wl,-O3,--as-needed"
MAKEOPTS="-j2"
USE="<> -gtk -ipv6 -doc -games -yahoo -messenger"
FEATURES="<> parallel-fetch noinfo nodoc"

Еще ccache для сборок и prelink.
Ядро самосборное, все лишнее отрезано нафиг по самые гланды, собрано тоже с оптимизацией.

По ощущениям - шустрее уже как бе некуда - ООо calc - 5-10 (в зависимости от загруженности системы) секунд первый запуск, 2-3 последющие.

Sony Vaio:
Intel(R) Core(TM)2 Duo CPU T5450 @ 1.66GHz
2x1024 DDR2 RAM
nVidia GeForce 8400

different
()
Ответ на: комментарий от fizteh

Всегда предпочитал указывать важные опции явно, а не предоставлять компилятору возможность решать самому.(может я параноик) А вдруг баг? А вдруг не поймет, что для моего камня native? Не, так надежнее.

different
()
Ответ на: комментарий от fizteh

Оно только для версий gcc 4.2 и выше. А так да, везде писать native

tensai_cirno ★★★★★
()
Ответ на: комментарий от mic

плохо man читали ) можно и -O99 как делают (или делали) в glibc но выше чем -O3 все равно не будет, глюков пока не было по поводу векторизации, ядро конечно с такими флагами не собирается (виснет сразу же при загрузке), а для приложений типичных десктопных - вполне ничего так вариант. насчет включения -mmmx -msse -msse2 флажком -mtune=pentium4 - да, возможно, но лучше включить так

Sylvia ★★★★★
()

PS: можно еще поставить Intel C/C++ compiler и собирать им, то что собирается, Qt, KDE - весьма выигрывают. По большей части совместим с GCC, но м.б. глюки.

-g0 -msse2 -mtune=pentium4 -march=pentium4 -axW -O3 -fomit-frame-pointer

флаги -ip -ipo можно добавить для сборки отдельных, как правило небольших, программ. Динамические библиотеки с -ip -ipo собирать не стоит )

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>PS: можно еще поставить Intel C/C++ compiler и собирать им, то что собирается

Недавно ставил. Т.е. и сейчас стоит, в любой момент emerge любого приложения можно переключить на icc.

Не понравилось. Уровень глюков крайне высок. Особенно мерзко, когда пакет собирается, но или не собирается, или глючит при работе другой пакет, пользующийся первым.

В общем, поиграл несколько дней и всё, что собрал под icc пересобрал снова под GCC.

Думаю со временем сделать сборку под icc только отдельных пакетов, требующих особого быстродействия. Тот же mplayer с либами попробовать в icc. Всякие bzip2/gzip и т.п. :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

я сравнивала mplayer icc vs сборка с дефолтными флагами GCC преимущества минимальны, на 15 минутных роликах (ffmpeg использовался) user cpu time отличался на 1-2 секунды (правда в пользу icc)

Qt/KDE прилично собирается ICC, из Qt приложений глюки были только с Arora (там в истории вместо даты - пустые строки)

bzip2

gzip

lzma

- да, хотя тоже как-то не очень убедительно было преимущество icc

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

Я только gzip сравнил. Получил уменьшение времени упаковки до 8.6 сек. для /bin вместо прежних 9.9 - http://www.linux.org.ru/jump-message.jsp?msgid=3172469&cid=3172756

Но если верить http://shootout.alioth.debian.org/ , то наибольший выигрышь перед GCC идёт на C++ программах.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

с lzma вот что получилось (оно на c++ как раз)

тестовый архив - mplayer1.0_svn20081029.tar (svn export)
42 997 760 байт

процессор - примерно такой как у автора топика, ноут ASUS A6

время сборки самого архиватора

compile lzma (gcc 4.3.2)

real 0m13.660s
user 0m10.345s
sys 0m1.636s

compile lzma (icc 10.1)

real 0m11.886s
user 0m9.221s
sys 0m1.796s


сжатие
-----------

$ time lzma.gcc -v test1.tar
test1.tar: 83.8% -- replaced with test1.tar.lzma

real 1m41.963s
user 1m33.202s
sys 0m1.860s

$ time lzma.icc -v test2.tar
test2.tar: 83.8% -- replaced with test2.tar.lzma

real 1m34.234s
user 1m25.677s
sys 0m1.716s




Sylvia ★★★★★
()
Ответ на: комментарий от KRoN73

без

-g0 -msse2 -axW -O4 -fomit-frame-pointer

gcc соответственно с -g0 -mmmx -msse -msse2 -march=pentium4 -mtune=pentium4 -O4 -fomit-frame-pointer -pipe -mfpmath=sse -ftree-vectorize

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

-ip

-ipo

глючат если идет сборка библиотек

make[3]: Entering directory `/tmp/ilzma/src/lzmadec'
icc -ipo -DHAVE_CONFIG_H -I. -I../.. -I../../src/liblzmadec -g0 -msse2 -O4 -fomit-frame-pointer -MT lzmadec.o -MD -MP -MF .deps/lzmadec.Tpo -c -o lzmadec.o lzmadec.c
icc: command line warning #10156: ignoring option '-O'; no argument required
mv -f .deps/lzmadec.Tpo .deps/lzmadec.Po
/bin/sh ../../libtool --tag=CC --mode=link icc -ipo -g0 -msse2 -O4 -fomit-frame-pointer -static -o lzmadec lzmadec.o ../../src/liblzmadec/liblzmadec.la
mkdir .libs
icc -ipo -g0 -msse2 -O4 -fomit-frame-pointer -o lzmadec lzmadec.o ../../src/liblzmadec/.libs/liblzmadec.a
ipo: warning #11043: unresolved lzmadec_init
Referenced in /tmp/ipo_iccrEpITM.o
ipo: warning #11043: unresolved lzmadec_decode
Referenced in /tmp/ipo_iccrEpITM.o
ipo: warning #11043: unresolved lzmadec_end
Referenced in /tmp/ipo_iccrEpITM.o
ipo: remark #11001: performing single-file optimizations
ipo: remark #11005: generating object file /tmp/ipo_iccrEpITM.o
/tmp/ipo_iccrEpITM.o: In function `main':
/tmp/ipo_iccrEpITM.c:(.text+0x10e): undefined reference to `lzmadec_init'
/tmp/ipo_iccrEpITM.c:(.text+0x18f): undefined reference to `lzmadec_decode'
/tmp/ipo_iccrEpITM.c:(.text+0x1d2): undefined reference to `lzmadec_end'
make[3]: *** [lzmadec] Error 1

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>>я сравнивала mplayer icc vs сборка с дефолтными флагами GCC

Ну в мплейере и ффмпег куча асма, так что либо отключаем при configure(ага...), либо получаем, что получаем.

GAMer ★★★★★
()
Ответ на: комментарий от TuxR

> >Изменил флаги компиляции, как теперь пересобрать всё?
> emerge -e world


Не нужно вам пересобирать все. Пересобирайте только те пакеты, для которых изменились флаги:

# emerge world -DNu

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

>Пересобирайте только те пакеты, для которых изменились флаги

Я так пониямаю, у человека CFLAGS изменились, а не USE.

KRoN73 ★★★★★
()

>Заодно хотелось бы погонять тесты до и после, чтоб посмотреть разницу в быстродействии (а не только на глаз). Какие тесты посоветуете?

лучший тест - именно на глаз. если ты не видишь разницы, то оно затраченного времени не стоило.

mic ★★★★★
()

Господи, да нету выше -O3. Чего гадать? Сделайте emerge --buildpkgonly _название_пакета_на_С_или_С++_ с флагом -O3 (пакет будет находиться в /usr/portage/packages/All), распакуйте архив, посмотрите md5sum бинарников. И соберите этот же пакет с -O4, -O5, -O6, ... -O666 и сравните суммы бинарников. И разницы не будет никакой! Вы документацию к Генту читали? Там ясно приводился исходный код gcc, где стояло условие, что если флаг выше -O3, то ставить -O3.

mikoto
()

А, ну что по поводу советов... Я прочитал на том же сайте Генту, в официальных документах, что AMD рекоммендуют использовать -O3, и собрал с -O3. Стало лучше (на глаз, но заметно лучше).

mikoto
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.