awesome-everything EN
↑ Обратно к восхождению

Производительность

Cache vs big-O: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту — memory hierarchy, cache lines, false sharing, branch prediction, раскладка данных и чтение perf-профиля.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Ни один — не определение для заучивания: каждый отражает решение, которое ты принимаешь, когда «быстрый» алгоритм проигрывает «медленному», а big-O об этом молчит.

Цель

Убедись, что связываешь memory hierarchy, поведение cache line, false sharing, branch prediction и раскладку данных в один диагностический рефлекс: прочитал профиль, назвал причину в константном множителе, выбрал подходящий фикс.

Викторина

Связный список из 1M узлов итерируется в ~17 раз медленнее массива из 1M int, хотя оба O(N). Какое утверждение лучше объясняет разрыв?

Викторина

Команда меняет порядок внутреннего цикла matrix multiply с row-major на column-major на матрице 10 000×10 000 double и видит ~9x замедление. Арифметика идентична. Корневая причина?

Викторина

Массив счётчиков сделали lock-free через атомики, и он стал медленнее версии с локом по мере роста числа потоков. perf показывает IPC 0.4 и 72% cache-miss rate. Диагноз?

Викторина

Сортировка массива перед суммированием элементов выше порога даёт 2–3x ускорение, несмотря на лишнюю O(N log N) сортировку. Почему это окупается?

Викторина

Горячий ML-цикл работает в 5 раз медленнее эталонного C++-порта; perf показывает IPC 0.8 и 25% L3 miss rate. Кто-то предлагает добавить SIMD-интринсики. Какой первый шаг правильный?

Викторина

perf stat на горячем цикле показывает IPC 0.40, branch-miss 25% и LLC-miss 47%. Можно сначала исправить одно. Что и почему?

Итог

Сквозная линия юнита — одно дерево решений: big-O оценивает рост стоимости с N, но memory hierarchy задаёт константу, и она колеблется ~100x в зависимости от раскладки. Contiguous бьёт pointer-chasing; порядок цикла должен совпадать с порядком хранения; записи на поток нуждаются в своей cache line; непредсказуемым веткам нужна сортировка или branchless; работа по одному полю хочет SoA. Когда перед тобой профиль — сначала читай miss rate и IPC, назови причину в константном множителе и применяй подходящий фикс: измеряй, не угадывай.

Продолжить восхождение ↑Cache vs big-O: тест на свободное воспроизведение
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.