Diese Bibliothek schlägt zwei Hochgeschwindigkeits-Entropiecodierer vor:
Huff0 , ein für moderne CPUs entwickelter Huffman-Codec, der OoO-Operationen (Out of Order) auf mehreren ALUs (Arithmetic Logic Unit) ermöglicht und extrem schnelle Komprimierungs- und Dekomprimierungsgeschwindigkeiten erreicht.
FSE ist eine neue Art von Entropie-Encoder, der auf der ANS-Theorie von Jarek Duda basiert und eine präzise Komprimierungsgenauigkeit (wie arithmetische Codierung) bei viel höheren Geschwindigkeiten erreicht.
Zweig | Status |
---|---|
Master | |
Entwickler |
Die Benchmarks werden auf einem Intel Core i7-5600U mit Linux Mint 64-Bit ausgeführt. Der Quellcode wird im 64-Bit-Modus von GCC 4.8.4 kompiliert. Testdateien werden mit dem mitgelieferten Programm probagen
erstellt. Benchmark unterteilt Beispieldateien in Blöcke von 32 KB. Huff0
und FSE
werden mit zlibh
verglichen, dem Huffman-Encoder innerhalb von zlib, bereitgestellt von Frederic Kayser.
Datei | Codec | Verhältnis | Kompression | Dekompression |
---|---|---|---|---|
Proba80 | ||||
Huff0 | 6.38 | 600 MB/s | 1350 MB/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 | 180 MB/s | 210 MB/s |
Huffman kann die Grenze von „1 Bit pro Symbol“ konstruktionsbedingt nicht überschreiten und verliert daher an Effizienz bei komprimierten Verteilungen wie Proba80
. Bei FSE gibt es keine solchen Grenzwerte, und seine Komprimierungseffizienz bleibt unter allen Umständen nahe am Shannon-Grenzwert. Diese Genauigkeit ist jedoch nicht immer erforderlich, und weniger komprimierbare Verteilungen zeigen bei Huffman kaum Unterschiede. Huff0 wiederum liefert einen enormen Geschwindigkeitsvorteil.
Externe Beiträge sind willkommen und erwünscht. Der „Master“-Zweig ist nur zum Hosten stabiler Versionen gedacht. Der „dev“-Zweig ist derjenige, in dem alle Beiträge zusammengeführt werden. Wenn Sie einen Patch vorschlagen möchten, verpflichten Sie sich bitte in den „dev“-Zweig oder den dedizierten Feature-Zweig. Ein direkter Commit an „master“ ist nicht zulässig.