OpenZL 0.2.0

OpenZL 0.2.0 OpenZL 0.2.0

Na sewe maande van ontwikkeling is weergawe 0.2.0 van die raamwerk vrygestel. OpenZL, ontwerp om verlieslose datakompressors te skep.

Die raamwerk bestaan ​​uit 'n basisbiblioteek en gereedskap vir die skep van gespesialiseerde kompressors wat in die taal beskryf word. SDDL.
Daar is twee stappe om 'n goeie toegewyde kompressor te skep:

  1. Data-analise om struktuur te onttrek.
  2. Die gebruik van goeie agterkant-kompressors wat die gevolglike struktuur benut om goeie kompressie te verkry.

OpenZL bied gereedskap vir beide stadiums.

Die projek is in C en C++ geskryf en word versprei onder die BSD-lisensie.

Groot veranderinge

SDDL2

SDDL is van nuuts af herskryf om sy oorspronklike ontwerpdoelwitte te bereik. Terwyl die oorspronklike demonstrasie 'n vereenvoudigde looptydomgewing was, is SDDL2 'n volwaardige samesteller: die ontleder gee data deur aan die semantiese ontleder, wat weer 'n getikte abstrakte sintaksisboom (AST) aan die optimiseerder deurgee, en die optimiseerder beheer die kodegenerator, wat virtuele masjien-bytekode genereer.

Die belangrikste resultaat is onmiddellike ontleding. Wanneer 'n rekord se ligging volledig bepaal kan word deur slegs parameters en konstantes te gebruik, spring die enjin direk na enige veld sonder om vorige grepe te skandeer, wat kopieerlose toegang en deurset van etlike GB/s moontlik maak.

Die taal self het saam met sy gereedskap ontwikkel. Dit ondersteun nou when-klousules vir voorwaardelike stellings, geparameteriseerde en anonieme rekords, toegang tot rekordveldlede, en bisgewyse en logiese operateurs.

Aan die ontwikkelaarkant identifiseer die semantiese analisestap nou ongedefinieerde verwysings, tipe-wanpassings en ariteitsfoute tydens kompilering – met bronkode-ligging – eerder as tydens looptyd, en 'n VS Code-uitbreiding vir sintaksis-uitlig van .sddl-lêers is vrygestel.

Nuwe ingeboude LZ-kodek

OpenZL sluit nou sy eie LZ-kodek in, verteenwoordig as ZL_GRAPH_LZ, sowel as 'n opeenvolgende kompressieprofiel in die zli-hulpprogram. Werk aan die kodek is aan die gang, wat die funksiestel uitbrei en die werkverrigting verbeter wanneer klein invoerdata verwerk word. Tans ondersteun dit funksionaliteit gelykstaande aan zstd vlak 1, met 'n kompressievenster van 64 KB.

OpenZL laat toe dat elke stadium van die LZ-pyplyn herontwerp word vir spoed. Die grafiekargitektuur maak ook voorsiening vir die kombinasie van entropie-koderingstadiums, eerder as om 'n enkele pyplyn te gebruik wat ewe goed geskik is vir alle gebruiksgevalle. Verskeie stadiums kan dan in 'n enkele bewerking gekombineer word om verwerkingspoed te verbeter. Dit laat OpenZL toe om 10% vinniger kompressie en 70% vinniger dekompressie te bereik in vergelyking met Zstandard vlak 1 op die Silesië-korpus. ons toetse:

KompressorKompressieverhoudingKompressiespoedDekompressiespoed
OpenZL LZ vlak 12.74466 MB / s2288 MB / s
Zstd vlak 1 met 64K venstergrootte2.74419 MB / s1254 MB / s
Zstd vlak 12.89424 MB / s1345 MB / s

Ondersteuning vir baie groot invoerdata

zli ondersteun nou die verwerking van enorme invoerdata (verskeie gigagrepe in grootte). Voor kompressie word sulke data nou outomaties in hanteerbare stukke verdeel (ongeveer 16 MB by verstek), wat geheuegebruik beperk, data-lokaliteit verbeter en parallelle verwerking moontlik maak. SDDL2 implementeer 'n soortgelyke outomatiese segmenteringsfunksie wanneer met skemas gewerk word. Nuwe segmenteerders is in die proses geskep of opgedateer - vir CSV, Parquet en standaard numeriese data - en alle segmenteerders is nou serialiseerbaar en konfigureerbaar, sodat die gekose uitleg in die kompressor gestoor en later hergebruik kan word.

Dit word deursigtig toegepas tydens kompressie. Let daarop dat die opleidingspyplyn anders is en onaangeraak bly, dus is dit nie ontwerp om reuse-invoerdata as opleidingsmateriaal te aanvaar nie.

Verbeterings in die aanlyn grafiekvisualiseerder (om te probeer)
Die visualiseerder herken nou kompressie- en dekompressiespore van begin tot einde.

Die stroomvoorskoupaneel laat jou sien hoe die grepe eintlik langs elke rand vloei, en snoeikontroles hou selfs groot strome maklik om mee te werk.

Die instellingspaneel bring alle vertoonopsies op een plek bymekaar, en 'n volledige stel sneltoetse – rigtingnavigasie, geordende deurkruising, uitbreiding en invouing, en noduskeuse – laat jou toe om gerieflik met die instrument te werk sonder 'n muis.

Spore is nou weergawes gegee, blokgebaseerde kompressie word korrek vertoon, en zli kan uiteindelik sy eie spore genereer deur die nuwe --trace en --trace-streams-dir vlae te gebruik.

Miscellanea

  • Verskeie kodeks is by die katalogus gevoeg. Die Partition- en bitpack-kodeks gebruik nou 'n verenigde dekodeerder. Die drywende-punt-bitsplit-kodek sluit nou toegewyde enkodeerders en dekodeerders vir die fp16-, fp32-, fp64- en bf16-formate met gespesialiseerde versnelling in. Reikwydtebewuste splitsing (split_byrange), 'n lengtemultiplekser, die sentinel-kodek, 'n lz4-grafiek en klein hulpfunksies soos tryParseInt en splitByParam is bygevoeg.
  • Die API is vaartbelyn gemaak.
  • Verbeterde fuzz-toetsing.
  • Verbeterde bou- en verpakkingsproses vir meer platforms.

Bron: linux.org.ru