LINUX.ORG.RU

Оптимизация компилятора

 ,


1

2

Очень часто здесь говорится, в основном в контексте обсуждения gentoo, что при сборке можно получить значительную оптимизацию, но это не -Ofast -march=native и ее нужно уметь готовить.

Однако везде говорится что -Ofast -march=native вполне достаточно, все остальное - лишнее, а иногда и вредное

Так вот - что значит «уметь готовить» оптимизации?

P.S. Всем спасибо за советы, буду изучать



Последнее исправление: DMITRY (всего исправлений: 1)

компиляешь с -O2, замеряешь скорость работы, компиляешь с -O2 -march=native, замеряешь скорость работы, и так далее

ну ты понел. а ещё лучше воспользоваться pgo или вообще переписать исходники более оптимально

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

Как ее замерять то? например в случае библиотеки.

Редактировать код я не хочу, тем более речь не о одной программе, а о всей ОС

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

Упороться не забудь для начала :) Ну чтоб потом можно было заметить эти две миллисекунды ускорения.

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

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

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

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

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

Как измерить время работы программы, когда она срабатывает очень быстро?

Зачем ты оптимизируешь то, что «срабатывает очень быстро»? Хочешь «очень очень очень быстро»?

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

уже сказал

Нет, ты ничего не сказал. «Масло масленое» - «оптимизация ради оптимизации» - не создает новых смыслов.

если оно вызывается очень много раз

Вот и измеряй это.

то может повлиять

Измеряй то, что влияет.

Допустим, что такое «повлиять» (на кого или на что) никого не интересует.

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

вы о ком? я не гентушник (использую LFS) и не троль, мне просто интересно что имеется ввиду под «оптимизации надо уметь готовить»

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

в цикле повторяй бенч много раз

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

Для каждой библиотеки? когда их много сотен

Сам же сказал:

Я люблю страдать херней

=)

А вообще забей. Средний выигрыш в скорости от генты вряд ли кто заметит на глаз. Мы любим её не за это. :)

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

я о том что говорится обычно в контексте обсуждения генты.

Я использую LFS и так как сейчас я ее пересобираю заинтересовался, какие параметры можно добавить компилятору

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

Я использую LFS

Ух! И правда любишь хернёй страдать LOL. ))))

dimgel ★★★★★
()

что при сборке можно получить значительную оптимизацию, но это не -Ofast -march=native и ее нужно уметь готовить.

это не при «сборке» оптимизация, а при компиляции.

-march = native - значит при компиляции будет определяться тип проца, на котором работает компилятор и оптимизации будут выполняться под него конкретно. то есть работать хорошо будет только на данном проце. на другом может и вообще не будет работать.

-0fast - значит тебе хочется оптимизация по скорости в ущерб например размеру кода. там компилятор может инлайнить короткие функции и раскручивать циклы. зачем это надо для всей ос - не очень понятно. возможно надо для каких-то особо критических по скорости частей.

«уметь готовить оптимизацию» это скорее всего о том, что критериев оптимального кода много, способов оптимизации тоже полно и надо искать золотую середину, если так уж приспичило.

а лучше ерундой не заниматься, и спросить у дядек - какие ключи правильные для того или сего критерия. но вообще это все в доках к компилятору написано.

alysnix ★★★
()

собирайте с PGO
make profiledbootstrap
для сборки того же GCC.

Но это если реально время девать некуда, затратите гораздо больше времени на компиляцию и перекомпиляцию, чем в итоге сэкономите собрав просто с -O2

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

Напишите предельно оптимально свой оптимизирующий компилятор и откомпилируйте его своим компилятором с максимально агрессивной оптимизацией

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

что значит march и -O я знаю, доки компилятора я смотрел

DMITRY
() автор топика
Ответ на: комментарий от dimgel

Есть такие вещи как стабильность и безопасность, при выборе дефолта они очень важны, но мне на них абсолютно плевать

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

Одно другому не мешает, можно и LTO и PGO

-flto

-fprofile-generate затем -fprofile-use, после использования бинарников (кстати и библиотеки тоже можно), собранных с -fprofile-generate


таким образом вам придется перекомпиливать каждую программу по два раза, особенно много радости принесут профилирование вебкитов, фаерфокса, либреофисе итп


для желающих экспериментировать есть -fauto-profile (AutoFDO)


поначалу интересно, после пары обновлений - надоедает, затрат времени не оправдывает.

