AprÚs sept mois de développement, la version 0.2.0 du framework a été publiée OpenZL, conçu pour créer des compresseurs de données sans perte.
Le framework se compose d'une bibliothÚque de base et d'outils pour créer des compresseurs spécialisés, décrits dans le langage SDDL.
Pour créer un bon compresseur spécialisé, il y a deux étapes :
- Analyse des données pour extraire la structure.
- Utilisation de bons compresseurs backend, qui utilisent la structure obtenue pour atteindre une bonne compression.
OpenZL fournit des outils pour les deux étapes.
Le projet est écrit en C et C++ et est distribué sous la licence BSD.
Principales modifications
SDDL2
SDDL a été complÚtement réécrit depuis le début pour atteindre les objectifs de conception prévus. Si la version démo initiale était un environnement d'exécution simplifié, SDDL2 est un véritable compilateur : l'analyseur syntaxique transmet les données à l'analyseur sémantique, qui à son tour passe l'arbre syntaxique abstrait typé (AST) à l'optimiseur, et l'optimiseur gÚre le générateur de code qui génÚre le bytecode de la machine virtuelle.
Le rĂ©sultat clĂ© est une analyse syntaxique instantanĂ©e. Lorsque la position d'un enregistrement peut ĂȘtre complĂštement dĂ©terminĂ©e uniquement par les paramĂštres et les constantes, le moteur accĂšde directement Ă n'importe quel champ, sans scanner les octets prĂ©cĂ©dents, ce qui permet un accĂšs sans copie et une bande passante de plusieurs Go/s.
Le langage lui-mĂȘme a Ă©voluĂ© avec l'ensemble d'outils. Maintenant, il prend en charge des blocs when pour des emplacements conditionnels, des enregistrements paramĂ©trĂ©s et anonymes, l'accĂšs aux membres des champs d'enregistrements, ainsi que des opĂ©rateurs bit Ă bit et logiques.
En ce qui concerne la convivialitĂ© pour les dĂ©veloppeurs, l'Ă©tape d'analyse sĂ©mantique dĂ©tecte dĂ©sormais les rĂ©fĂ©rences indĂ©finies, les incohĂ©rences de types et les erreurs d'aritĂ© au moment de la compilation â avec indication des emplacements dans le code source â et une extension VS Code a Ă©tĂ© publiĂ©e pour la coloration syntaxique des fichiers .sddl.
Nouveau codec LZ intégré
OpenZL inclut dĂ©sormais son propre codec LZ, prĂ©sentĂ© sous la forme de ZL_GRAPH_LZ, ainsi qu'un profil de compression sĂ©quentielle dans l'outil zli. Le dĂ©veloppement du codec se poursuit : un ensemble de fonctionnalitĂ©s est en cours d'expansion et des amĂ©liorations de performances dans le traitement des petites entrĂ©es sont en cours. Ă ce jour, il prend en charge une fonctionnalitĂ© Ă©quivalente Ă celle de zstd niveau 1, avec une taille de fenĂȘtre de compression de 64 Ko.
OpenZL permet de repenser chaque Ă©tape du pipeline LZ afin d'augmenter la vitesse. Son architecture en graphe permet Ă©galement de combiner les Ă©tapes de codage d'entropie au lieu d'utiliser un seul pipeline qui convient Ă©galement Ă tous les cas d'utilisation. Ensuite, plusieurs Ă©tapes peuvent ĂȘtre combinĂ©es en une seule opĂ©ration pour augmenter la vitesse de traitement. Cela permet Ă OpenZL d'assurer une vitesse de compression 10 % supĂ©rieure et une vitesse de dĂ©compression 70 % plus Ă©levĂ©e par rapport Ă Zstandard de niveau 1 sur la base Silesia dans nos tests:
| Compresseur | Taux de compression | Vitesse de compression | Vitesse de décompression |
|---|---|---|---|
| OpenZL LZ niveau 1 | 2.74 | 466 Mo/s | 2288 Mo/s |
| Zstd niveau 1 avec taille de fenĂȘtre de 64 Ko | 2.74 | 419 Mo/s | 1254 Mo/s |
| Zstd niveau 1 | 2.89 | 424 Mo/s | 1345 Mo/s |
Prise en charge de trÚs grandes entrées
zli prend dĂ©sormais en charge le traitement d'Ă©normes donnĂ©es d'entrĂ©e (de plusieurs gigaoctets). Avant la compression, ces donnĂ©es sont maintenant automatiquement divisĂ©es en segments de taille gĂ©rĂ©e (par dĂ©faut â environ 16 Mo), ce qui permet de limiter la mĂ©moire utilisĂ©e, d'amĂ©liorer la localitĂ© des donnĂ©es et ouvre des possibilitĂ©s de traitement parallĂšle. Une fonction similaire de fragmentation automatique est implĂ©mentĂ©e dans SDDL2 lors de travaux basĂ©s sur un schĂ©ma. De nouveaux segmentateurs ont Ă©tĂ© créés ou mis Ă jour â pour CSV, Parquet et donnĂ©es numĂ©riques standard â et tous les segmentateurs sont maintenant sĂ©rialisables et configurables, de sorte que la configuration choisie peut ĂȘtre enregistrĂ©e dans le compresseur et rĂ©utilisĂ©e ultĂ©rieurement.
Cela s'applique de maniÚre transparente lors de la compression. Notez que le pipeline d'apprentissage est différent et reste inchangé, il n'est donc pas destiné à recevoir de gigantesques données d'entrée comme matériel d'apprentissage.
Améliorations dans le visualiseur de graphe en ligne (essayer)
Le visualiseur reconnaßt désormais les tracés de compression et de décompression du début à la fin.
Le panneau de prĂ©visualisation du flux permet de visualiser les octets passant effectivement par chaque bord, et grĂące aux Ă©lĂ©ments de contrĂŽle de recadrage, mĂȘme les flux volumineux restent faciles Ă manipuler.
Le panneau de configuration regroupe tous les paramĂštres d'affichage au mĂȘme endroit, et l'ensemble complet de touches de raccourci â navigation dans les directions, itĂ©ration ordonnĂ©e, dĂ©ploiement et repli, sĂ©lection des nĆuds â permet d'utiliser l'outil sans souris de maniĂšre conviviale.
Les traces ont maintenant des versions, la compression par blocs est affichĂ©e correctement, et zli peut enfin gĂ©nĂ©rer ses propres traces avec les nouvelles options âtrace et âtrace-streams-dir.
Divers
- Plusieurs codecs ont été ajoutés au répertoire. Les codecs Partition et bitpack utilisent désormais un décodeur combiné. Le codec Floating-point bitsplit dispose d'encodeurs et de décodeurs spécifiques pour les formats fp16, fp32, fp64 et bf16 avec des accélérations spécialisées. Des fonctionnalités de division en tenant compte de la plage (split_byrange), un multiplexeur de longueur, un codec sentinel, un graphique lz4 et de petites fonctions auxiliaires comme tryParseInt et splitByParam ont été ajoutés.
- L'API a été ordonnée.
- Le test de fuzzing a été amélioré.
- Le processus de construction et d'emballage a été optimisé pour un plus grand nombre de plateformes.
Source : linux.org.ru
