Вступить в клуб →
средняявопросПроизводительность и низкие задержки

Один и тот же фильтр втрое быстрее на отсортированных данных

int64_t sum = 0;
for (uint8_t v : samples)      // 100 млн значений 0..255
    if (v >= 128) sum += v;

На случайных данных цикл выполняется 0,9 с, а после std::sort(samples) — 0,3 с, хотя сама сортировка в замер не входит и работы для цикла столько же. perf stat на случайных данных показывает около 25% branch-misses. Почему так и как убрать зависимость?

  • Промахи предсказателя; переписать без ветвления
  • Отсортированные данные сжимаются процессором
  • После сортировки компилятор пропускает половину
  • Случайные данные не помещаются в кэш L1

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела