Habr<p>Часть 3. Векторизация на Go: CGo, транзакции, компиляторы, поддержка, байтовые инструкции</p><p>В первой части статьи мы рассмотрели , как можно вручную ускорить Go-код с помощью векторизации и SIMD-инструкций, реализованных через Go-ассемблер. Написали простую, но показательно быструю реализацию sliceContains и увидели, что даже базовая векторизация может дать ускорение в 10–14 раз по сравнению со стандартной реализацией. Во второй части статьи погрузились в практическое применение SIMD в Go-ассемблере, реализовали функцию SliceContainsV1 и изучили, как с помощью VADD, VDUP и других инструкций можно добиться 10–14-кратного ускорения простых задач. Но возможности оптимизации Go-программ на этом не заканчиваются. В этой части мы пойдём дальше: рассмотрим другие техники низкоуровневой оптимизации — от использования C-кода и альтернативных компиляторов с поддержкой векторизации до работы с аппаратными транзакциями памяти на Intel. Поговорим о том, как внедрять ассемблер в продакшен-код, не боясь за его поддержку, и как обойти ограничения стандартного Go-компилятора. Привет, Хабр! Меня зовут Игорь Панасюк, я работаю в Яндекс, преподаю в ИТМО, а также в свободное время выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества, веду телеграм-канал и youtube-канал. Если вы уже знакомы с базовыми техниками векторизации, эта часть поможет глубже понять, как устроены продвинутые способы ускорения Go-кода и на что стоит обратить внимание при работе с архитектурно-зависимыми оптимизациями.</p><p><a href="https://habr.com/ru/companies/oleg-bunin/articles/905972/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/oleg-bun</span><span class="invisible">in/articles/905972/</span></a></p><p><a href="https://zhub.link/tags/golang" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>golang</span></a> <a href="https://zhub.link/tags/optimizations" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>optimizations</span></a> <a href="https://zhub.link/tags/%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>компилятор</span></a> <a href="https://zhub.link/tags/gccgo" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>gccgo</span></a> <a href="https://zhub.link/tags/gollvm" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>gollvm</span></a> <a href="https://zhub.link/tags/%D0%B0%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ассемблер</span></a> <a href="https://zhub.link/tags/word" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>word</span></a> <a href="https://zhub.link/tags/byte" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>byte</span></a> <a href="https://zhub.link/tags/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>производительность</span></a></p>