Дописал статью про SIMD в Go 1.27, она уже на Хабре.
Позавчерашний пост с косинусной близостью был разминкой: вектор на 768 float32 там проиграл скаляру, и я полез разбираться, где SIMD реально ускоряет, а где просто греет процессор. Раскопал на целую статью.
Что внутри:
- Один Go-код без строчки ассемблера разворачивается в Neon на Mac и в AVX2 на Intel. Проверил дизассемблером на M3 Pro и i9-14900KF
- 8 полос не дали 8x: большую часть выигрыша приносит разрыв цепочки зависимостей, а не ширина регистра. Четыре обычных аккумулятора без всякого SIMD дают 3x из 5
- В бинарнике лежит буквальный switch по ширине вектора, а мёртвую ветку AVX-512, которую Intel выжгла в моём i9, я всё равно запустил через эмулятор
- Mac держит свои 4x хоть на 256 МБ, i9 за пределами L3-кэша сдувается с 5x до 2,2x
- Где вектор не окупается и почему в прод это тащить рано
Весь код запускается копипастой из репозитория, ссылка в статье.
https://habr.com/ru/articles/1062972/
Post #107
178

- 🔥 3