LINUX.ORG.RU
ФорумTalks

Почему не -O3, а -O2?


0

4

При современных объёмах кэшей микропроцессоров, объёмах ОЗУ и жёстких дисков... почему всё-таки по умолчанию все приложения компилируются с -O2, а не -O3? Ведь теоретически O3 за счёт некоторого перевеса в суммарном объёме сгенерированных инструкций (и, соответственно, увеличении времени первоначальной подгрузки приложения) позволяет быстрее, эффективнее исполнять код.
И ещё... вот есть в ассемблере инструкции условного перехода короткого действия типа jc, je, loop и пр. Они действуют действительно коротко - по крайней мере когда я писал на асме они не давали возможности прыгнуть дальше, чем на 255 байт вперёд или назад. А как интересно компилятор,раскрывая циклы, решает проблему, ведь нагромождение их нескольких инструкций с безусловным jmp будет явно не быстрее одиночного условного перехода работать?

★★★★★

> почему всё-таки по умолчанию все приложения компилируются с -O2, а не -O3?

на -O3 вылазят баги в коде, которые разработчики считают багами в gcc

aho
()

Чтобы стабильнее работало

Un
()

А какие сейчас объёмы кэшей? У меня на последнем уровне 512К на ядро, смысл от -O3?
И ты часто видел bottleneck именно в недостаточной тактовой частоте процессора, а не недостаточном кэше/медленной RAM/медленном HDD?

x3al ★★★★★
()
Ответ на: комментарий от post-factum

Я делаю так: кодеки, архиваторы, шифровальщики, базы данных собираю с

CFLAGS="-march=corei7-avx -mtune=corei7-avx -Ofast -pipe -mfpmath=sse -msse4.2 -ftree-loop-distribution -ftree-vectorize -fgraphite-identity -fexcess-precision=fast -ffast-math -Wno-all"

остальное с:

CFLAGS="-march=corei7 -mtune=corei7 -O2 -pipe -mfpmath=sse -msse4.2 -Wno-all"

Так, по крайней мере, никаких багов и падений нет. Насчёт прироста скорости тоже ничего не могу сказать - просто не проводил замеры. Надо будет как-нибудь заморочиться

Un
()

> И ещё... вот есть в ассемблере инструкции условного перехода короткого действия типа jc, je, loop и пр. Они действуют действительно коротко - по крайней мере когда я писал на асме они не давали возможности прыгнуть дальше, чем на 255 байт вперёд или назад.

Есть формы Jcc с 16- и 32-битным смещением. См. Intel Software Developer's Manual vol. 3A. Вот loop да, только 8-битное.

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

Расскажи-ка, как ты задаёшь отдельные CFLAGS для пакетов?

Lighting ★★★★★
()

Создаёшь каталог /etc/portage/env, в который кидаешь каталоги, именованные по нужным категориям (например, media-libs). В этих каталогах создаёшь файлы под именами нужных пакетов (например, libmatroska), в файл вносишь строку

CFLAGS="..."
Un
()

То есть, выглядит так:

nona frag # cat /etc/portage/env/media-libs/
a52dec         faad2          libcuefile     libmatroska    libogg         libsdl         libvorbis      qimageblitz    x264
faac           flac           libjpeg-turbo  libmpeg2       libpng         libtheora      libvpx         tiff           xvid

nona frag # cat /etc/portage/env/media-libs/x264 
CFLAGS="-march=corei7-avx -mtune=corei7-avx -Ofast -pipe -mfpmath=sse -msse4.2 -ftree-loop-distribution -ftree-vectorize -fgraphite-identity -fexcess-precision=fast -ffast-math -Wno-all"
Un
()

Озон вреден в больших количествах

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

Почему-то, прочитав комментарий, я подумал про -CH4

michwill ★★★★★
()

op-ti-mize [verb (trans.)]* ... (gcc) to modify executable code so that it fails more quickly.

quantum-troll ★★★★★
()
Ответ на: комментарий от Shtsh

Нафиг. Слишком муторно заморачиваться.

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

Я свои велосипеды постоянно с O3 собираю. Пока косяков, связанных с оптимизацией, не замечал.

Eddy_Em ☆☆☆☆☆
()

Вообще, насколько мне известно, фишки из О3 после того, как начнут стабильно работать, переносятся в О2.

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

Какая разница, почему. Переписать их я все равно не смогу.

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

ЕМНИП они и так стабильно работают. Просто не каждый быдлокод при жесткой оптимизации работает правильно.

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

При чём тут быдлокод и правильно? O3 может быть медленнее, чем O2.
А ускорять код должны кодеры, а не компилятор (зачем я пишу это в тред, полный гентушников…)

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

При чём тут быдлокод и правильно?

Жесткая оптимизация в многопоточных приложениях дает кучу приключений тем, кто не знает все её особенности.

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

Для corei7-avx не надо разве указывать -mavx вместо -msse4.2? И зачем -f флаги, которые уже есть в -Ofast?

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

>Жесткая оптимизация в многопоточных приложениях дает кучу приключений тем, кто не знает все её особенности.
То есть «быдлокодеры» должны подстраиваться под gcc (даже если не используют его)? Только ради того, чтобы гентушники лишний раз скомпилировали с O3?

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

То есть «быдлокодеры» должны подстраиваться под gcc (даже если не используют его)? Только ради того, чтобы гентушники лишний раз скомпилировали с O3?

При чем тут «подстраиваться под gcc»? Надо знать, какие оптимизации в языке разрешены и не надеяться на их отсутствие (тебе это, пожалуй, неведомо). Синхронизируются на булевых флажках (или на volatile без барьеров), а потом удивляются почему код не работает. А виноватым gcc считают, да.

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