Comments 7
Интересное ускорение, Андрей. Стандартный utf8.Valid()
в Go — это и вправду достаточно «узкое место» во многих проектах, особенно при потоковой обработке больших данных
Приятно удивила инженерная точность, с которой ты выжал максимум из ARM64 — х10 ускорение это мощно)
За открытые исходники отдельное спасибо — попробую внедрить в свой пет по перекладыванию джейсонов 😅
Ключевая идея заключается в том, что практически все ошибки UTF-8 можно детектировать, анализируя только первые два байта каждой последовательности.
Что значит практически все? Нельзя быть немножко беременной, особенно в механизме валидации данных.
статья не детальный разбор алгоритма, а конкретной моей его реализации. я дал ссылки на обзор алгоритма. если хотите обсудить мою реализацию Велком
Обработка хвостов выглядит излишне сложной. Я бы просто грузил в регистр как есть, а потом занулял хвосты маской.
Ускоряем валидацию UTF-8 в 10 раз (>10 ГБ/с): реализация алгоритма Lemire-Keiser на Go с ARM NEON