Etter syv måneder med utvikling ble versjon 0.2.0 av rammeverket lansert. OpenZL, designet for å lage tapsfrie datakompressorer.
Rammeverket består av et grunnleggende bibliotek og verktøy for å lage spesialiserte kompressorer, beskrevet på språket SDDL.
For å lage en god spesialisert kompressor er det to trinn:
- Analyse av data for å utvinne struktur.
- Bruk av gode backend-kompressorer, som benytter den utvunnede strukturen for å oppnå god kompresjon.
OpenZL tilbyr verktøy for begge trinnene.
Prosjektet er skrevet i C og C++ og distribueres under BSD-lisens.
Viktige endringer
SDDL2
SDDL er fullstendig redesignet fra bunnen av for å oppnå de designmålene som var satt. Mens den opprinnelige demoen var en forenklet kjøretid, er SDDL2 en fullverdig kompilator: parseren overfører data til den semantiske analysatoren, som viderefører det typede abstrakte syntaksetreet (AST) til optimereren, og optimereren styrer kodegeneratoren som genererer bytekode for den virtuelle maskinen.
Det viktigste resultatet er umiddelbar syntaktisk analyse. Når posisjonen til en post kan bestemmes utelukkende basert på parametere og konstanter, går motoren direkte til ethvert felt uten å skanne de foregående byte, noe som gir tilgang uten kopiering og båndbredde på flere GB/s.
Språket har utviklet seg sammen med verktøysettet. Nå støtter det when-blokker for betingede plasseringer, parametiserte og anonyme poster, tilgang til felts medlemmer samt bit- og logiske operatorer.
Når det gjelder utviklerens bekvemmelighet, oppdager det semantiske analysetrinnet nå usikre referanser, typeavansement og aritetfeil i kompileringstrinnet – med angivelse av posisjonen i kildekoden – i stedet for under kjøring, samt har et VS Code-utvidelse blitt utgitt for syntaksutheving av .sddl-filer.
Den nye innebygde LZ-kodeken
I OpenZL har nå inkludert en egen LZ-kodek, presentert som ZL_GRAPH_LZ, samt en profil for sekvensiell kompresjon i verktøyet zli. Arbeidet med kodeken fortsetter: funksjonaliteten utvides og ytelsen forbedres ved behandling av små inngangsdata. Så langt støtter den funksjonalitet som tilsvarer zstd nivå 1, med et kompresjonsvindu på 64 KB.
OpenZL gir mulighet til å omdanne hvert trinn i LZ-pipelinen for å øke hastigheten. Den grafiske arkitekturen lar også kombinere trinnene for entropikoding i stedet for å bruke en enkelt pipeline som passer like godt for alle bruksområder. Deretter kan flere trinn slås sammen til én operasjon for å øke behandlingshastigheten. Dette gjør det mulig for OpenZL å oppnå 10 % høyere kompresjonshastighet og 70 % høyere dekompresjonshastighet sammenlignet med Zstandard nivå 1 på Silesia. i våre tester:
| Kompressor | Kompresjonsforhold | Kompresjonshastighet | Dekomprimeringshastighet |
|---|---|---|---|
| OpenZL LZ nivå 1 | 2.74 | 466 MB/s | 2288 MB/s |
| Zstd nivå 1 med 64K vindusstørrelse | 2.74 | 419 MB/s | 1254 MB/s |
| Zstd nivå 1 | 2.89 | 424 MB/s | 1345 MB/s |
Støtte for svært store inngangsdata
zli støtter nå behandling av enorme inngangsdata (i størrelsesorden flere gigabyte). Før komprimering blir slike data nå automatisk delt opp i håndterbare biter (standard rundt 16 MB), noe som begrenser minneforbruket, øker datalokaliseringen og åpner for parallell behandling. I SDDL2 er en lignende funksjon for automatisk fragmentering implementert når det jobbes etter planen. I prosessen har nye segmenter blitt laget eller oppdatert – for CSV, Parquet og standard numeriske data – og alle segmenter er nå serialiserbare og konfigurerbare, slik at den valgte konfigurasjonen kan lagres i kompressoren og gjenbrukes senere.
Dette brukes sømløst under komprimering. Vær oppmerksom på at treningspipen er forskjellig og forblir uendret, så den er ikke ment for å ta imot gigantiske inngangsdata som treningsmateriale.
Forbedringer i online grafvisualiseringen (prøve)
Nå gjenkjenner visualiseringen komprimerings- og dekomprimeringstracer fra start til slutt.
Strømforhåndsvisningspanelet lar deg se byte-strømmen som faktisk går gjennom hver kant, og med klippkontroller forblir selv store strømmer enkle å håndtere.
Innstillingspanelet samler alle visningsalternativene på ett sted, mens det komplette settet med hurtigtaster – navigering mellom retninger, ordnet traversering, utvidelse og sammentrekning, valg av noder – gjør det enkelt å bruke verktøyet uten mus.
Spor har nå versjoner, blokksammensetting vises korrekt, og zli kan endelig generere sine egne spor med de nye flaggene –trace og –trace-streams-dir.
Diverse
- Flere kodeker har blitt lagt til katalogen. Kodekene Partition og bitpack bruker nå en kombinert dekoder. Kodekene Floating-point bitsplit har spesialiserte kodere og dekodere for fp16-, fp32-, fp64- og bf16-formater med spesialiserte akselerasjoner. Det er lagt til rekkeviddebasert splitting (split_byrange), lengdemultiplexer, kodek sentinel, graf lz4, og små hjelpfunksjoner som tryParseInt og splitByParam.
- API-en er ordnet.
- Fuzzing-testing er forbedret.
- Bygge- og pakkeprosessene er forbedret for flere plattformer.
Kilde: linux.org.ru
