Как совмещать несовместимое и ускорять неускоряемое с помощью ассемблера Go
На этом открытом уроке за 50 минут с небольшим разберем использование ассемблера в Go от «А» до «Я» — зачем он вообще нужен, как устроены векторные инструкции процессора и как с их помощью ускорить узкие места в коде в десятки раз.
В этом уроке:
Пайплайн компиляции Go: как код превращается в машинный и почему стандартный компилятор не всегда может применять самые эффективные инструкции (например, SIMD).
Векторные вычисления (SIMD): что это такое, как работать с расширенными регистрами процессора и обрабатывать целые массивы данных за одну операцию.
Практика написания ассемблера: разберем специфичный синтаксис (Plan 9) в Go, напишем быстрое сложение слайсов и реализуем сверхбыстрый поиск элементов (аналог bytes.Contains).
Альтернативы и поддержка: когда можно обойтись CGO, как правильно тестировать платформозависимый код и писать безопасные фоллбэки на чистом Go для других архитектур.
В итоге у тебя будет четкое понимание того, когда реально стоит спускаться на уровень железа: разберем на практических примерах весь процесс от работы с сырыми инструкциями процессора до интеграции оптимизированного кода в свои рабочие highload-проекты.