OpenZL 0.2.0 OpenZL 0.2.0

Μετά από επτά μήνες ανάπτυξης, κυκλοφόρησε η έκδοση 0.2.0 του framework. OpenZL, σχεδιασμένο για τη δημιουργία συμπιεστών δεδομένων χωρίς απώλειες.

Το πλαίσιο αποτελείται από μια βασική βιβλιοθήκη και εργαλεία για τη δημιουργία εξειδικευμένων συμπιεστών που περιγράφονται στη γλώσσα SDDL.
Υπάρχουν δύο βήματα για να δημιουργήσετε έναν καλό ειδικό συμπιεστή:

  1. Ανάλυση δεδομένων για την εξαγωγή δομής.
  2. Χρήση καλών συμπιεστών backend που εκμεταλλεύονται την προκύπτουσα δομή για την επίτευξη καλής συμπίεσης.

Το OpenZL παρέχει εργαλεία και για τα δύο στάδια.

Το έργο είναι γραμμένο σε C και C++ και διανέμεται με την άδεια BSD.

Σημαντικές αλλαγές

SDDL2

Το SDDL ξαναγράφηκε πλήρως από την αρχή για να επιτευχθούν οι αρχικοί στόχοι σχεδιασμού του. Ενώ το αρχικό demo ήταν ένα απλοποιημένο περιβάλλον εκτέλεσης, το SDDL2 είναι ένας πλήρης μεταγλωττιστής: ο αναλυτής μεταδίδει δεδομένα στον σημασιολογικό αναλυτή, ο οποίος με τη σειρά του μεταδίδει ένα δακτυλογραφημένο αφηρημένο δέντρο σύνταξης (AST) στον βελτιστοποιητή και ο βελτιστοποιητής ελέγχει τη γεννήτρια κώδικα, η οποία δημιουργεί bytecode εικονικής μηχανής.

Το βασικό αποτέλεσμα είναι η άμεση ανάλυση. Όταν η τοποθεσία μιας εγγραφής μπορεί να προσδιοριστεί πλήρως χρησιμοποιώντας μόνο παραμέτρους και σταθερές, η μηχανή μεταβαίνει απευθείας σε οποιοδήποτε πεδίο χωρίς να σαρώνει προηγούμενα byte, επιτρέποντας πρόσβαση χωρίς αντιγραφή και απόδοση αρκετών GB/s.

Η ίδια η γλώσσα έχει εξελιχθεί παράλληλα με το σύνολο των εργαλείων της. Πλέον υποστηρίζει ρήτρες when για εντολές υπό όρους, παραμετροποιημένες και ανώνυμες εγγραφές, πρόσβαση σε μέλη πεδίου εγγραφών και τελεστές bitwise και λογικούς τελεστές.

Από την πλευρά του προγραμματιστή, το βήμα της σημασιολογικής ανάλυσης εντοπίζει πλέον απροσδιόριστες αναφορές, αναντιστοιχίες τύπων και σφάλματα αρτιότητας κατά τον χρόνο μεταγλώττισης—με τη θέση του πηγαίου κώδικα—και όχι κατά τον χρόνο εκτέλεσης, και έχει κυκλοφορήσει μια επέκταση VS Code για την επισήμανση σύνταξης των αρχείων .sddl.

Νέος ενσωματωμένος κωδικοποιητής LZ

Το OpenZL περιλαμβάνει πλέον τον δικό του κωδικοποιητή LZ, που αντιπροσωπεύεται ως ZL_GRAPH_LZ, καθώς και ένα προφίλ διαδοχικής συμπίεσης στο βοηθητικό πρόγραμμα zli. Οι εργασίες στον κωδικοποιητή συνεχίζονται, επεκτείνοντας το σύνολο των χαρακτηριστικών του και βελτιώνοντας την απόδοση κατά την επεξεργασία μικρών δεδομένων εισόδου. Προς το παρόν, υποστηρίζει λειτουργικότητα ισοδύναμη με το zstd επιπέδου 1, με παράθυρο συμπίεσης 64 KB.

Το OpenZL επιτρέπει τον επανασχεδιασμό κάθε σταδίου του αγωγού LZ για ταχύτητα. Η αρχιτεκτονική γραφημάτων του επιτρέπει επίσης τον συνδυασμό σταδίων κωδικοποίησης εντροπίας, αντί να χρησιμοποιεί έναν μόνο αγωγό που είναι εξίσου κατάλληλος για όλες τις περιπτώσεις χρήσης. Πολλαπλά στάδια μπορούν στη συνέχεια να συνδυαστούν σε μία μόνο λειτουργία για να βελτιωθεί η ταχύτητα επεξεργασίας. Αυτό επιτρέπει στο OpenZL να επιτύχει 10% ταχύτερη συμπίεση και 70% ταχύτερη αποσυμπίεση σε σύγκριση με το Zstandard level 1 στο corpus Silesia. οι δοκιμές μας:

