Технологии
Бесфильтрационная фильтрация ускоряет фильтрацию числовых срезов

Автор, greyblake, оптимизировал горячий путь в коде, который фильтрует срез чисел больше порога, что является распространённой проблемой в базах данных. Бенчмарки на ноутбуке Intel i7-10875H с одним миллионом случайных значений f64 показали, что случай фильтрации 50% был самым медленным, несмотря на копирование только половины данных, потому что непредсказуемые ветвления вызывали ошибки предсказания в конвейере ЦП, costing 15-20 циклов каждое. Сортировка входа сделала тот же код быстрее, но сортировка не является практическим решением.
Вместо этого бесфильтрационный подход всегда записывает элемент и использует результат сравнения как число, чтобы решить, куда его поместить, превращая контрольную зависимость в зависимость данных. Худший случай улучшился с 3,87 мс до примерно 1 мс, и производительность стала плоской независимо от распределения данных. Компромисс заключается в том, что бесфильтрационная версия всегда записывает, потенциально увеличивая трафик памяти, но выигрыш в скорости значителен.
Источник: Hacker News