Esta biblioteca propone dos codificadores de entropía de alta velocidad:
Huff0 , un códec de Huffman diseñado para CPU modernas, que presenta operaciones OoO (fuera de servicio) en múltiples ALU (unidad lógica aritmética), logrando velocidades de compresión y descompresión extremadamente rápidas.
FSE es un nuevo tipo de codificador de entropía, basado en la teoría ANS, de Jarek Duda, que logra una precisión de compresión precisa (como la codificación aritmética) a velocidades mucho más altas.
Rama | Estado |
---|---|
maestro | |
desarrollador |
Las pruebas se ejecutan en un Intel Core i7-5600U, con Linux Mint de 64 bits. El código fuente se compila utilizando GCC 4.8.4, modo de 64 bits. Los archivos de prueba se generan utilizando el programa probagen
proporcionado. Benchmark divide los archivos de muestra en bloques de 32 KB. Huff0
y FSE
se comparan con zlibh
, el codificador huffman dentro de zlib, proporcionado por Frederic Kayser.
Archivo | Códec | Relación | Compresión | Descompresión |
---|---|---|---|---|
Proba80 | ||||
Huff0 | 6.38 | 600 MB/s | 1350MB/s | |
FSE | 8.84 | 325 MB/s | 440 MB/s | |
zlibh | 6.38 | 265 MB/s | 300 MB/s | |
Proba14 | ||||
Huff0 | 1,90 | 595 MB/s | 860 MB/s | |
FSE | 1.91 | 330 MB/s | 460 MB/s | |
zlibh | 1,90 | 255 MB/s | 250 MB/s | |
Proba02 | ||||
Huff0 | 1.13 | 525 MB/s | 555 MB/s | |
FSE | 1.13 | 325 MB/s | 445 MB/s | |
zlibh | 1.13 | 180MB/s | 210 MB/s |
Por diseño, Huffman no puede romper el límite de "1 bit por símbolo", por lo que pierde eficiencia en distribuciones comprimidas, como Proba80
. FSE está libre de dicho límite y su eficiencia de compresión se mantiene cerca del límite de Shannon en todas las circunstancias. Sin embargo, esta precisión no siempre es necesaria y las distribuciones menos comprimibles muestran poca diferencia con Huffman. Por su parte, Huff0 ofrece una enorme ventaja de velocidad.
Las contribuciones externas son bienvenidas y fomentadas. La rama "master" sólo está destinada a alojar versiones estables. La rama "dev" es aquella donde se fusionan todas las contribuciones. Si desea proponer un parche, comprométase en la rama "dev" o en la rama de funciones dedicada. No se permiten compromisos directos con "master".