ΣυμπιεστήςΑναλογία συμπίεσηςΤαχύτητα συμπίεσηςΤαχύτητα αποσυμπίεσης
OpenZL LZ επίπεδο 12.74466 MB / s2288 MB / s
Zstd επίπεδο 1 με μέγεθος παραθύρου 64K2.74419 MB / s1254 MB / s
Zstd επίπεδο 12.89424 MB / s1345 MB / s

Υποστήριξη για πολύ μεγάλα δεδομένα εισόδου

Το zli υποστηρίζει πλέον την επεξεργασία τεράστιων δεδομένων εισόδου (μεγέθους αρκετών gigabyte). Πριν από τη συμπίεση, τέτοια δεδομένα χωρίζονται πλέον αυτόματα σε διαχειρίσιμα κομμάτια (περίπου 16 MB από προεπιλογή), περιορίζοντας τη χρήση μνήμης, βελτιώνοντας την τοπικότητα των δεδομένων και επιτρέποντας την παράλληλη επεξεργασία. Το SDDL2 εφαρμόζει μια παρόμοια λειτουργία αυτόματης δημιουργίας κομματιών κατά την εργασία με σχήμα. Νέοι τμηματοποιητές δημιουργήθηκαν ή ενημερώθηκαν στη διαδικασία - για CSV, Parquet και τυπικά αριθμητικά δεδομένα - και όλοι οι τμηματοποιητές είναι πλέον σειριοποιήσιμοι και διαμορφώσιμοι, επομένως η επιλεγμένη διάταξη μπορεί να αποθηκευτεί στον συμπιεστή και να επαναχρησιμοποιηθεί αργότερα.

Αυτό εφαρμόζεται με διαφάνεια κατά τη συμπίεση. Σημειώστε ότι ο αγωγός εκπαίδευσης είναι διαφορετικός και παραμένει ανεπηρέαστος, επομένως δεν έχει σχεδιαστεί για να δέχεται γιγαντιαία δεδομένα εισόδου ως εκπαιδευτικό υλικό.

Βελτιώσεις στον online οπτικοποιητή γραφημάτων (να δοκιμάσετε)
Ο οπτικοποιητής αναγνωρίζει πλέον τα ίχνη συμπίεσης και αποσυμπίεσης από την αρχή μέχρι το τέλος.

Ο πίνακας προεπισκόπησης ροής σάς επιτρέπει να βλέπετε τα byte που ρέουν στην πραγματικότητα κατά μήκος κάθε άκρου και τα χειριστήρια περικοπής διατηρούν εύκολη την εργασία ακόμη και με μεγάλες ροές.

Ο πίνακας ρυθμίσεων συγκεντρώνει όλες τις επιλογές εμφάνισης σε ένα μέρος και ένα πλήρες σύνολο πλήκτρων πρόσβασης - κατευθυντική πλοήγηση, διατεταγμένη διάσχιση, επέκταση και σύμπτυξη και επιλογή κόμβου - σας επιτρέπει να εργάζεστε εύκολα με το εργαλείο χωρίς ποντίκι.

Τα ίχνη έχουν πλέον οριστεί σε εκδόσεις, η συμπίεση που βασίζεται σε μπλοκ εμφανίζεται σωστά και το zli μπορεί επιτέλους να δημιουργήσει τα δικά του ίχνη χρησιμοποιώντας τις νέες σημαίες --trace και --trace-streams-dir.

Ποικίλος

  • Αρκετοί κωδικοποιητές έχουν προστεθεί στον κατάλογο. Οι κωδικοποιητές Partition και bitpack χρησιμοποιούν πλέον έναν ενοποιημένο αποκωδικοποιητή. Ο κωδικοποιητής bitsplit κινητής υποδιαστολής περιλαμβάνει πλέον αποκλειστικούς κωδικοποιητές και αποκωδικοποιητές για τις μορφές fp16, fp32, fp64 και bf16 με εξειδικευμένη επιτάχυνση. Έχουν προστεθεί διαχωρισμός με επίγνωση εύρους (split_byrange), ένας πολυπλέκτης μήκους, ο κωδικοποιητής sentinel, ένας γράφος lz4 και δευτερεύουσες βοηθητικές συναρτήσεις όπως οι tryParseInt και splitByParam.
  • Το API έχει βελτιστοποιηθεί.
  • Βελτιωμένη δοκιμή fuzz.
  • Βελτιωμένη διαδικασία κατασκευής και συσκευασίας για περισσότερες πλατφόρμες.

Πηγή: linux.org.ru