Po sedmi měsících vývoje byla vydána verze 0.2.0 frameworku. OpenZL, určené k vytváření bezztrátových datových kompresorů.
Framework se skládá ze základní knihovny a nástrojů pro vytváření specializovaných kompresorů popsaných v jazyce SDDL.
Vytvoření dobrého specializovaného kompresoru se skládá ze dvou kroků:
- Analýza dat pro extrakci struktury.
- Použití dobrých backendových kompresorů, které využívají výslednou strukturu k dosažení dobré komprese.
OpenZL poskytuje nástroje pro obě fáze.
Projekt je napsán v jazyce C a C++ a je distribuován pod licencí BSD.
Hlavní změny
SDDL2
SDDL byl kompletně přepsán od základů, aby dosáhl svých původních cílů. Zatímco původní demoverze byla zjednodušeným běhovým prostředím, SDDL2 je plnohodnotný kompilátor: parser předává data sémantickému analyzátoru, který následně předává typovaný abstraktní syntaktický strom (AST) optimalizátoru, a optimalizátor řídí generátor kódu, který generuje bajtkód virtuálního stroje.
Klíčovým výsledkem je okamžité parsování. Pokud lze polohu záznamu plně určit pouze pomocí parametrů a konstant, engine přeskočí přímo na jakékoli pole bez skenování předchozích bajtů, což umožňuje přístup bez kopírování a propustnost několika GB/s.
Samotný jazyk se vyvíjel spolu s jeho nástroji. Nyní podporuje klauzule when pro podmíněné příkazy, parametrizované a anonymní záznamy, přístup k členům polí záznamů a bitové a logické operátory.
Na straně vývojářů nyní krok sémantické analýzy identifikuje nedefinované odkazy, neshody typů a chyby arity v době kompilace – s umístěním zdrojového kódu – namísto za běhu. Bylo vydáno rozšíření VS Code pro zvýrazňování syntaxe souborů .sddl.
Nový vestavěný LZ kodek
OpenZL nyní obsahuje vlastní LZ kodek, reprezentovaný jako ZL_GRAPH_LZ, a také sekvenční kompresní profil v nástroji zli. Práce na kodeku stále probíhá, rozšiřuje jeho sadu funkcí a zlepšuje výkon při zpracování malých vstupních dat. V současné době podporuje funkce ekvivalentní zstd úrovně 1 s kompresním oknem 64 KB.
OpenZL umožňuje přepracovat každou fázi LZ pipeline pro zvýšení rychlosti. Jeho grafová architektura také umožňuje kombinovat fáze entropického kódování, namísto použití jediné pipeline, která je stejně vhodná pro všechny případy použití. Více fází lze pak sloučit do jedné operace pro zvýšení rychlosti zpracování. To umožňuje OpenZL dosáhnout o 10 % rychlejší komprese a o 70 % rychlejší dekomprese ve srovnání se Zstandard úrovně 1 na korpusu Silesia. naše testy:
| Kompresor | Kompresní poměr | Rychlost komprese | Dekompresní rychlost |
|---|---|---|---|
| OpenZL LZ úroveň 1 | 2.74 | 466 MB/s | 2288 MB/s |
| Zstd úrovně 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 pro velmi rozsáhlá vstupní data
zli nyní podporuje zpracování obrovských vstupních dat (o velikosti několika gigabajtů). Před kompresí jsou tato data automaticky rozdělena na bloky s přiměřenou velikostí (ve výchozím nastavení přibližně 16 MB), což omezuje využití paměti, zlepšuje lokalitu dat a umožňuje paralelní zpracování. SDDL2 implementuje podobnou funkci automatického dělení na bloky při práci se schématem. Během 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é rozvržení lze uložit do kompresoru a později znovu použít.
Toto se transparentně aplikuje během komprese. Všimněte si, že trénovací kanál je jiný a zůstává nedotčen, takže není navržen pro přijímání gigantických vstupních dat jako trénovacího materiálu.
Vylepšení online vizualizéru grafů (vyzkoušet)
Vizualizér nyní rozpoznává stopy komprese a dekomprese od začátku do konce.
Panel náhledu streamu umožňuje vidět, které bajty skutečně proudí podél každé hrany, a ovládací prvky ořezávání usnadňují práci i s velkými streamy.
Panel nastavení sdružuje všechny možnosti zobrazení na jednom místě a kompletní sada klávesových zkratek – směrová navigace, uspořádané procházení, rozbalování a sbalování a výběr uzlů – umožňuje pohodlně pracovat s nástrojem bez myši.
Trasování je nyní verzováno, bloková komprese 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é
- Do katalogu bylo přidáno několik kodeků. Kodeky Partition a Bitpack nyní používají unifikovaný dekodér. Kodek s plovoucí desetinnou čárkou Bitsplit nyní obsahuje specializované kodéry a dekodéry pro formáty fp16, fp32, fp64 a bf16 se specializovanou akcelerací. Bylo přidáno rozdělení podle rozsahu (split_byrange), multiplexor délky, kodek Sentinel, graf lz4 a drobné pomocné funkce, jako například tryParseInt a splitByParam.
- API bylo zjednodušeno.
- Vylepšené fuzz testování.
- Vylepšený proces sestavení a balení pro více platforem.
Zdroj: linux.org.ru
