Сообщество RSS DEV

Повышайте производительность алгоритма шаг за шагом

Автор обсуждает свой опыт оптимизации реализации алгоритма RaBitQ на языке Rust, который является приближённым алгоритмом поиска ближайшего соседа. Изначально он использовал библиотеку nalgebra, но обнаружил, что она работает медленнее, чем ожидалось. Затем он использовал инструменты профилирования, такие как samply и Профайлер Firefox, чтобы идентифицировать узкие места в коде. Автор обнаружил, что вызовы f32::clone() занимали значительное количество времени, и решил предварительно выделить память для векторов и повторно использовать ее в итерации. Он также реализовал функцию binarize_vector с использованием AVX2, что улучшило производительность QPS на 32% для GIST. Автор также использовал скалярную квантизацию, чтобы eliminar более вызовов f32::clone() в коде, и заменил некоторые функции nalgebra ручными реализациями. Он также нашел другой крейт algebra под названием faer, который оптимизирован с использованием SIMD и обеспечивает better производительность итерации по строкам/столбцам. Автор также переимплементировал бинарный скалярный продукт с использованием AVX2, что улучшило производительность QPS на 11% для GIST.
favicon
dev.to
Improve an algorithm performance step by step
Create attached notes ...