Go 1.27 SIMD: первые цифры

Go 1.27 SIMD: первые цифры Вчера писал про экспериментальный SIMD в Go 1.27. Сегодня решил наконец запустить это дело и посмотреть, что получится на практике. Для эксперимента взял массив из 10 млн float32 и простую задачу: найти значения больше 100. Обычный Go: for i, v := range values { if v > threshold { result[i] = 1 } else { result[i] = 0 } } Мой компьютер: Intel Core i7-14700KF Windows Go 1.27.x Первый запуск: BenchmarkFilterRegular-28 231 5072954 ns/op 0 B/op 0 allocs/op

ok go-simd-benchmark 1.328s Получается примерно 5.07 мс на обработку 10 млн элементов. Потом включил экспериментальный SIMD: set GOEXPERIMENT=simd Проверил: go env GOEXPERIMENT simd И снова запустил benchmark. Получилось: BenchmarkFilterRegular-28 228 5208018 ns/op 0 B/op 0 allocs/op

ok go-simd-benchmark 1.343s То есть пока результат даже немного хуже: 5.07 мс → 5.21 мс И это хороший пример того, почему benchmark важнее красивых слов про оптимизацию. Само включение SIMD ничего не ускоряет. Нужно еще написать код, который действительно использует SIMD-инструкции. Так что эксперимент продолжается. В следующем шаге попробую уже настоящий SIMD-вариант и сравню его с обычным циклом на тех же 10 млн элементов.

Go 1.27 SIMD: первые цифры | Сетка — социальная сеть от hh.ru