Pepe 🐸
но я не эксперт в этом
Vsevolod
и где же примеры пользы от такого ускорения
Pepe 🐸
и где же примеры пользы от такого ускорения
мм.. ну я не знаю примеры продакшн кода, но в интернете есть toy problems, которые выглядят вполне обычно
Vsevolod
с современными конвеерами это все тлен
Vsevolod
там у тебя спекулятивно успеет выполниться все, из-за чего вся эта мышиная возня
Vsevolod
возможно, в эмбедщине есть какой-то профiт
Pepe 🐸
с современными конвеерами это все тлен
на тестах с оптимизациями компилятора (по моему в блоге нвидиа было) прирост в 2-3 раза.
Pepe 🐸
на обычном процессоре, я уже забыл каком
Vsevolod
https://devblogs.nvidia.com/cuda-pro-tip-optimize-pointer-aliasing/ ,
Vsevolod
?
Pepe 🐸
на тестах с оптимизациями компилятора (по моему в блоге нвидиа было) прирост в 2-3 раза.
естесственно такой прирост скорости только куска кода может ни на что не влиять
Vsevolod
ща затестим
✙ Fatum ✙
раньше не могли, сейчас можем т.к. завезли wasm
ого, когда завезли? я все еще в танке? о_О
Berkus
ого, когда завезли? я все еще в танке? о_О
с конца прошлого года уже нормально так завезли
Ioann_
да
Так рестрикт это кудовое же. И да, он помогает, но скорее всего потому, что компиляторы под цуду так себе оптимизируют. Если даже многолетние цхх компили не во все умеют. Далеко не во все.
Ioann_
А так, еще можно register сюда вставить. В стандарте оно убралось, а ускоряет тем не менее.
Ioann_
Хотя я досканальных тестов такого поведения не проводил, но вроде ускоряло дык точно.
Ioann_
не только. еще в С было в 99.
Буду знать. Си(именно си и его стандарт) это конечно своя ипостась.
Vsevolod
thinkpad% ./a.out example2b: 3134241098 total, 3134241 avg example2a: 3176701688 total, 3176701 avg
Vsevolod
% ./a.out example2a: 3288153556 total, 3288153 avg example2b: 3266144368 total, 3266144 avg
Vsevolod
перепутал a и b
Vsevolod
https://dpaste.de/qHOm
Vsevolod
gcc version 7.2.0 (Ubuntu 7.2.0-8ubuntu3) -O3
Vsevolod
% ./a.out example2a: 13334621960 total, 13334621 avg example2b: 13000839870 total, 13000839 avg
Vsevolod
вот с -O0
Vsevolod
clang вообще эту функцию выкинул, бгг
Ioann_
Я думаю, что твой код можно ускорить еще
Vsevolod
я взял пример из блога нжидии
Vsevolod
ничего не менял там, кроме rdtsc
Pepe 🐸
хм... любопытно. надо перечитать что там написано
Ioann_
Ну пусть. Видимо это кой то специфик пример, для указания конкретного случая.
Vsevolod
% ./a.out example2a: 381534136 total, 381534 avg example2b: 381805094 total, 381805 avg
Vsevolod
-ffast-math
Vsevolod
ровно в 10 раз быстрее
Ioann_
ровно в 10 раз быстрее
Это ты про то что фаст мас дает такой прирост ?
Vsevolod
да, про это
Vsevolod
а вот рестрикт этот ни хера не дает
Ioann_
Ну он если что и ieee стандарт нарушает
Vsevolod
кто нарушает?
Ioann_
Фаст мас
Vsevolod
fast-math?
Ioann_
Да
Vsevolod
да и плевать на него
Vsevolod
мы ж ПЕРФОРМАНС меряем
Ioann_
Я бы так не стал говорить, громко.
Pepe 🐸
Ioann_
Как бы можно тогда весь код вырезать и сказать что он под нолик работает
Vsevolod
https://godbolt.org/g/gpVwtD
Vsevolod
clang так и сделал, кстати
Berkus
шланг не дурак
Vsevolod
зацените, кстати, портянку с fast-math и example2b
Vsevolod
а скорость одинаковая
Vsevolod
еще и rep ret зачем-то вмазал без fast-math
Vsevolod
это же какие-то преданья старины далекой
Berkus
еще и rep ret зачем-то вмазал без fast-math
Basically, there was an issue in the AMD's branch predictor when a single-byte ret immediately followed a conditional jump as in the code you quoted (and a few other situations), and the workaround was to add the rep prefix, which is ignored by CPU but fixes the predictor penalty.
Vsevolod
да
Vsevolod
это я в курсе
Vsevolod
но почему это сейчас делается
Vsevolod
и почему этого нет в -ffast-math
Ioann_
Если нужен быстрый код - vTune тебе в руки. Но оптимизировать - уметь надо. Пояииать intel optimisation guide точно стоит
Ioann_
Там в идеале, под каждую новую микроархитектуру - свой, отдельный "дубляж" кода будет.
Ioann_
Учитывающий те или иные специфики микроархитектуры.
Vsevolod
чиво?
Vsevolod
при чем тут rep ret и -ffast-math
Vsevolod
о, а я понял, почему у меня -ffast-math такой резвый
Vsevolod
а на годболте он таким не будет
Ioann_
А почему ?
Vsevolod
8,42 │ add $0x4,%rax ▒ 25,65 │ vaddss %xmm0,%xmm2,%xmm2 ▒ 0,60 │ vfmadd %xmm0,%xmm0,%xmm1 это без fast-math 18,95 │ vaddps %ymm4,%ymm0,%ymm0 3,63 │ vfmadd %ymm4,%ymm4,%ymm2 а это с
Vsevolod
с fast-math он врубил avx2
Vsevolod
а без него чо-то не стал
Vsevolod
и там, и там
Ioann_
Поставь. У тебя avx2
Vsevolod
что поставить?
Ioann_
Код в одном месте, а в другом что то типа SSE