Vsevolod
вопрос в том, почему -ffast-math триггерит включение avx регистров
Vsevolod
на годболте с -march=skylake я такого не смог добиться, а на своем лаптопе с тем же -march=skylake - смог
Ioann_
Типа было x*x*x*x
Ioann_
А стало temp = x*x
Vsevolod
эм, нет
Ioann_
Ans = temp * temp
Ioann_
Крылатый
По идее
Vsevolod
он делает fma либо на двух числах, либо на четырех
Vsevolod
никаких зависимостей там нет
Vsevolod
c[1] = a[1] * b[1] + c[1]
Vsevolod
либо пара чисел, либо 4
Vsevolod
сейчас поищем владельца рыженя
Ioann_
Эмммм... даааа
Ну то есть это в силе остается. Просто оно может не применимо к конкретно твоему слачаю.
Крылатый
Ioann_
Самый простой способо все уладить - взять интринсики и написать ручками.
Vsevolod
на рыженях нет fma3?
Vsevolod
нахер мне это надо? я компилятор исследую
Vsevolod
у них бага была в fma3
Vsevolod
но ее, вроде, исправили
Крылатый
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 в руки и будет 'хороший' автоматический оптимизон.
Крылатый
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. ?
Oleg
Oleg
разные ошибки
это понятно. В принципе, это чистой воды синтаксический сахар и ничего больше?
Кирилл
почему?
потому что сам объект сможет вызвать что-то из приватной секции
Aidar
Oleg
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
Aidar
Aidar
обработчики брекпоинтов
Alexey
обработчики брекпоинтов
но сам по себе ведь gdb не может поставить брейкпоинт не на начало строки, то есть скрипту нужно будет от этого брейкпоинта как то (по инструкциям?) дошагать до середины?
Aidar
и ваще там можно ходить по асм инструкциям