OpenZL 0.2.0

OpenZL 0.2.0 OpenZL 0.2.0

Nach sieben Monaten Entwicklung wurde die Version 0.2.0 des Frameworks veröffentlicht OpenZL, das zur Erstellung verlustfreier Datenkompressoren gedacht ist.

Das Framework besteht aus einer Basisbibliothek und Werkzeugen zur Erstellung spezialisierter Kompressoren, die in der Sprache SDDL.
beschrieben sind. Um einen guten spezialisierten Kompressor zu erstellen, gibt es zwei Schritte:

  1. Analyse der Daten zur Extraktion der Struktur.
  2. Einsatz guter Backend-Kompressoren, die die gewonnene Struktur nutzen, um eine gute Kompression zu erreichen.

OpenZL bietet Werkzeuge für beide Schritte an.

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

Wesentliche Änderungen

SDDL2

SDDL wurde von Grund auf neu überarbeitet, um die festgelegten Entwurfziele zu erreichen. Während die ursprüngliche Demoversion eine vereinfachte Laufzeitumgebung war, ist SDDL2 ein vollwertiger Compiler: Der Parser übergibt Daten an den semantischen Analyzer, der wiederum einen typisierten abstrakten Syntaxbaum (AST) an den Optimierer übergibt, und der Optimierer steuert den Codegenerator, der den Bytecode für die virtuelle Maschine generiert.

Das zentrale Ergebnis ist die sofortige syntaktische Analyse. Wenn der Speicherort eines Datensatzes ausschließlich durch Parameter und Konstanten vollständig bestimmt werden kann, springt die Engine direkt zu einem beliebigen Feld, ohne die vorhergehenden Bytes zu scannen, was (Copy-Free) Zugriff und Bandbreiten von mehreren GB/s ermöglicht.

Die Sprache hat sich zusammen mit dem Toolsatz weiterentwickelt. Jetzt unterstützt sie 'when'-Blöcke für bedingte Platzierungen, parametrische und anonyme Datensätze, den Zugriff auf Mitglieder der Datensatzfelder sowie bitweise und logische Operatoren.

Was die Benutzerfreundlichkeit für Entwickler betrifft, so erkennt die Phase der semantischen Analyse nun unbestimmte Verweise, Typinkonsistenzen und Arity-Fehler bereits während der Kompilierung – einschließlich der genauen Position im Quellcode – und nicht zur Laufzeit. Zudem wurde eine VS Code-Erweiterung zur Syntaxhervorhebung von .sddl-Dateien veröffentlicht.

Der neue integrierte LZ-Codec

Bei OpenZL ist jetzt der eigene LZ-Codec integriert, präsentiert als ZL_GRAPH_LZ, sowie ein Profil zur sequentiellen Kompression in der zli-Anwendung. Die Arbeit am Codec geht weiter: Es wird an der Erweiterung der Funktionalitäten und der Steigerung der Leistung bei der Verarbeitung kleiner Eingabedaten gearbeitet. Derzeit unterstützt er Funktionen, die äquivalent zu zstd Level 1 sind, mit einer Kompressionsfenstergröße von 64 KB.

OpenZL ermöglicht die Neugestaltung jeder Phase des LZ-Pipelines zur Geschwindigkeitssteigerung. Seine graphenbasierte Architektur erlaubt zudem die Kombination von Phasen des Entropie-Codierens, anstatt eine einzige Pipeline zu nutzen, die für alle Anwendungsfälle gleichermaßen geeignet ist. Mehrere Phasen können dann zu einem einzigen Vorgang zusammengefasst werden, um die Verarbeitungsgeschwindigkeit zu erhöhen. Dies ermöglicht OpenZL eine um 10% höhere Kompressionsgeschwindigkeit und eine um 70% höhere Dekompressionsgeschwindigkeit im Vergleich zu Zstandard Level 1 beim Silesia-Gehäuse in unseren Tests:

KompressorKompressionsverhältnisKompressionsgeschwindigkeitDekompressionsgeschwindigkeit
OpenZL LZ Level 12.74466 MB/s2288 MB/s
Zstd Level 1 mit 64K Fenstergröße2.74419 MB/s1254 MB/s
Zstd Level 12.89424 MB/s1345 MB/s

Unterstützung sehr großer Eingabedaten

zli unterstützt jetzt die Verarbeitung riesiger Eingabedaten (mehrere Gigabyte). Vor der Kompression werden diese Daten jetzt automatisch in fragmentierte, verwaltete Größen (standardmäßig etwa 16MB) aufgeteilt, was den Speicherverbrauch begrenzt, die Lokalität der Daten verbessert und parallele Verarbeitungsmöglichkeiten eröffnet. In SDDL2 wurde eine ähnliche Funktion der automatischen Fragmentierung bei der Arbeit nach Schema implementiert. Dabei wurden neue oder aktualisierte Segmentierer für CSV, Parquet und Standardnumerische Daten erstellt – alle Segmentierer sind jetzt serialisierbar und anpassbar, sodass die gewählte Anordnung im Kompressor gespeichert und später wiederverwendet werden kann.

Dies wird transparent während der Kompression angewendet. Bitte beachten Sie, dass der Trainingspipeline unverändert bleibt, daher ist sie nicht für die Verarbeitung riesiger Eingabedaten als Trainingsmaterial vorgesehen.

Verbesserungen im Online-Diagrammvisualisierer (es zu versuchen)
Der Visualisierer erkennt jetzt die Kompressions- und Dekompressionstraces von Anfang bis Ende.

Das Vorschaufenster des Streams ermöglicht die Einsicht in die Byte-Daten, die tatsächlich über jede Kante fließen, und dank der Trimmsteuerungen bleibt selbst bei großen Streams die Bedienung komfortabel.

Das Einstellungsfeld vereint alle Anzeigeoptionen an einem Ort, während eine vollständige Reihe von Tastenkombinationen – für Navigation, geordnetes Durchlaufen, Ausklappen und Einklappen sowie Knotenwahl – eine bequeme Nutzung des Tools ohne Maus ermöglicht.

Jetzt haben Tracings Versionen, die Blockkompression wird korrekt angezeigt, und zli kann endlich mit den neuen Flags —trace und —trace-streams-dir eigene Tracings generieren.

Verschiedenes

  • Das Verzeichnis enthält mehrere Codecs. Die Codecs Partition und bitpack nutzen jetzt einen kombinierten Decoder. Der Codec Floating-point bitsplit erhielt spezielle Encoder und Decoder für die Formate fp16, fp32, fp64 und bf16 mit spezialisierten Beschleunigungen. Hinzugefügt wurden Range-Aware-Splitting (split_byrange), ein Längenmultiplexer, der Sentinel-Codec, lz4-Graphen und einige kleine Hilfsfunktionen wie tryParseInt und splitByParam.
  • Die API wurde neu geordnet.
  • Das Fuzzing-Testen wurde verbessert.
  • Der Prozess des Aufbaus und der Verpackung wurde für eine größere Anzahl von Plattformen verbessert.

Quelle: linux.org.ru

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster