https://habr.com/ru/articles/1062972/
Раз уж в Go завозят SIMD, вот хороший разбор по нему.
Начинается с ликбеза — как процессор вообще складывает числа, что такое векторные регистры и полосы, почему одна инструкция может сложить восемь чисел за раз. Дальше автор берёт go1.27rc2 и проверяет всё руками на двух машинах: M3 Pro и i9-14900KF.
Напомню, что в 1.27 под флагом
GOEXPERIMENT=simd обещают портируемый пакет simd: типы вида Float32s, у которых ширина неизвестна на этапе компиляции. Компилятор кладёт в бинарь четыре ветки (@simd0/128/256/512) и на рантайме выбирает нужную.Основные тезисы разбора:
- Дизассемблер:
FADD против VADDPS- Откуда берётся ускорение — и почему обещанные 8x на практике превращаются в 5x
- Стена памяти: пока массив влезает в L3 — 5x, а дальше упор в память и 2.2x
- P-ядра против E-ядер и куда вообще сядет ваш бенчмарк
- Где SIMD не помогает
#go1_27 #article #performance #simd