Po sedmi měsících vývoje byl uvolněn framework 0.2.0 OpenZL, určený k vytváření bezztrátových datových kompresorů.
Framework se skládá z základní knihovny a nástrojů pro vytváření specializovaných kompresorů, které jsou popsány v jazyce SDDL.
K vytvoření dobrého specializovaného kompresoru jsou potřeba dvě fáze:
- Analýza dat pro extrakci struktury.
- Použití kvalitních backendových kompresorů, které využívají získanou strukturu pro dosažení dobrého zhuštění.
OpenZL poskytuje nástroje pro obě fáze.
Projekt je napsán v jazycích C a C++ a je distribuován pod licencí BSD.
Hlavní změny
SDDL2
SDDL byl kompletně přepracován od základů, aby dosáhl stanovených návrhových cílů. Zatímco první demoverze představovala zjednodušené prostředí pro spuštění, SDDL2 je plnohodnotný kompilátor: syntaktický analyzátor předává data semantickému analyzátoru, ten dále předává typizované abstraktní syntaktické stromu (AST) optimalizátoru, a optimalizátor řídí generátor kódu, který generuje bajtový kód virtuálního stroje.
Klíčovým výsledkem je okamžitá syntaktická analýza. Když lze plně určit umístění záznamu pouze na základě parametrů a konstant, motor přechází přímo na jakékoliv pole, aniž by skenoval předchozí bajty, což zajišťuje přístup bez kopírování a propustnost několika GB/s.
Samotný jazyk se vyvíjel spolu s nástroji. Nyní podporuje bloky when pro podmíněná umístění, parametrové a anonymní záznamy, přístup k členům polí záznamu, a také bitové a logické operátory.
Pokud jde o pohodlí vývojáře, fáze semantické analýzy nyní odhaluje nejednoznačné odkazy, nesoulady typů a chyby arnosti v době kompilace – s uvedením umístění v zdrojovém kódu – namísto během běhu, a také bylo vydáno rozšíření pro VS Code pro zvýraznění syntaxe vstupních souborů .sddl.
Nový integrovaný kodek LZ
OpenZL nyní zahrnuje vlastní LZ kodek, představený jako ZL_GRAPH_LZ, a také profil sekvenčního kompresního procesu v nástroji zli. Práce na kodeku pokračuje: rozšiřuje se soubor funkcí a zvyšuje se výkon při zpracování malých vstupních dat. V současné době podporuje funkcionalitu ekvivalentní zstd úrovně 1 s velikostí okna komprese 64 KB.
OpenZL umožňuje redesignovat každý krok procesu LZ s cílem zvýšit rychlost. Jeho grafová architektura také umožňuje kombinovat fáze entropické kódování místo používání jednotného procesu, který je stejně efektivní pro všechny scénáře použití. Několik fází lze poté sloučit do jedné operace pro zvýšení rychlosti zpracování. To umožňuje OpenZL zajistit o 10% vyšší rychlost komprese a o 70% rychlejší dekompresi ve srovnání se Zstandard úrovně 1 na vzorku Silesia v našich testech:
| Kompressor | Kompresní poměr | Rychlost komprese | Rychlost dekomprese |
|---|---|---|---|
| OpenZL LZ úroveň 1 | 2.74 | 466 MB/s | 2288 MB/s |
| Zstd úroveň 1 s velikostí okna 64K | 2.74 | 419 MB/s | 1254 MB/s |
| Zstd úroveň 1 | 2.89 | 424 MB/s | 1345 MB/s |
Podpora velmi velkých vstupních dat
zli nyní podporuje zpracování obrovských vstupních dat (o velikosti několika gigabajtů). Před kompresí jsou taková data nyní automaticky rozdělena na fragmenty řízené velikosti (výchozí je přibližně 16MB), což umožňuje omezit objem používané paměti, zlepšit lokalitu dat a otevírá možnosti pro paralelní zpracování. V SDDL2 byla implementována podobná funkce automatického fragmentování během práce na schématu. V procesu byly vytvořeny nebo aktualizovány nové segmentátory – pro CSV, Parquet a standardní číselná data – a všechny segmentátory jsou nyní serializovatelné a konfigurovatelné, takže zvolená konfigurace může být uložena v kompresoru a později znovu použita.
Toto se transparentně uplatňuje během komprese. Vezměte prosím na vědomí, že tréninkový proces je odlišný a zůstává nedotčen, takže není určen k přijímání obrovských vstupních dat jako tréninkového materiálu.
Zlepšení v online vizualizátoru grafu (vyzkoušet)
Nyní vizualizátor rozpoznává stopy komprese a dekomprese od začátku do konce.
Panel pro náhled toku umožňuje prohlížet bajty, které skutečně procházejí každým okrajem, a díky prvkům pro ořezávání zůstávají i velké toky snadno ovladatelné.
Nastavení panelu slučuje všechny možnosti zobrazení na jednom místě, a rozsáhlý soubor klávesových zkratek – navigace směrem, uspořádané procházení, rozbalování a sbalování, výběr uzlů – umožňuje pohodlnou práci s nástrojem bez myši.
Nyní mají trasování verze, komprese s blokovým dělením se zobrazuje správně a zli konečně může generovat vlastní trasování pomocí nových příznaků —trace a —trace-streams-dir.
Různé
- Bylo přidáno několik kodeků. Kodeky Partition a bitpack nyní používají sloučený dekodér. Kodek Floating-point bitsplit dostal specializované kodéry a dekodéry pro formáty fp16, fp32, fp64 a bf16 s odbornými urychlovateli. Bylo přidáno dělení s ohledem na rozsah (split_byrange), multiplexor délky, kodek sentinel, graf lz4 a malé pomocné funkce, jako jsou tryParseInt a splitByParam.
- API bylo uspořádáno.
- Bylo zlepšeno fuzzingové testování.
- Byl vylepšen proces sestavení a balení pro více platforem.
Zdroj: linux.org.ru
