LINUX.ORG.RU

О флагах компиляции - актуально ли еще

 , ,


1

2

Возникло непреодолимое желание накатить Генту, чем наверное и займусь на выходных. Есть вопрос - нужно ли делать так

CFLAGS="march=-core2 -O2"
или лучше
CFLAGS="march=-native -O2  -mssse3  -mssse4"
cast kostik87 , megabaks

CPU Intel Pentium B980

★★★★★

Ответ на: комментарий от snaf
       -fomit-frame-pointer
           Don't keep the frame pointer in a register for functions that don't need one.  This avoids the instructions to save, set up and restore frame
           pointers; it also makes an extra register available in many functions.  It also makes debugging impossible on some machines.
megabaks ★★★★ ()
Ответ на: комментарий от megabaks

Ага, ясно. Когда я смотрел в сторону Генты там был еще 4.6.3 по умолчанию. Звучить курьезно, (почти по-идиотски), но судя по lfs это самый безглючный компилер :)

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

А если с distcc, -march=native означает «компилировать для процессора того узла, на котором случайно оказался запущенным компилятор».

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

Уже сохранил это себе до того как создавать топик. Хотелось инфы из первых рук

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

а если с distcc?

последний (стабильный) distcc тупо отказывается компилять на НЕ-локалхосте, если обнаруживает в CFLAGS -march=native

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

Если упрощенно, там где это возможно не пихает в стек адрес возврата из функции, а использует регистры, как то так извращается....

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

Ну да точно же по ссылке на русскую вики

Поэтому, в то время как использование этого флага может помочь, оно также затрудняет отладку; трассировка стека, в частности, будет бесполезна.

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

Ну так есть же всякие подвиды, разные там ревизии, подрезанный или не подрезанный кеш, не говоря уже про версии микрокода на одном и том же процессоре...

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

ты правда думаешь что это всё знает и умеет компилятор!? о_О

да и что понимается под каждым march в мане расписано.
возьмём core2 - из тех же SIMD поддерживаются все вплоть до ssse3.
это то, что умеют все 2-ые корки, а у меня вот умеет ещё и sse4.1.
поэтому уже получается -march=core2 -msse4.1.
что тут сложного и не очевидного?

megabaks ★★★★ ()

А с -O0 оно не быстрей собираться будет? Надо бы проверить. Если быстрей — подправить конфиг.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от pony

И действительно:

DISABLE="-64bit -abiword -gstreamer -bluetooth -consolekit -doc -eds -gnome -gtk3 -hal -handbook \
-joystick -kde -networkmanager -perl -policykit -pulseaudio -qt3 -qt4 -qt5 -sdl -systemd -udisks -upower -wallpapers"

USE="${ENABLE} ${DISABLE}"

Чего-то я думал, что "doc" — какая-то лишняя документация. А оказывается, туда еще и маны впихнули...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Pinkbyte

А это что за прикол?

emerge webkit-gtk
Calculating dependencies /

!!! Problem resolving dependencies for net-libs/webkit-gtk
... done!

!!! The ebuild selected to satisfy "webkit-gtk" has unmet requirements.
- net-libs/webkit-gtk-2.2.4-r200::gentoo USE="egl geoloc gles2 introspection jit opengl spell webgl (-aqua) -coverage -debug -gstreamer -libsecret -test"

  The following REQUIRED_USE flag constraints are unsatisfied:
    introspection? ( gstreamer ) webgl? ( exactly-one-of ( gles2 opengl ) )

  The above constraints are a subset of the following complete expression:
    geoloc? ( introspection ) introspection? ( gstreamer ) gles2? ( egl ) webgl? ( exactly-one-of ( gles2 opengl ) ) !webgl? ( at-most-one-of ( gles2 opengl ) )

Как Webkit установить-то теперь?

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

Установи требьбуемые юз-флаги

(RedEyedMan3)

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

Тьфу ты! И правда. Спасибо! Не знаю, зачем я эти дурацкие gles указал, если они не нужны!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от megabaks

Ну собери один с -march=native а другой с твоими любимыми и сравни что получилось. Я почему-то на 99% уверен что они будут не идентичны.

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

там где это возможно не пихает в стек адрес возврата из функции, а использует регистры, как то так извращается....

нет.

Вот такая функция

int foo(int x)
{
  int y = x+1;
  return y;
}
тут x, y лежат в стеке по соглашениям C/C++. Т.е. в памяти выделяется восемь байт, и на них указывает ebp. Компилятор оптимизирует это, занося всё в регистры. Получается одна команда, и фрейм не нужен. Ну и функция тоже очевидно не нужна, как и адрес возврата. Регистр ebx также не нужен.

как-то так.

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

А с -O0 оно не быстрей собираться будет?

быстрее. А работать медленнее. И намного.

Если быстрей — подправить конфиг.

удачи.

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

Уже поставил Генточку, буду доводить до ума. Ну, с Богом...

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

да, я прочитал потом. Кстати полезная фишка. И ничего не ломает, кроме ненужного дебагера.

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

Сегодня случайно вернулся к этой теме.

Правильно было бы сказать не использует регистр (r)ebp для сохранения текущего кадра стека и адресации локальных переменных в вызываемой процедуре относительно последнего. Обходится одним (r)esp. Что на чистой х86 архитектуре делает раскрутку стекового кадра при отладке невозможной. Более подробно описано тут

http://www.yosefk.com/blog/getting-the-call-stack-without-a-frame-pointer.html

emulek был прав :)

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