Cette bibliothèque propose deux codeurs entropiques haut débit :
Huff0 , un codec Huffman conçu pour les processeurs modernes, comportant des opérations OoO (Out of Order) sur plusieurs ALU (Arithmetic Logic Unit), atteignant des vitesses de compression et de décompression extrêmement rapides.
FSE est un nouveau type d'encodeur entropique, basé sur la théorie ANS de Jarek Duda, permettant d'obtenir une précision de compression précise (comme le codage arithmétique) à des vitesses beaucoup plus élevées.
Bifurquer | Statut |
---|---|
maître | |
développeur |
Les benchmarks sont exécutés sur un Intel Core i7-5600U, avec Linux Mint 64 bits. Le code source est compilé en utilisant GCC 4.8.4, mode 64 bits. Les fichiers de test sont générés à l'aide du programme probagen
fourni. Benchmark divise les exemples de fichiers en blocs de 32 Ko. Huff0
et FSE
sont comparés à zlibh
, l'encodeur huffman de zlib, fourni par Frederic Kayser.
Déposer | Codec | Rapport | Compression | Décompression |
---|---|---|---|---|
Proba80 | ||||
Huff0 | 6.38 | 600 Mo/s | 1350 Mo/s | |
FSE | 8,84 | 325 Mo/s | 440 Mo/s | |
zlibh | 6.38 | 265 Mo/s | 300 Mo/s | |
Probablement14 | ||||
Huff0 | 1,90 | 595 Mo/s | 860 Mo/s | |
FSE | 1,91 | 330 Mo/s | 460 Mo/s | |
zlibh | 1,90 | 255 Mo/s | 250 Mo/s | |
Proba02 | ||||
Huff0 | 1.13 | 525 Mo/s | 555 Mo/s | |
FSE | 1.13 | 325 Mo/s | 445 Mo/s | |
zlibh | 1.13 | 180 Mo/s | 210 Mo/s |
De par sa conception, Huffman ne peut pas dépasser la limite de « 1 bit par symbole », et perd donc en efficacité sur les distributions compressées, telles que Proba80
. FSE s'affranchit de cette limite et son efficacité de compression reste proche de la limite de Shannon en toutes circonstances. Cependant, cette précision n’est pas toujours nécessaire et les distributions moins compressibles montrent peu de différence avec Huffman. De son côté, Huff0 offre un énorme avantage en termes de vitesse.
Les contributions externes sont les bienvenues et encouragées. La branche "master" est uniquement destinée à héberger les versions stables. La branche "dev" est celle où toutes les contributions sont fusionnées. Si vous souhaitez proposer un patch, veuillez vous engager dans la branche "dev" ou dans la branche dédiée aux fonctionnalités. Les commits directs sur "master" ne sont pas autorisés.