19-летняя девушка-разработчик ускорила serde_json на 32% и рассказала, как достигла этого
Новости
19-летняя разработчица Алиса Сиренева из Москвы ускорила библиотеку serde_json на языке Rust на 32%, оптимизировав обработку ошибок и парсинг строк.
9К открытий42К показов
Алиса Сиренева — 19-летняя разработчица из Москвы. В своем блоге она опубликовала пост, в котором рассказала, как, работая с библиотекой serde_json
на языке Rust, она заметила значительное замедление при обработке ошибок.
Это вызвало у нее интерес к анализу и поиску оптимизаций, особенно после использования новой библиотеки #[iex]
, которая фокусируется на улучшении обработки ошибок.
Анализ показал, что путь обработки ошибок в serde_json
в два раза медленнее успешного, и основной причиной этого стала функция position_of_index
, ответственная за определение позиции строки и колонки в случае ошибки.
Решение через оптимизацию
Чтобы устранить узкое место, разработчица предложила заменить функцию position_of_index на более эффективную реализацию с использованием библиотеки memchr, которая задействует SIMD-инструкции для быстрого поиска символов.
Это привело к значительному ускорению обработки ошибок, практически устранив разницу в скорости между успешным и ошибочным путями. Эта оптимизация была одобрена и принята сообществом разработчиков serde_json
.
Новые горизонты оптимизации
Воодушевленная успехом, девушка продолжила поиск возможностей для улучшений. Ее внимание привлекли циклы, ответственные за парсинг строк, которые также можно было оптимизировать с помощью SIMD и SWAR (SIMD Within A Register).
Хотя не все предложенные методы показали себя одинаково эффективно, использование SWAR оказалась более продуктивным и привело к значительным улучшениям производительности.
По итогу идеи, предложенные Алисой, показали прирост скорости работы serde_json
до 32% в различных тестах, связанных с обработкой строк.
Эти изменения существенно повышают производительность библиотеки и положительно сказываются на многих проектах, использующих ее.
9К открытий42К показов