gearhash на ARM64 ускорили вдвое с помощью NEON

Speeding up gearhash on ARM64 (2× faster)

gearhash на ARM64 ускорили вдвое с помощью NEON

Автор крейта gearhash для Rust добавил NEON-бэкенд, который автоматически выбирается на aarch64 и даёт примерно двукратный прирост на типичных размерах чанков. Прямой порт SSE4.2 оказался медленнее скалярного кода (0.92×), но после сокращения цепочки зависимостей и оптимизации загрузок удалось достичь 1.81× на бенчмарке с 11-битной маской и до 2.17× на больших чанках. Крейт теперь используется в Xet-клиенте Hugging Face и скачивается 10–20 тысяч раз в день.

Оказывается, LLVM просто взял и переассоциировал выражение! Я написал `(h << 2) + (G₀ + G₁)`, а он сгенерировал `((h << 2) + G₁) + G₀`. Это, конечно, допустимое преобразование, но оно возвращает второе сложение в цепочку зависимостей.

Ещё за этот день

2026-09-18