На дворе 2022 год



Мы находим оптимизации в mem*/str* функциях на мажорных платформах в 20%, которые были доступны как лет 10



Да, это патч в glibc.



В целом история такая: на x86 достаточно легко переходить из векторного кода в скалярный -- если есть вектор сравнения на gif, то на x86 есть PMOVMSKB инструкция, дающая скалярную маску



На ARM такого нет, и все ломали голову как же так сделать. Даже в glibc инженеры Arm делали через 4 цикла и просаживая latency.



Поизучав NEON SIMD, я нашёл инструкцию shrn -- shift right and narrow. На гифке представлен shift right and narrow на 4. Теперь у нас есть маска, не 16 битная, но хотя бы 64, с которой уже можно скалярно работать.



Что произошло в итоге:



1. ZSTD на 5%

2. Хэштаблицы гугла на 3-8%

3. glibc на 10-20% для размеров <=128

4. ClickHouse -- string comparison and sorting на 15%

5. Через 2-3 недели ждите статью, да, это software optimization guide. 3 года назад я студентом увлёкся армами, а вот сейчас я буду писать гайды совместно с вендорами



Mic drop