Бесплатные материалы

Как совмещать несовместимое и ускорять неускоряемое с помощью ассемблера Go

На этом открытом уроке за 50 минут с небольшим разберем использование ассемблера в Go от «А» до «Я» — зачем он вообще нужен, как устроены векторные инструкции процессора и как с их помощью ускорить узкие места в коде в десятки раз.

В этом уроке:

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

В итоге у тебя будет четкое понимание того, когда реально стоит спускаться на уровень железа: разберем на практических примерах весь процесс от работы с сырыми инструкциями процессора до интеграции оптимизированного кода в свои рабочие highload-проекты.

Дополнительные материалы

The Design of the Go Assembler
https://www.youtube.com/watch?v=KINIAgRpkDA
Архитектура ассемблера Go
https://habr.com/ru/companies/badoo/articles/317864/
Руководство по ассемблеру Go
https://habr.com/ru/companies/vk/articles/358088/
Quick Guide to Go's Assembler
https://go.dev/doc/asm
Продвинутый Go Computer Science