După șapte luni de dezvoltare, a fost lansată versiunea 0.2.0 a framework-ului OpenZL, destinat creării de compresoare de date fără pierderi.
Framework-ul este compus dintr-o bibliotecă de bază și instrumente pentru crearea de compresoare specializate, descrise în limbajul SDDL.
Pentru a crea un bun compresor specializat, sunt două etape:
- Analiza datelor pentru extragerea structurii.
- Utilizarea unor compresoare de backend eficiente, care utilizează structura obținută pentru a atinge o compresie bună.
OpenZL oferă instrumente pentru ambele etape.
Proiectul este scris în limbajele C și C++ și este distribuit sub licența BSD.
Principalele modificări
SDDL2
SDDL a fost complet reproiectat de la zero pentru a atinge obiectivele de design stabilite. Dacă versiunea demo inițială a fost un mediu de execuție simplificat, atunci SDDL2 este un compilator complet: parserul transmite datele analizoarelor semantice, iar acestea transmit arborele sintactic abstract (AST) tipizat optimizatorului, care controlează generatorul de cod ce generează bytecode pentru mașina virtuală.
Rezultatul cheie este analiza sintactică instantanee. Când poziția înregistrării poate fi determinată complet doar din parametri și constante, motorul accesează direct orice câmp, fără a scana byte-urile anterioare, asigurând acces fără copiere și o lățime de bandă de câteva GB/s.
Întregul limbaj a evoluat împreună cu setul de instrumente. Acum, acesta suportă blocuri when pentru poziții condiționale, înregistrări parametrizate și anonime, acces la membri ai câmpurilor înregistrărilor, precum și operatori pe biți și logici.
În ceea ce privește confortul dezvoltatorului, etapa de analiză semantică acum identifică referințe nedefinite, necorespondențe de tipuri și erori de aritate în timpul compilării - indicând locația în codul sursă - și a fost lansat o extensie pentru VS Code pentru evidențierea sintaxei fișierelor .sddl.
Noul codec încorporat LZ
În OpenZL este acum inclus un codec LZ propriu, prezentat sub forma ZL_GRAPH_LZ, precum și un profil de compresie secvențială în utilitarul zli. Lucrările la codec continuă: se extinde setul de funcții și se îmbunătățește performanța la procesarea datelor de intrare mici. În acest moment, acesta suportă funcționalități echivalente cu zstd nivelul 1, cu dimensiunea feronatului de compresie de 64 KB.
OpenZL oferă posibilitatea de a reproiecta fiecare etapă a conveiorului LZ pentru a crește viteza. Arhitectura sa grafică permite, de asemenea, combinarea etapelor de codificare a entropiei, în loc de a utiliza un singur conveior, care se potrivește la fel de bine pentru toate scenariile de utilizare. Apoi, mai multe etape pot fi combinate într-o singură operațiune pentru a spori viteza de procesare. Acest lucru permite OpenZL să ofere o viteză de compresie cu 10% mai mare și o viteză de decompresie cu 70% mai mare în comparație cu Zstandard nivelul 1 pe corpul Silesia în teste noastre:
| Compresor | Raport de compresie | Viteză de compresie | Viteză de decompresie |
|---|---|---|---|
| OpenZL LZ nivel 1 | 2.74 | 466 MB/s | 2288 MB/s |
| Zstd nivel 1 cu dimensiunea feronatului 64K | 2.74 | 419 MB/s | 1254 MB/s |
| Zstd nivel 1 | 2.89 | 424 MB/s | 1345 MB/s |
Suport pentru date de intrare foarte mari
zli acum suportă procesarea datelor de intrare uriașe (de câțiva gigaocteți). Înainte de compresie, aceste date sunt acum automat împărțite în fragmente cu dimensiuni gestionate (în mod implicit – aproximativ 16 MB), ceea ce limitează cantitatea de memorie utilizată, îmbunătățește localitatea datelor și deschide oportunități pentru procesarea paralelă. O funcționalitate similară de fragmentare automată este implementată în SDDL2 atunci când se lucrează pe schemă. Au fost create sau actualizate noi segmentatori – pentru CSV, Parquet și date numerice standard – iar toți segmentatorii sunt acum serializabili și configurabili, astfel încât configurația aleasă poate fi salvată în compresor și reutilizată mai târziu.
Aceasta se aplică transparent în timpul compresiei. Rețineți că conveiorul de învățare este diferit și rămâne neatins, prin urmare nu este destinat primirii de date de intrare uriașe ca material de învățare.
Îmbunătățiri în vizualizatorul grafic online (testează)
Acum vizualizatorul recunoaște trasările de compresie și decompresie de la început până la sfârșit.
Panoul de previzualizare a fluxului permite vizualizarea octeților care trec efectiv prin fiecare arce, iar datorită elementelor de control de tăiere, fluxurile mari rămân ușor de gestionat.
Panoul de setări reunește toate opțiunile de afișare într-un singur loc, iar setul complet de taste rapide – navigare direcțională, explorare ordonată, desfășurare și retractare, selecția nodurilor – permite utilizarea confortabilă a instrumentului fără mouse.
Acum trasările au versiuni, compresia cu blocaj este afișată corect, iar zli poate genera în sfârșit propriile trasări folosind noile opțiuni —trace și —trace-streams-dir.
Diverse
- Catalogul a fost îmbogățit cu mai multe codecuri. Codecurile Partition și bitpack folosesc acum un decodor unic. Codec-ul Floating-point bitsplit a primit codificatori și decodificatori specializați pentru formatele fp16, fp32, fp64 și bf16 cu accelerări specializate. Au fost adăugate funcții de împărțire în funcție de interval (split_byrange), multiplexer de lungime, codec sentinel, grafic lz4 și mici funcții auxiliare, cum ar fi tryParseInt și splitByParam.
- API-ul a fost ordonat.
- Testarea de fuzzing a fost îmbunătățită.
- Procesul de construire și pachetare a fost îmbunătățit pentru un număr mai mare de platforme.
Sursa: linux.org.ru
