Go 1.27 и SIMD. Что с этим можно сделать прямо сейчас?
Go 1.27 и SIMD. Что с этим можно сделать прямо сейчас? В Go 1.27 появился экспериментальный пакет simd. Решил посмотреть, а можно ли использовать это не просто ради интереса, а для какой-нибудь реальной задачи. Например, есть большой массив чисел и нам нужно найти все значения больше определённого порога. Обычный вариант: for i, v := range values { if v > threshold { result[i] = true } } Процессор в этом случае обрабатывает значения последовательно. С SIMD идея другая. Мы можем загрузить сразу несколько значений в вектор и выполнить одну операцию сразу над всей пачкой. То есть условно: 10, 20, 150, 80, 200, 30... ↓ false, false, true, false, true, false... И здесь уже начинает становиться интереснее. Потому что это может быть полезно там, где мы постоянно обрабатываем большие массивы данных: поиск и фильтрация обработка изображений работа с большими числовыми массивами некоторые операции в аналитике вычисления внутри highload-сервисов Но есть важный момент. SIMD не означает, что любой код внезапно станет в несколько раз быстрее. Если данные лежат в базе, потом идут по сети, потом декодируются из JSON, а SIMD занимает 2% общего времени обработки, смысла от такой оптимизации почти нет. Поэтому сначала нужно найти узкое место. А уже потом пытаться ускорять конкретный участок. Мне как раз интересно сейчас сравнить три варианта одной задачи: обычный Go → SIMD → SIMD + benchmark И посмотреть, где там действительно появляется выигрыш. Потому что красивые слова про AVX и SIMD это одно. А реальный benchmark на конкретной задаче совсем другое.