Zlib-rs es más rápido que C
(trifectatech.org)- zlib-rs es una implementación de zlib basada en Rust para compresión de datos, y recientemente se lanzó la versión 0.4.2 con una gran mejora de rendimiento
- Actualmente es la implementación de zlib compatible con la API más rápida, y destaca especialmente en el rendimiento de la descompresión frente a productos competidores
- Principales mejoras de rendimiento: selección automática en tiempo de ejecución de la implementación SIMD óptima, aplicación de optimización DFA, entre otras
Multiversionado (Multiversioning)
- En tiempo de ejecución, selecciona automáticamente la versión de función más rápida según la CPU
- En Rust no hay soporte de multiversionado por defecto, así que debe implementarse manualmente
- Ofrece rendimiento óptimo minimizando la sobrecarga en tiempo de ejecución del código
Optimización DFA (Deterministic Finite Automata)
- El lenguaje C mejora el rendimiento usando fallthrough implícito en sentencias
switch - Rust no tiene un mecanismo similar, lo que provoca una caída de rendimiento
- Se aplicó la opción de LLVM
-Cllvm-args=-enable-dfa-jump-thread→ se recuperó el rendimiento - No está incluida en la configuración predeterminada de LLVM, pero se prevé que en el futuro venga activada por defecto en Rustc
Comparación de rendimiento en benchmarks
1. Comparación de rendimiento frente a zlib-ng
- zlib-rs muestra un rendimiento superior a zlib-ng en la mayoría de los tamaños de entrada
- En particular, es aproximadamente 10% más rápido con entradas de 1KB y aproximadamente 6% más rápido con entradas de 65KB
- En los tamaños de entrada más pequeños queda ligeramente detrás, pero en general tiene ventaja de rendimiento
Por ejemplo:
- Cuando el tamaño de entrada es de 4 bytes, zlib-ng es ligeramente más rápido, pero en uso real el impacto es menor
- Cuando el tamaño de entrada es de 1KB, zlib-rs es aproximadamente 10% más rápido
- Cuando el tamaño de entrada es de 65KB, zlib-rs es aproximadamente 6% más rápido
→ Ventaja clara de rendimiento frente a zlib-ng en chunks grandes
2. Comparación de rendimiento frente a zlib-chromium
- En chunks pequeños, zlib-chromium es más rápido
- Pero en chunks grandes, zlib-rs lleva la ventaja
- zlib-rs ofrece mejor rendimiento en entradas de tamaño habitual
Por ejemplo:
- Cuando el tamaño de entrada es de 4 bytes, zlib-chromium es aproximadamente 12% más rápido
- Cuando el tamaño de entrada es de 16 bytes, zlib-chromium es aproximadamente 6% más rápido
- Cuando el tamaño de entrada es de 1KB o más, zlib-rs tiene ventaja de rendimiento
→ zlib-rs rinde mejor en tamaños habituales
Comparación de rendimiento de compresión
- El rendimiento de compresión sigue mejorando, pero los resultados son mixtos
- Mejora de 6% en el nivel de compresión predeterminado (6) y mejora de rendimiento de 13% en el nivel de compresión máximo (9)
- En otros niveles de compresión, zlib-ng sigue siendo más rápido
Por ejemplo:
- En el nivel de compresión 6, zlib-rs es aproximadamente 6% más rápido que zlib-ng
- En el nivel de compresión 9, zlib-rs es aproximadamente 13% más rápido que zlib-ng
- Pero en los niveles de compresión 1~4, zlib-ng lleva la ventaja
Conclusión
- zlib-rs tiene ventaja de rendimiento en descompresión frente a zlib-ng y zlib-chromium
- El rendimiento de compresión sigue mejorando y muestra mejoras significativas en niveles clave de compresión
- Puede usarse tanto en proyectos Rust como en C
- Rust → usar la bandera
zlib-rsen el crateflate2 - C → puede usarse tras compilarlo como biblioteca dinámica
- Rust → usar la bandera
1 comentarios
Comentarios en Hacker News
Queda claro que ya conocen Rust
unsafeDecir que es "más rápido que C" termina reduciéndose a diferencias de diseño, implementación, algoritmos, etc.
zippyen Nim afirma ser entre 1.5 y 2 veces más rápido que zlibMe pregunto si el rendimiento de Rust tiene que ver con Rust en sí, o si simplemente está más optimizado que otras versiones en C
sort, donde C++ ofrece un rendimiento consistentemente mejor que CChromium usa zlib por los algoritmos definidos en el estándar
Se permite Zstandard y digest de blake3
Sería más preciso decir que Rust es tan rápido como C
Qué librería compila más rápido
A los usuarios de Rust les gusta comparar Rust con C, pero los usuarios de C rara vez comparan C con Rust
Al trabajar con lenguajes de sistemas compilados, el lenguaje casi no afecta la velocidad
Lo que significa es que la implementación es más rápida que en C