Vsevolod
вопрос в том, почему -ffast-math триггерит включение avx регистров
✙ Fatum ✙
с конца прошлого года уже нормально так завезли
оу.. я просто не кручусь в веб индустрии, я узнавала последний раз еще в 2016
Vsevolod
на годболте с -march=skylake я такого не смог добиться, а на своем лаптопе с тем же -march=skylake - смог
Ioann_
вопрос в том, почему -ffast-math триггерит включение avx регистров
Хмммм.... возможно, дело в том что фаст мас может переупорядочивать выполнение арифм операций
Ioann_
Типа было x*x*x*x
Ioann_
А стало temp = x*x
Vsevolod
эм, нет
Ioann_
Ans = temp * temp
Крылатый
но почему это сейчас делается
С -march=native на райзенах не должно делаться.
Ioann_
эм, нет
Эмммм... даааа
Крылатый
По идее
Vsevolod
он делает fma либо на двух числах, либо на четырех
Vsevolod
никаких зависимостей там нет
Vsevolod
c[1] = a[1] * b[1] + c[1]
Vsevolod
либо пара чисел, либо 4
Vsevolod
сейчас поищем владельца рыженя
Ioann_
Эмммм... даааа
Ну то есть это в силе остается. Просто оно может не применимо к конкретно твоему слачаю.
Крылатый
Ioann_
Самый простой способо все уладить - взять интринсики и написать ручками.
Vsevolod
на рыженях нет fma3?
Vsevolod
нахер мне это надо? я компилятор исследую
Ioann_
на рыженях нет fma3?
А разве нету ? У них еще кажется и fma4 был.
Vsevolod
у них бага была в fma3
Vsevolod
но ее, вроде, исправили
Крылатый
А разве нету ? У них еще кажется и fma4 был.
После Zen не будет, к сожалению.
Ioann_
нахер мне это надо? я компилятор исследую
И что ты там исследуешь ? Имхо, оптимизируют так, как оптимизируют. Но msvc хуже всех. Мы тут проверяли. Давно просто дело было.
Vsevolod
AMD Ryzen processor officially supports FMA3, but not FMA4
Vsevolod
fma4 вообще никто, кроме amd, и не поддерживает
Крылатый
> Несовместимость между FMA3 от Intel и FMA4 от AMD вызвана тем, что обе компании изменили свои планы без согласования деталей кодирования друг с другом. AMD изменила планы от FMA3 в сторону FMA4, тогда как Intel — от FMA4 в сторону FMA3, практически единовременно. Занимательно.
Ioann_
Ioann_
А так о компилях - icc, да gcc в руки и будет 'хороший' автоматический оптимизон.
Крылатый
То есть fma3 уберут :?
Так пока Zen2 нет, хз.
Крылатый
Zen+ ещё даже не вышел.
Крылатый
А так патч вот: https://sourceware.org/ml/binutils/2015-03/msg00078.html
Vsevolod
example2a: 100186976 total, 100186 avg, 0.000 example2b: 104245064 total, 104245 avg, 0.000
Vsevolod
кланг еще в три раза разогнал
Vsevolod
1,25 │190: vaddps -0x1e0(%rax,%rcx,4),%ymm0,%ymm0 2,50 │ vaddps -0x1c0(%rax,%rcx,4),%ymm1,%ymm1 1,25 │ vaddps -0x1a0(%rax,%rcx,4),%ymm2,%ymm2 1,88 │ vaddps -0x180(%rax,%rcx,4),%ymm3,%ymm3 0,62 │ vaddps -0x160(%rax,%rcx,4),%ymm0,%ymm0 1,04 │ vaddps -0x140(%rax,%rcx,4),%ymm1,%ymm1 0,62 │ vaddps -0x120(%rax,%rcx,4),%ymm2,%ymm2 1,67 │ vaddps -0x100(%rax,%rcx,4),%ymm3,%ymm3 0,42 │ vaddps -0xe0(%rax,%rcx,4),%ymm0,%ymm0 1,67 │ vaddps -0xc0(%rax,%rcx,4),%ymm1,%ymm1 0,42 │ vaddps -0xa0(%rax,%rcx,4),%ymm2,%ymm2 1,46 │ vaddps -0x80(%rax,%rcx,4),%ymm3,%ymm3 1,25 │ vaddps -0x60(%rax,%rcx,4),%ymm0,%ymm0 4,17 │ vaddps -0x40(%rax,%rcx,4),%ymm1,%ymm1 1,04 │ vaddps -0x20(%rax,%rcx,4),%ymm2,%ymm2 2,92 │ vaddps (%rax,%rcx,4),%ymm3,%ymm3
Vsevolod
вот злодей
Vsevolod
проверили на рыженях
Ioann_
Что такое рыженях ? Amd ?
Berkus
что, развернул цикл?
Berkus
Ryzen
Vsevolod
@berkus я вообще не понимаю, как он fma заменил на толпу vaddps
Vsevolod
это что-то за гранью добра и зла
Berkus
ты можешь спросить opt что он думает по этому поводу
Vsevolod
нет, это все скайлейк
Vsevolod
на рыженях жду результатов шланга
Vsevolod
http://thre.sh/stuff/cbk.txt и http://thre.sh/stuff/cbk-clang.txt
Ioann_
Ну тут код конечно, должен бы хорошо оптимизироваться. Тут 1024 дано не просто так. А именно, 1024 * 4 = 4096, что помогает избежать 4к алиасинг, и улучшить работу в tlb cache. А сами операции, явно указывают на то, что замееить их надо fma, как раз развернув цикл на четверочку.
Vsevolod
примерно те же яйца
Vsevolod
ну, что одна строка матрицы занимает страницу памяти, это понятно
Berkus
зобанить тело за флуд? как думаете
Oleg
Народ
Oleg
у меня тут возник такой вопрос по =default и =delete.
Oleg
В принципе, =delete же можно заменить переносом в приватную секцию, верно?
Aidar
нет
Oleg
почему?
Aidar
разные ошибки
Ioann_
Он видимо про поведение
Oleg
и по =default: the "default" mechanism can be used for any function that has a default. Что значит: has a default. ?
Aidar
Он видимо про поведение
ошибка это не поведение?
Oleg
разные ошибки
это понятно. В принципе, это чистой воды синтаксический сахар и ничего больше?
Кирилл
почему?
потому что сам объект сможет вызвать что-то из приватной секции
Ioann_
ошибка это не поведение?
Я не стану встрявать сюда. Ошибки разные, да.
Oleg
потому что сам объект сможет вызвать что-то из приватной секции
это да. Я про это тоже думал. И это весомый аргумент
Aidar
ну смотри: а) ты нехороший, не стоит трогать меня где ненадо б) ты шо дебил? ты сам явно указал что этого тут нет
Oleg
"Класс, покажи на этой кукле, где этот программист тебя трогал"
Oleg
=default: the "default" mechanism can be used for any function that has a default. Что значит: has a default. ?
Oleg
типа все то, что создается компилятором по умолчанию или, например, при наследовании?
Vsevolod
в общем, похоже, что шланг умудрился выкинуть кучу операций анализом data dependencies
Кирилл
Alexey
А умеет ли какой-нибудь отладчик (gdb, lldb, msvs/devenv) для плюсов ставить и останавливаться на брейкпоинте не в начале строки? То есть если есть вот такой код: foo(); bar(); baz(); zoo(); можно ли поставить брейкпоинт перед bar() а не перед foo(), а затем шагнуть к baz(), а не к zoo()?
Oleg
http://en.cppreference.com/w/cpp/language/member_functions#Special_member_functions
о, круто. А то я не знал, как нагуглить это
Aidar
обработчики брекпоинтов
Alexey
обработчики брекпоинтов
но сам по себе ведь gdb не может поставить брейкпоинт не на начало строки, то есть скрипту нужно будет от этого брейкпоинта как то (по инструкциям?) дошагать до середины?
Aidar
и ваще там можно ходить по асм инструкциям