В Go появился SIMD без ассемблера: скалярный цикл обгоняют в 9 раз ⚡
Джесус Эспино разобрал, как устроена поддержка SIMD в Go 1.27 (пока экспериментальная, включается через GOEXPERIMENT=simd, основной фокус на amd64).
Есть два уровня. Пакет simd/archsimd из Go 1.26 даёт низкоуровневые типы фиксированной ширины вроде Float32x8 и привязан к архитектуре. Новый пакет simd в Go 1.27 портабельный: типы Float32s и Int8s не знают ширину регистра, количество lane выбирается при старте программы, и один и тот же цикл работает на 128, 256 и 512 битах.
Под капотом методы вроде Add это интринсики компилятора без тела, они превращаются в инструкции вроде VADDPS. Для портабельного пакета компилятор строит по копии функции под каждую ширину плюс чистый Go-фолбэк, а диспетчер выбирает нужную при запуске. Принудительно выбрать путь можно через GODEBUG=simd.
Замер на AMD Ryzen AI Max+ 395: скалярное скалярное произведение двух массивов по 4096 float32 занимает около 3,9 мкс, версия на SIMD около 0,41 мкс. Выигрыш примерно в 9 раз, и автор оговаривает, что это близко к лучшему случаю для длинных непрерывных данных.
Подводные камни. API экспериментальный, имена могут поменяться. Archsimd не проверяет поддержку CPU, поэтому без проверки AVX2 и FMA программа упадёт с illegal instruction. Float32x8 не компилируется на ARM. На ветвистом коде, разбросанном доступе к памяти и коротких входах выигрыш может быть небольшим или нулевым.
Вывод автора: профилируйте и мерьте, а SIMD применяйте только в горячих циклах.
Источник: https://internals-for-interns.com/posts/go-simd/
Подписывайтесь: https://t.me/ai_machinelearning_big_data
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | В Go появился SIMD без ассемблера: скалярный цикл обгоняют в ... | 0 | 12.6 | 20-10-2026 |
| 2 | В Go 1.27 завезли SIMD | 0 | 11.77 | 25-07-2026 |
| 3 | [Перевод] Вы можете победить бинарный поиск | 5 | 7 | 15-06-2026 |
| 4 | От скалярной тоски к SIMD-эйфории: как подружить IDA Pro с инструкциями RISC-V P Extension | 0 | 10.61 | 04-03-2026 |
| 5 | Новый процессор IBM для мейнфреймов умеет выполнять код IBM Z и Arm одновременно и без эмуляции | 0 | 5.87 | 25-08-2026 |
| 6 | ggml-cpu x86_64 | 0 | 48.89 | 14-07-2026 |
| 7 | RISC-V RVV Vector Performance Benchmarks With The SpacemiT K3 SoC | 2 | 7 | 02-07-2026 |
| 8 | Intel Posts Initial GCC Compiler Patches For AI Compute Extensions "ACE" | 0 | 7 | 02-07-2026 |
| 9 | Rusticl Now Supports cl_ext_float_atomics | 0 | 11.23 | 11-08-2026 |
| 10 | AVX-512 xor_gen Continues To Look Exciting For Helping Linux RAID With Modern CPUs | 0 | 10.13 | 16-08-2026 |