Злая оптимизация
Предлагаю дискас на тему злой и вредной оптимизации системы.
Дисклеймер: да, я знаю, что ничего не знаю, что всё есть в мане, что лучше -O2 -march=native -pipe
ничего нет, ССЗБ, никто не поможет, всё можно сломать и всё субъективно.
Теперь вопросы:
1) Какой процессор, система?
2) Какие флаги компиляции/линковки (C*FLAGS, LDFLAGS) вы используете, и почему, как, к чему и насколько они дают прирост? Иногда знаний не хватает (или лень читать), поэтому было бы здорово услышать простым и понятным языком, что даёт та или иная опция (например, злосчастная -ftree-vectorize), какие подводные камни и последствия.
3) В чём польза или вред no-multilib
, от чего придётся отказаться и как это восполнить, что получаем взамен?
Расскажу немного сам: проц Core2Duo T5780, ~amd64. Играл с флагами -floop-* и -mfpmath=sse -msse*, замечал прирост скорости кодирования flac на несколько секунд при больших файлах (до 1Гб). Зато Qt-core не хочет собираться с -mfpmath=sse -msse* : для неё персонально пришлось выставить только простые -O2 -march=native -pipe
.
А что вам есть рассказать?
- Для комментирования войдите или зарегистрируйтесь
Core 2 E4550 / 2 Гб Ram / NVidia 8600 GT 256 Mb
Юзал на Core 2 Quad Q6600 и юзаю сейчас это:
взято с wiki (cpu safe flags). разгон не юзаю, специальные флаги тоже. я очень сомневаюсь что они дадут прирост например > 10-20%, а ниже... мне кажется незачем комп насиловать)
Но при возможности сборки на мощном быстром компе - я ЗА эксперименты. :)
alex__ написал(а): Какой
System uname:
. GCC с флагами
fortran graphite lto mudflap nls nptl openmp
, но прикрутить lto пока ещё не получилось (работаем над этим) ;-)CFLAGS=CPPFLAGS=CXXFLAGS="-O2 -pipe -g0 -march=native -mtune=native -fivopts -fno-align-labels -fno-align-loops -fpredictive-commoning -ftree-vectorize". Почему именно эти - имхую для них одновременное выполнение 2-х условий (эффективность+безопасность) по результатам чтения манов GCC, статей Криса Касперски, др. публикаций с глубоким последующим гуглением по заинтересовавшим опциям и проверкой рез-тов последовательно на тяжёлых пакетах, toolchain, @system, @world на разных (но не сильно отличающихся) железках
Вопрос сложный и лукавый. Вести об этом речь есть смысл на основе статистики, методически различных тестов, etc, что требует быть не энтузизистом, но фанатом. А "на глаз" все приросты нивелирует система APM, не отключать же её специально!..
За что же вы её так - злосчастная? А вообще, ваш вопрос ("та или иная") тянет даже не на статью, но на цикл статей... Конкретно же по векторизации - см., к примеру, здесь
Отказаться придётся от софта, в принципе не существующего на текущий момент для 64bit (как правило, различная бинарная проприетарщина, точно знаю - skype, возможно Nero и пр. неправославная хрень). Из опенсорцев знаю такую беду только для wine и grub2. Взамен получаете уменьшение хлама на диске в виде набора 32bit либ, и, соотв., ускорение компиляции как раз за счёт ненужности этих самых 32bit либ, если они предоставляются конкретным пакетом
Дык, актуальная версия портежа вполне себе предоставляет возможность указания опций для любого пакета индивидуально. Но, вроде как, для x86_64 арифметика (fpmath) и так векторизована посредством SIMD, пока вы сами это не запретите, так что данный флаг не при делах, имхо...
Мы тоже не всего читали Шнитке!.. © В. Вишневский
thx за инфу!
По поводу арифметики SIMD и -mfmpath=sse — оно, может быть, так и есть, но Qt не собиралась. Могу даж попробовать ещё раз, и выложить логи.
По поводу остального: можешь поделиться хорошимы ссылками на инфу? Исхожу из того, что человек может посоветовать что-то, что будет трудно нагуглить.
И, всё же — что дала тебе оптимизация? пусть даже и субъективно?