OpenZL 0.2.0

OpenZL 0.2.0 OpenZL 0.2.0

Nach sieben Monaten Entwicklungszeit wurde Version 0.2.0 des Frameworks veröffentlicht. OpenZL, entwickelt zur Erstellung verlustfreier Datenkompressoren.

Das Framework besteht aus einer Basisbibliothek und Werkzeugen zur Erstellung spezialisierter, in der Sprache beschriebener Kompressoren. SDDL.
Es gibt zwei Schritte, um einen guten dedizierten Kompressor zu erstellen:

  1. Datenanalyse zur Strukturgewinnung.
  2. Durch die Verwendung guter Backend-Kompressoren, die die resultierende Struktur ausnutzen, um eine gute Komprimierung zu erzielen.

OpenZL stellt Werkzeuge für beide Phasen bereit.

Das Projekt ist in C und C++ geschrieben und wird unter der BSD-Lizenz vertrieben.

Wichtige Änderungen

SDDL2

SDDL wurde von Grund auf neu geschrieben, um seine ursprünglichen Designziele zu erreichen. Während die ursprüngliche Demo eine vereinfachte Laufzeitumgebung darstellte, ist SDDL2 ein vollwertiger Compiler: Der Parser übergibt Daten an den semantischen Analysator, der wiederum einen typisierten abstrakten Syntaxbaum (AST) an den Optimierer weiterleitet. Der Optimierer steuert den Codegenerator, der Bytecode für die virtuelle Maschine erzeugt.

Das wichtigste Ergebnis ist die sofortige Datenanalyse. Wenn die Position eines Datensatzes allein anhand von Parametern und Konstanten vollständig bestimmt werden kann, springt die Engine direkt zu einem beliebigen Feld, ohne vorherige Bytes zu durchsuchen. Dies ermöglicht einen kopierfreien Zugriff und einen Durchsatz von mehreren GB/s.

Die Sprache selbst hat sich zusammen mit ihrem Werkzeugkasten weiterentwickelt. Sie unterstützt nun „when“-Klauseln für bedingte Anweisungen, parametrisierte und anonyme Datensätze, den Zugriff auf Datensatzfeldmitglieder sowie bitweise und logische Operatoren.

Auf der Entwicklerseite werden im Rahmen der semantischen Analyse nun undefinierte Referenzen, Typkonflikte und Stelligkeitsfehler zur Kompilierzeit – mit Angabe der Quellcodeposition – und nicht mehr zur Laufzeit identifiziert. Außerdem wurde eine VS Code-Erweiterung für die Syntaxhervorhebung von .sddl-Dateien veröffentlicht.

Neuer integrierter LZ-Codec

OpenZL enthält nun einen eigenen LZ-Codec, dargestellt als ZL_GRAPH_LZ, sowie ein sequentielles Komprimierungsprofil im zli-Dienstprogramm. Die Entwicklung des Codecs wird fortgesetzt, um seinen Funktionsumfang zu erweitern und die Leistung bei der Verarbeitung kleiner Eingabedaten zu verbessern. Aktuell unterstützt er Funktionen, die der zstd-Stufe 1 entsprechen, mit einem Komprimierungsfenster von 64 KB.

OpenZL ermöglicht die Optimierung jeder einzelnen Stufe der LZ-Pipeline hinsichtlich der Geschwindigkeit. Die Grapharchitektur erlaubt zudem die Kombination von Entropiekodierungsstufen anstelle einer einzigen, für alle Anwendungsfälle gleichermaßen geeigneten Pipeline. Mehrere Stufen können so zu einem einzigen Vorgang zusammengefasst werden, um die Verarbeitungsgeschwindigkeit zu erhöhen. Dadurch erreicht OpenZL im Vergleich zu Zstandard Level 1 auf dem Silesia-Korpus eine um 10 % schnellere Komprimierung und eine um 70 % schnellere Dekomprimierung. unsere Tests:

KompressorKompressionsrateKomprimierungsgeschwindigkeitDekompressionsgeschwindigkeit
OpenZL LZ Level 12.74466 MB / s2288 MB / s
Zstd-Level 1 mit 64K Fenstergröße2.74419 MB / s1254 MB / s
Zstd Stufe 12.89424 MB / s1345 MB / s

Unterstützung für sehr große Eingabedaten

zli unterstützt nun die Verarbeitung sehr großer Eingabedaten (mehrere Gigabyte). Vor der Komprimierung werden diese Daten automatisch in handliche Blöcke (standardmäßig ca. 16 MB) aufgeteilt. Dies begrenzt den Speicherverbrauch, verbessert die Datenlokalität und ermöglicht die parallele Verarbeitung. SDDL2 implementiert eine ähnliche automatische Blockbildungsfunktion bei der Arbeit mit Schemata. Im Zuge dessen wurden neue Segmentierer für CSV-, Parquet- und Standard-Zahlendaten erstellt bzw. aktualisiert. Alle Segmentierer sind nun serialisierbar und konfigurierbar, sodass das gewählte Layout im Kompressor gespeichert und später wiederverwendet werden kann.

Dies geschieht transparent während der Komprimierung. Beachten Sie, dass die Trainingspipeline anders funktioniert und davon unberührt bleibt; sie ist daher nicht für die Verarbeitung riesiger Eingabedaten als Trainingsmaterial ausgelegt.

Verbesserungen im Online-Grafikvisualisierer (versuchen)
Der Visualisierer erkennt nun Kompressions- und Dekompressionsspuren von Anfang bis Ende.

Im Stream-Vorschau-Panel können Sie sehen, wie die Bytes tatsächlich an jeder Kante fließen, und die Trimmfunktionen sorgen dafür, dass auch große Datenströme einfach zu handhaben sind.

Im Einstellungsfeld sind alle Anzeigeoptionen übersichtlich zusammengefasst, und ein vollständiger Satz von Hotkeys – Richtungsnavigation, geordnete Navigation, Ein- und Ausblenden sowie Knotenauswahl – ermöglicht Ihnen die bequeme Bedienung des Tools ohne Maus.

Traces werden jetzt versioniert, blockbasierte Komprimierung wird korrekt angezeigt, und zli kann endlich seine eigenen Traces mit Hilfe der neuen Flags --trace und --trace-streams-dir generieren.

Verschiedene

  • Dem Katalog wurden mehrere Codecs hinzugefügt. Die Partition- und Bitpack-Codecs verwenden nun einen einheitlichen Decoder. Der Gleitkomma-Bitsplit-Codec enthält jetzt dedizierte Encoder und Decoder für die Formate fp16, fp32, fp64 und bf16 mit spezieller Beschleunigung. Bereichsabhängiges Splitting (split_byrange), ein Längenmultiplexer, der Sentinel-Codec, ein lz4-Graph sowie kleinere Hilfsfunktionen wie tryParseInt und splitByParam wurden ebenfalls hinzugefügt.
  • Die API wurde optimiert.
  • Verbesserte Fuzz-Tests.
  • Verbesserter Build- und Verpackungsprozess für mehr Plattformen.

Source: linux.org.ru