Sylvia ★★★★★
()

выкладывай исходный код, это самая быстрая и лучшая оптимизация для конечного пользователя, проверено

nanosecond
()
Последнее исправление: nanosecond (всего исправлений: 1)
Ответ на: комментарий от nanosecond

исходный код чего? я если что в development написал потому что связанные с компиляцией вопросы по мойму сюда весьма подходят.

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

вот для libc как раз не стоит.
Ни стабильности, ни производительности вы с этого не получите.
Более того, оно может даже и не собраться.

Оптимизировано там уже давно все и так, втч и asm вставками.

Sylvia ★★★★★
()

Основная оптимизация в Gentoo (и всех остальных дистрибутивах на самом деле) это выпиливание всего ненужного из системы на всех уровнях. Не нужна тебе поддержка wifi в ядре стационарного ПК или сервера, убираешь, вырезая всё ненужное железо и фичи. Ядро значительно худеет и быстрее загружается. Не нужна тебе поддержка av1 в ffmpeg-е, туда-же её. Смысл не в том, что компилятор на пару тактов под твой проц быстрее соберёт, а в том, что то что тебе не надо не будет загружаться, начиная с GRUB-а. Но для этого ты должен знать что тебе надо, а что не надо и что предпочтительнее другого. Но в общем случае это много ручной возни под себя. Такое выбирают не чтобы пострадать только когда очень чётко понимают чего именно хотят получить на выходе, поскольку писать конфиги и собирать систему придётся самому.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от DMITRY

Не верю. Если ты используешь оконный менеджер и лёгкое окружение, то похудение ядра в 2 раза ускорит загрузку в 2 раза. А 1 секунду от 2 вполне можно отличить. Но нужна ли тебе экономия этой секунды - спорный вопрос.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Прям очень много возни. export USE, emerge все готово

Про ядро тут не говорю, я уже почти все лишнее и не лишнее по отключал. Я с зависимостями борюсь очень много, в том числе правкой исходников, всякого мусора у меня в системе почти нету. Ну может пара либ которые required к куче программ, типо fribidi.

А систему я и так сам собираю.

DMITRY
() автор топика
Ответ на: комментарий от peregrine

Использую gnome и не смотря на все мои старания, он остается дико жирным. Про ядро я тут не говорю. По поводу загрузки - systemctl disable/редактирование init скриптов надо, лишние бинари которые просто лежат ее не тормозят

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

ну если у тебя на 5 библиотек получится улучшение, то можно сделать разумное предположение, что и на сотнях других будет улучшение.

IvanR ★★★
()

Есть один момент, на сколько я знаю, бывает так что при сборки -march=native, компилятор по дефолту задействует далеко не все процессорные инструкции, которые есть. Если указать, например, -march=corei7, то код будет оптимизироваться на уровне asm под конкретную платформу. У меня по крайней мере с подобной опцией, выхлоп прироста получается +2-5%, но программа более стабильнее работает, в плане качества. Здесь вопрос нужно более обширно поставить, что лучше автоматическая оптимизация при сборки vs человеческая оптимизация в ручную. Что лучше - я не знаю. Но я баловался с различными опциями, и могу сказать, бывает как огромный прирост производительности в разы, а бывает сильная деградация. Это больше напоминает черную магию вуду с заклинаниями и соотвествующим результатом.

nager
()

при сборке можно получить значительную оптимизацию

А то! До 100%, надо просто выбирать дистр с бинарным кешем.

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

Я не занимаюсь выбором дистрибутивов, я сейчас пересобираю LFS (серьозно повредил систему) и хочу выставить флаги оптимизации.

DMITRY
() автор топика
Ответ на: комментарий от peregrine

да я знаю, но мне он привычный.

DMITRY
() автор топика
Ответ на: комментарий от nanosecond

посмотрю, думаю все это можно и к LFS прикрутить

DMITRY
() автор топика
Ответ на: комментарий от nager

выхлоп прироста получается +2-5%, но программа более стабильнее работает, в плане качества.

ой все.

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

программа более стабильнее работает, в плане качества

Чё ёпт.

-march=native, компилятор по дефолту задействует далеко не все процессорные инструкции, которые есть. Если указать, например, -march=corei7, то код будет оптимизироваться на уровне asm под конкретную платформу

Ровно наоборот. -march=native под конкретный проц, -march=corei7 не всё включает.

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