Po sedmih mesecih razvoja je izšel 0.2.0 okvira. OpenZL, namenjen ustvarjanju brezizgubnih podatkovnih kompresorjev.
Okvir je sestavljen iz osnovne knjižnice in orodij za ustvarjanje specializiranih kompresorjev, opisanih v jeziku SDDL.
Za ustvarjanje dobrega specializiranega kompresorja sta dva koraka:
- Analiza podatkov za pridobitev strukture.
- Uporaba dobrih backend kompresorjev, ki uporabljajo pridobljeno strukturo za dosego dobre kompresije.
OpenZL ponuja orodja za oba koraka.
Projekt je napisan v jeziku C in C++ ter je na voljo pod BSD licenco.
Glavne promene
SDDL2
SDDL je bil popolnoma prerenoviran za dosego zasnovanih ciljev. Medtem ko je prvotna demo različica predstavljala poenostavljeno izvajalsko okolje, je SDDL2 polnomočni kompajler: sintaktični analizator posreduje podatke semantičnemu analizatorju, slednji pa predaja tipizirano abstraktno sintaktično drevo (AST) optimizatorju, ki upravlja z generatorjem kode, ki generira bajtno kodo virtualne naprave.
Ključni rezultat je takojšnja sintaktična analiza. Ko je mesto zapisa mogoče popolnoma določiti le na podlagi parametrov in konstant, motor preide neposredno na katero koli polje, ne da bi skeniral prejšnje bajte, kar omogoča dostop brez kopiranja in širino pasu več gigabajtov/sekundo.
Sam jezik se je razvijal skupaj z naborom orodij. Zdaj podpira bloke when za pogojna mesta, parametrične in anonimne zapise, dostop do članov polj zapisa, pa tudi bitne in logične operacije.
Kar zadeva udobje razvijalca, zdaj faza semantične analize razkrije nejasne sklice, neskladja tipov in napake arnosti že v fazi kompajliranja – z navedbo lokacije v izvorni kodi – in ne med izvajanjem, poleg tega je bilo izdano razširitev VS Code za označevanje sintakse datotek .sddl.
Nov vgrajen kodek LZ
OpenZL zdaj vključuje lastni LZ kodek, predstavljen kot ZL_GRAPH_LZ, ter profil sekvenčne kompresije v orodju zli. Delo na kodeku se nadaljuje: poteka širitev funkcij in izboljšanje zmogljivosti ob obdelavi majhnih vhodnih podatkov. Trenutno podpira funkcionalnost, ekvivalentno zstd ravni 1, z velikostjo okna kompresije 64 KB.
OpenZL omogoča ponovno načrtovanje vsakega koraka LZ cevovoda za povečanje hitrosti. Njegova grafična arhitektura prav tako omogoča kombiniranje korakov entropijskega kodiranja, namesto da bi uporabljali enoten cevovod, ki je enako dober za vse scenarije. Nato lahko več korakov združimo v eno operacijo za povečanje hitrosti obdelave. To omogoča, da OpenZL doseže 10% višjo hitrost kompresije in 70% višjo hitrost dekompresije v primerjavi z Zstandard ravni 1 na testu Silesia v naših testih:
| Kompresor | Razmerje kompresije | Hitrost kompresije | Hitrost dekompresije |
|---|---|---|---|
| OpenZL LZ raven 1 | 2.74 | 466 MB/s | 2288 MB/s |
| Zstd raven 1 z velikostjo okna 64K | 2.74 | 419 MB/s | 1254 MB/s |
| Zstd raven 1 | 2.89 | 424 MB/s | 1345 MB/s |
Podpora za zelo velike vhodne podatke
zli zdaj podpira obdelavo ogromnih vhodnih podatkov (v obsegu več gigabajtov). Pred kompresijo so ti podatki zdaj samodejno razdeljeni na koščke nadzorovane velikosti (privzeto približno 16 MB), kar omogoča omejitev porabe pomnilnika, povečuje lokalnost podatkov in odpira možnosti za vzporedno obdelavo. V SDDL2 je implementirana podobna funkcionalnost samodejnega fragmentiranja pri delu po vzorcu. V procesu so bili ustvarjeni ali posodobljeni novi segmentatorji – za CSV, Parquet in standardne numerične podatke – ter vsi segmentatorji so zdaj serializabilni in prilagodljivi, tako da lahko izbrana postavitev ostane shranjena v kompresorju in ponovno uporabljena kasneje.
To se prozorno uporablja med kompresijo. Upoštevajte, da je cevovod za učenje drugačen in ostaja nedotaknjen, zato ni namenjen sprejemanju velikih vhodnih podatkov kot učnega gradiva.
Izboljšave v spletnem vizualizatorju grafov (preizkusiti)
Zdaj vizualizator prepozna sledi kompresije in dekompresije od začetka do konca.
Predogledna plošča toka omogoča pregledovanje bajtov, ki dejansko potekajo preko vsakega roba, poleg tega pa elementi za obrezovanje zagotavljajo, da ostajajo tudi veliki tokovi enostavni za delo.
Nastavitvena plošča združuje vse možnosti prikaza na enem mestu, celoten sklop bližnjic pa omogoča navigacijo po smereh, urejeno obhod, razširjanje in krčenje ter izbiro vozlišč, kar omogoča udobno delo s pripomočkom brez miške.
Zdaj imajo sledi nove različice, stiskanje z razdeljevanjem na bloke se pravilno prikaže, zli pa končno lahko generira svoje sledi z novimi zastavicami —trace in —trace-streams-dir.
Razno
- V imenik je bilo dodanih več kodekov. Kodeka Partition in bitpack zdaj uporabljata združen dekoder. Kodek Floating-point bitsplit je prejel posebne kodirnike in dekodirnike za formate fp16, fp32, fp64 in bf16 s specializiranimi pospeševalniki. Dodana so razdelitev glede na obseg (split_byrange), dolgopski multiplexor, kodek sentinel, graf lz4 ter manjše pomožne funkcije, kot sta tryParseInt in splitByParam.
- API je bil organiziran.
- Testiranje s fuzznim je bilo izboljšano.
- Postopek sestavljanja in pakiranja je bil izboljšan za več platform.
Izvor: linux.org.ru
