Evgeniy
вот этот золивар вкратце https://forums.gentoo.org/viewtopic-t-1060738.html?sid=17bb40319024e0d95fac5c0bd5b328cd
🐙 Antony
-Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for all standard compliant programs. вот этот момент я не понял
оно включит -ffast-math, что может поменять порядок вычисления float и немного поменять итоговый результат
Alexander "SonnySlave"
Другое поведение при UB — не аргумент? То есть, я понимаю, что это аргумент в первую очередь исправить код, чтобы там UB не было.
UB здесьь вообще не имеет значения. Твоя программа невалидна. и любые споры с такой программой на тему "компилятор поменял поведение" не имеют смысла 😊
Vsevolod
мне просто лень печатать такие длинные слова
Vsevolod
суть от них не меняется
Vsevolod
-O3 != -Ofast, а вот рекоммендаций про -O2 я все равно не понимаю
Igor
оно включит -ffast-math, что может поменять порядок вычисления float и немного поменять итоговый результат
т.е. optimizations that are not valid for all standard compliant programs подразумевает "мы будем вычислять флоаты быстрее но менее точно", а не "ваша standard-compliant программа отныне больше не compliant, мы творим что душе угодно"?
Oleg
UB здесьь вообще не имеет значения. Твоя программа невалидна. и любые споры с такой программой на тему "компилятор поменял поведение" не имеют смысла 😊
Именно так, ровно об этом второе предложение. Иногда разве что это помогает. Если программа работает с -O2, но валится с -Ofast, понятно, какого рода проблему искать.
Vsevolod
про -ffast-math в мане все написано
Vsevolod
-freciprocal-math точно может поменять результат
Vsevolod
вместо a / b будет a * (1 / b)
Alexander "SonnySlave"
Именно так, ровно об этом второе предложение. Иногда разве что это помогает. Если программа работает с -O2, но валится с -Ofast, понятно, какого рода проблему искать.
ну если прогрмма валиться с разными уровнями оптимизаций, то: 1) Прогнать санитайзерами вдоль и поперёк 2) Попытаться глянуть, что же нагенерилось и где падает 3) Репортить баг в компилятор 😊
Vsevolod
sqrt будет вычисляться через reciprocial sqrt + пара итераций метода Ньютона
Vsevolod
итд
🐙 Antony
я канпилю все пакеты для продакшена исключительно с -O3
-O3 может давать результат хуже, чем -O2. В -O3 оптимизации, которые хорошо показывают себя на небольших бенчмарках, но в реальных программах могут сделать хуже засчет агрессивного разворачивания циклов => увеличения размера бинарника => непопадания инструкций по горячему пути в кеш инструкций
Vsevolod
а у меня fast-math еще и волшебным образом включил avx
Vsevolod
@antoshkka может, кот бы спорил, но это надо дикую кашу в коде сделать
Vsevolod
там надо деинлайнинг делать в первую очередь
Igor
@antoshkka может, кот бы спорил, но это надо дикую кашу в коде сделать
ннну вот это в принципе и есть основной аргумент за О2 вместо О3 - чтобы дополнительные оптимизации не раздули код и тот не перестал влезать в кэш
Vsevolod
да блин, у современных процессоров очень большие кеши
🐙 Antony
@antoshkka может, кот бы спорил, но это надо дикую кашу в коде сделать
Любой большой проект не занимающийся тяжёлыми числодроблениями (Firefox, OpenOffice, GCC)
Vsevolod
и префетч отлично работает
Vsevolod
если нет каких-то нелокальных вызовов, то все хорошо
🐙 Antony
и префетч отлично работает
Увы, он не работает для icache в случае с jmp Сейчас пруфы скину
Igor
да блин, у современных процессоров очень большие кеши
ОЗУ тоже выше крыши, но на джаву и файрфокс всё ещё катят бочки :)
Vsevolod
в этом случае должен быть jmp больше размера кеша
Крылатый
ОЗУ по прежнему медленная, сколь её не было бы.
Vsevolod
32 кб - это вообще до фига
Alexey
вообще, кажется, имеет смысл делать PGO если производительность настолько важна, что не можем выбрать между O2 и O3.
Vsevolod
у рыженя, кстати, 64k
Vsevolod
а вот во времена P4 icache был всего 8k
🐙 Antony
Из An optimization guide for Windows, Linux and Mac platforms by Agner Fog * The unrolled loop takes up more space in the code cache or micro-op cache. * Loop unrolling should preferably be avoided on processors with a micro-op cache (e.g. Sandy Bridge) because it is important to economize the use of the micro-op cache. * Excessive loop unrolling is not optimal because it takes too much space in the code cache and it fills up the loop buffer that some microprocessors have. In some cases it can be useful to turn off the loop unroll option in the compiler.
Alexander "SonnySlave"
вообще, кажется, имеет смысл делать PGO если производительность настолько важна, что не можем выбрать между O2 и O3.
если мы уходим совсем глубоко, то тогда PGO + включение каждой оптимизации напрямую ключом с постоянным подбором этого самого золотого набрра ключей под твой софт
Vsevolod
но вы забываете, что кеши высоких порядков тоже используются для инструкций
Alexey
если мы уходим совсем глубоко, то тогда PGO + включение каждой оптимизации напрямую ключом с постоянным подбором этого самого золотого набрра ключей под твой софт
а если еще глубже, то, возможно, имеет смысл посмотреть на алгоритмы и сделать их более дружественными к железу 😊 а может и более дружественными к математике например.
Vyacheslav
я раньше так и делал, но меня бесит куча передаваемых параметров в одни скобки) Не, если так правильнее, я готов
можно как вариант unordered_map передавать в качестве параметра, где ключ - имя параметра но не знаю, это true way в C++? в Perl для передачи параметров зачастую используются хэши
onl1ner
Привет ребят
onl1ner
Есть кто живой?
Danil
привет, лучше сразу с вопросом)
onl1ner
Какие проекты можно написать на с++
🦥Alex Fails
Любые
onl1ner
И вообще какие пишут, может у кого был опыт в этом деле
onl1ner
Просто совет, что можно реализовать идей вообще 0
Danil
если их можно делать не на с++, возможно стоит задуматься и не делать их на с++
onl1ner
А у меня только год
Danil
ну просто во многих проектах с++ не нужен, но их почему то на нем начали, по итогу сложно, дорого поддерживать и т.д.
Danil
ты что сделать-то хочешь
Danil
проекты можно любые делать на с++
Danil
тут вопрос а нужен ли он для них
onl1ner
Я в школе учусь, нужен проект чтобы был опыт и это плюс при поступлении в институты(я думаю вы знаете)
onl1ner
Вот зашёл спросить что можно реализовать
Danil
у нас в россии кто-то смотрит на проекты твои перед институтом?
onl1ner
Хах, я вот сам то не с России
onl1ner
Присматриваю себе вуз
onl1ner
Пока не определился
onl1ner
Просто так и так это плюс для меня в плане опыта
onl1ner
Что то пытался на флеше сделать, забросил
Vsevolod
а где смотрят перед институтом?
Vsevolod
Blablabla а школьники могут участвовать в google summer of code?
onl1ner
Не знаю
Danil
во всяких забугорных вузах интервью, как на работу прям
Vsevolod
ну и я думаю, что это тема для соседней флудилки, не?
Danil
думаю да
Alexander "SonnySlave"
попрошу всех интересующихся темой туда
onl1ner
А это про что?
onl1ner
Эта*
Danil
это чат про сиплюсплюс
onl1ner
Ладно, понял
onl1ner
Ну спасибо что отвечали хотя бы :)
Vsevolod
я прочитал, ага, хотя надо, чтобы мою поделку в него приняли (хотя должны, вроде)
Олександр
Для школьников есть Code-In.
Alexander "SonnySlave"
@antoshkka есть какие-то пропозалы на тему включения длинной арифметики в С++ Стандарт (не статической аки wide_int, а динамической)
Alexander "SonnySlave"
а ну Anton кастуется тоже 😊