Pēc septiņiem izstrādes mēnešiem tika izlaista 0.2.0 rāmja versija OpenZL, kas paredzēts bezzaudējumu datu kompresoru izveidei.
Rāmis sastāv no pamata bibliotēkas un rīkiem specializētu kompresoru izveidei, kas aprakstīti valodā SDDL.
Lai izveidotu labu specializētu kompresoru, ir divi posmi:
- Datu analīze struktūras izvilkšanai.
- Labas aizmugures kompresoru izmantošana, kas izmanto iegūto struktūru labas saspiešanas sasniegšanai.
OpenZL nodrošina rīkus abiem posmiem.
Projekts ir uzrakstīts C un C++ valodās un tiek izplatīts saskaņā ar BSD licenci.
Galvenās izmaiņas
SDDL2
SDDL tika pilnībā pārstrādāts no nulles, lai sasniegtu projektēšanas mērķus. Ja sākotnējā demonstrācijas versija bija vienkārša izpildes vide, tad SDDL2 ir pilnvērtīgs kompilators: sintakses analizators pārsūta datus semantiskajam analizatoram, kurš, savukārt, pārsūta tipizēto abstrakto sintakses koku (AST) optimizatoram, un optimizators kontrolē koda ģeneratoru, kas ģenerē virtuālās mašīnas bytecode.
Pamata rezultāts ir tūlītēja sintakses analīze. Kad ieraksta atrašanās vieta var tikt pilnībā noteikta tikai ar parametriem un konstantēm, mehānisms pāriet tieši uz jebkuru lauku, neskenējot iepriekšējos baitus, nodrošinot piekļuvi bez kopēšanas un caurlaidspēju vairākos GB/s.
Pašai valodai ir bijusi attīstība kopā ar rīku komplektu. Tagad tā atbalsta when blokiem nosacītām atrašanās vietām, parametrizētiem un anonīmiem ierakstiem, piekļuvi ierakstu lauku locekļiem, kā arī bitu un loģiskos operatorus.
Attiecībā uz izstrādātāju ērtībām, semantiskā analīzes posms tagad atklāj neskaidras atsauces, tipa nesakritības un aritmetikas kļūdas kompilācijas laikā – ar avota koda atrašanās vietu – nevis izpildes laikā, kā arī ir izdota VS Code paplašinājums, lai izceltu sintaksi .sddl failiem.
Jaunais iebūvētais LZ kodeks
OpenZL tagad ietver savu LZ kodeku, kas reaģē kā ZL_GRAPH_LZ, kā arī secīgas kompresijas profilu utilītē zli. Darbs pie kodeka turpinās: tiek paplašināts funkciju kopums un palielināta veiktspēja nelielu datu apjoma apstrādē. Pašlaik tā atbalsta funkcionalitāti, kas ir ekvivalenta zstd līmenim 1 ar kompresijas loga izmēru 64 KB.
OpenZL ļauj pārprojektēt katru LZ cauruļvada posmu, lai uzlabotu ātrumu. Tās grafiskā arhitektūra arī ļauj apvienot entropijas kodēšanas posmus, nevis izmantot vienu cauruļvadu, kas vienādi labi atbilst visiem lietojuma gadījumiem. Pēc tam vairākus posmus var apvienot vienā operācijā, lai palielinātu apstrādes ātrumu. Tas ļauj OpenZL nodrošināt par 10% ātrāku kompresiju un par 70% ātrāku atpakušanu salīdzinājumā ar Zstandard līmeņa 1 uz Silesia korpusa testos. mūsu testos:
| Kompresors | Kompresijas attiecība | Kompresijas ātrums | Atpakušanas ātrums |
|---|---|---|---|
| OpenZL LZ līmenis 1 | 2.74 | 466 MB/s | 2288 MB/s |
| Zstd līmenis 1 ar 64K loga izmēru | 2.74 | 419 MB/s | 1254 MB/s |
| Zstd līmenis 1 | 2.89 | 424 MB/s | 1345 MB/s |
Atbalsts ļoti lieliem datu apjomiem
zli tagad atbalsta milzīgu datu apjomu apstrādi (dažos gigabitos). Pirms kompresijas šie dati tagad automātiski tiek sadalīti fragmentos ar kontrolējamu izmēru (patiess – aptuveni 16MB), kas ļauj ierobežot izmantotās atmiņas apjomu, palielināt datu lokalitāti un paplašina iespējas paralēlai apstrādei. SDDL2 ir ieviesta līdzīga automātiskās fragmentēšanas funkcionalitāte, strādājot pēc shēmas. Procesā tika izveidoti vai atjaunināti jauni segmentatori – CSV, Parquet un standarta skaitliskajiem datiem – un visi segmentatori tagad ir serializējami un konfigurējami, tādējādi izvēlētā kompozīcija var tikt saglabāta kompresorā un atkārtoti izmantota vēlāk.
Tas caurspīdīgi tiek pielietots kompresijas laikā. Ņemiet vērā, ka mācību cauruļvads ir atšķirīgs un paliek neskarots, tāpēc tas nav paredzēts, lai saņemtu milzīgus datus kā mācību materiālu.
Uzlabojumi tiešsaistes grafika vizualizatorā (izmēģināt)
Tagad vizualizators atpazīst kompresijas un atpakušanas izsekojumus no sākuma līdz beigām.
Plūsmas priekšskatījuma panelis ļauj apskatīt baitus, kas faktiski pārvietojas pa katru malas, un, pateicoties apgriešanas kontroļu elementiem, pat lielie plūsmas paliek viegli apstrādājami.
Iestatījumu panelis apvieno visus attēlošanas parametrus vienuviet, un pilns ātro taustiņu komplekts – navigācija pa virzieniem, secīga pārlūkošana, izplešanās un sasvēršana, mezglu izvēle – ļauj ērti strādāt ar rīku bez peles.
Tagad izsekojumam ir versijas, saspiešana ar blokiem tiek pareizi attēlota, un zli beidzot var ģenerēt savus izsekojumus, izmantojot jaunus karogus —trace un —trace-streams-dir.
Dažādi
- Katalogam pievienoti vairāki kodeki. Kodeki Partition un bitpack tagad izmanto apvienoto dekoderi. Kodeks Floating-point bitsplit saņēmis specializētus kodētājus un dekoderus fp16, fp32, fp64 un bf16 formātiem ar specializētiem paātrinājumiem. Pievienots diapazonam atbilstošs šķelšana (split_byrange), garuma daudzpleksators, kodeks sentinel, graf lz4 un nelielas palīgfunkcijas, piemēram, tryParseInt un splitByParam.
- API ir sakārtots.
- Ir uzlabota fuzzing testēšana.
- Ir uzlabots būvēšanas un iepakošanas process lielākam platformu skaitam.
Avots: linux.org.ru
