TGViewer
Debugging bliss Debugging bliss @debugging_bliss · 439 subscribers
Post #11 515
Супер быстрый бинарный поиск⚡️

Бинарный поиск знаком любому школьнику и студенту. Всего 5 строк кода, казалось бы - разве там вообще можно что-то ускорить?

Есть и весьма много! Ключ (как обычно в таких случаях) в понимании того, что процессор и железо в реальном мире делают кучу работы, лежащие за пределами нашего кода.

Итак, доклад CppCon от Сергея Слотина, где он за час проходит от простых до сложных методов и сравнивает их с std::lower_bound, доходя по итогу до ускорения в 15 раз 💪

1️⃣ Branchless binary search.
If в котором мы решаем в какую половину массива пойти, плохо предсказывается branch predictor-ом процессора и стопорит работу. С помощью пары махинаций этот иф можно переписать чуть по другому (но всё ещё в 3 строчки) - бранч исчезает из ассемблера и заменяется инструкцией cmov (conditional move). Очень простое и изящное ускорение в 3 раза на маленьких массивах

2️⃣ Eytzinger Binary Search
Переставляем элементы массива по мотивам бинарной кучи для улучшения кэш локальности. Пусть есть элемент с позицией k, тогда его непосредственные потомки в поиске будут на позициях 2k, 2k + 1. Получим расклад, где часто нужные элементы лежат рядом в соседних кэш-линиях. Например в начале массива лягут элементы с оригинальными позициями ½n, ¼n, ¾n, ⅛n, ⅜n ..., всегда нужные на первых итерациях. С небольшим тюнингом получаем ускорение уже в 4 раза на больших массивах.

3️⃣ B-trees + SIMD
Наворачиваем на предыдущий подход деревья, где в нодах лежат несколько элементов + SIMD, постепенно получается результат в 15 раз и это не предел. Впрочем реализация и работа с индексами уже становится заметно сложными.

📙 Прислушиваюсь к просьбе посоветовать, что почитать - например, в начале доклада Сергей рекламирует свою книгу Algorithms for Modern Hardware, где эта оптимизация и многие другие вещи объяснены подробнее. Я читал её сколько-то лет назад и мне понравилось.

https://www.youtube.com/watch?v=1RIPMQQRBWk
  • 🔥 10
  • 👍 4
  • ❤ 2
More from @debugging_bliss
  1. Sep 2, 2026Как изменились карьерные пути продвинутых ребят в последние годы? Пробуем оценить на призе…
  2. Jul 30, 2026Чем вообще занимаются инженеры в трейдинге? Такой вопрос нередко возникает в разговорах с…
  3. Jun 15, 2026Самое большое лото IPO в истории - как простые рабочие тоже разбогатели и почему этот день…
  4. Jun 2, 2026Можно ли доверять памяти компьютера? Bitsquatting и взлом Rowhammer🔰 Как-то оплачивая что…
  5. May 7, 2026Зачем рассматривать супермаркеты из космоса? 🛰🔍 Как-то я уже писал про то, как прогнозы…
  6. Apr 14, 2026Куда идут соревнования по программированию в мире с AI? Недавно прошел онлайн этап Midnigh…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →