Size: a a a

Конференция C++ Russia

2021 November 21

AV

Ashot Vardanian in Конференция C++ Russia
Я в этом году не выступал, но немного поучаствовал в докладе Дениса про SIMD инструкции. Хочу немного продолжить эту тему.

Два года назад, перед моим первым докладом про SIMD, я любил разбирать Capstone-ом бинарники и смотреть какая нагрузка идет на какие регистры. Мы в HPC часто концентрируемся на микро-оптимизациях вдоль горячего пути прохода данных, но часто забываем, насколько много кода остается вне нашего поля зрения. Я прогнал простенький скрипт на паре моих Linux/MacOS машине с процами двух последних поколений и достаточно свежими бинарями. Заняло несколько часов, просмотрено было около 4000 бинарников. В итоге, SIMD регистров касается менее 1% процента общего пула инструкций. Почти все приходится на 128-битные инструкции.  Подозреваю, что большая часть приходится на всякие memcpy примитивных стуктур вроде { uint64_t a, b; }.

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

https://unum.am/post/2021-11-21-simd-popularity/
источник

DK

Dmitry Kazakov in Конференция C++ Russia
Но при этом не стоит забывать, что в глубокой оптимизации нуждается не все 100% кода. Поэтому мне эта метрика кажется несколько странной :)
источник

AV

Ashot Vardanian in Конференция C++ Russia
Yes, for sure. Not the best metric, but still a relevant one. Especially, once you build charts for SSE and AVX2 side by side. We have had AVX2 capable CPUs for 8 years, yet the compilers almost never generate those instructions for a miriad of reasons)
источник

DK

Dmitry Kazakov in Конференция C++ Russia
А "почти все приходится на 128-битные регистры" --- людям нужны переносимые бинарники, поэтому только SSE2 на 64-битных архитектурах
источник

AV

Ashot Vardanian in Конференция C++ Russia
Yes, I wrote that in my post. Yet there is simdjson, which properly chooses the backend at runtime and ships will all optimizations out of the box.
источник

DK

Dmitry Kazakov in Конференция C++ Russia
To tell the truth, glibc and libstdc++ on Linux has runtime dispatching for per-architecture versions of its functions. That is, it will use AVX2 on AVX2-capable CPU for standard functions.
источник

DK

Dmitry Kazakov in Конференция C++ Russia
(which causes really hard-to-debug issues if ffast-math is enabled, and AVX might be disabled without ffast-math, because some of its functions are incompatible with c++ standard)
источник

DK

Dmitry Kazakov in Конференция C++ Russia
Btw, as far as I can tell from the brief look in the article, such libc-based dispatching will not be detected by the capstone, therefore it'll not be counted in the metric.
источник

AV

Ashot Vardanian in Конференция C++ Russia
Would depend on linking I guess
источник

AV

Ashot Vardanian in Конференция C++ Russia
The heaviest binary most likely link statically and should contain the AVX backends inside the distributed package, so it should be counted on top
источник

DK

Dmitry Kazakov in Конференция C++ Russia
Well, standard dynamic linking. Afaict, there are some of trampoline functions, which detect architecture on the first call. At least that is how it looks from the debugger side.
источник

DK

Dmitry Kazakov in Конференция C++ Russia
Static linking to libc is a recipe for disaster, afaik :)
источник

AV

Ashot Vardanian in Конференция C++ Russia
Probably, not the best plan))) Still, when we open up Godbolt, the first thing we look at - is the number of assembly lines, and only then - whats in them.The first step is done, so now I am inviting everyone to join me analyzing them)
источник

DK

Dmitry Kazakov in Конференция C++ Russia
Godbolt doesn't show this dispatching. I checked that
источник

DK

Dmitry Kazakov in Конференция C++ Russia
It happens in /lib/libc.so
источник

DK

Dmitry Kazakov in Конференция C++ Russia
Godbolt just shows "jump to libc:rint"
источник

IL

Ilya L in Конференция C++ Russia
источник

NY

Nikita Yegorov in Конференция C++ Russia
/spam
источник

Д

Денис in Конференция C++ Russia
народ ,а подскажите, группы где можно вакансии для сишников публиковать ?
тут нельзя, я так понял.
источник

SP

Sergey Platonov in Конференция C++ Russia
источник