OpenZL 0.2.0 OpenZL 0.2.0

Յոթ ամիս տևած մշակումից հետո թողարկվեց շրջանակի 0.2.0 տարբերակը։ OpenZL, որը նախատեսված է կորուստ չպարունակող տվյալների կոմպրեսորներ ստեղծելու համար։

Շրջանակը բաղկացած է բազային գրադարանից և լեզվով նկարագրված մասնագիտացված կոմպրեսորներ ստեղծելու գործիքներից։ SDDL.
Լավ մասնագիտացված կոմպրեսոր ստեղծելու համար կան երկու քայլ.

  1. Տվյալների վերլուծություն՝ կառուցվածքը որոշելու համար։
  2. Լավ հետին կոմպրեսորների օգտագործում, որոնք օգտագործում են արդյունքում ստացված կառուցվածքը՝ լավ սեղմում ապահովելու համար։

OpenZL-ը տրամադրում է գործիքներ երկու փուլերի համար էլ։

Նախագիծը գրված է C և C++ լեզուներով և տարածվում է BSD լիցենզիայով։

Հիմնական փոփոխություններ

SDDL2

SDDL-ը ամբողջությամբ վերաշարադրվեց զրոյից՝ իր սկզբնական դիզայնի նպատակներին հասնելու համար: Մինչդեռ սկզբնական դեմո տարբերակը պարզեցված աշխատանքային միջավայր էր, SDDL2-ը լիարժեք կոմպիլյատոր է. վերլուծիչը տվյալները փոխանցում է սեմանտիկ վերլուծիչին, որն էլ իր հերթին օպտիմիզատորին փոխանցում է տիպավորված աբստրակտ սինտաքսի ծառ (AST), իսկ օպտիմիզատորը կառավարում է կոդի գեներատորը, որը ստեղծում է վիրտուալ մեքենայի բայթկոդ:

Հիմնական արդյունքը ակնթարթային վերլուծությունն է: Երբ գրառման գտնվելու վայրը կարող է լիովին որոշվել միայն պարամետրերի և հաստատունների միջոցով, շարժիչը անմիջապես անցնում է ցանկացած դաշտ՝ առանց նախորդ բայթերը սկանավորելու, ապահովելով պատճենահանման կարիք չունեցող մուտք և մի քանի ԳԲ/վրկ թողունակություն:

Լեզուն ինքնին զարգացել է իր գործիքակազմին զուգընթաց։ Այն այժմ աջակցում է «when» կետերը պայմանական հրամանների, պարամետրացված և անանուն գրառումների, գրառումների դաշտի անդամներին մուտք գործելու, ինչպես նաև բիթային և տրամաբանական օպերատորների համար։

Մշակողի կողմից, սեմանտիկ վերլուծության քայլն այժմ նույնականացնում է չսահմանված հղումները, տիպերի անհամապատասխանությունները և arity սխալները կոմպիլյացիայի ժամանակ՝ սկզբնաղբյուր կոդի տեղադրմամբ, այլ ոչ թե կատարման ժամանակ, և թողարկվել է VS Code ընդլայնում .sddl ֆայլերի սինտաքսի ընդգծման համար։

Նոր ներկառուցված LZ կոդեկ

OpenZL-ը այժմ ներառում է իր սեփական LZ կոդեկը, որը ներկայացված է որպես ZL_GRAPH_LZ, ինչպես նաև հաջորդական սեղմման պրոֆիլ zli օգտակար ծրագրում: Կոդեկի վրա աշխատանքները շարունակվում են՝ ընդլայնելով դրա գործառույթների շարքը և բարելավելով արտադրողականությունը փոքր մուտքային տվյալներ մշակելիս: Ներկայումս այն աջակցում է zstd մակարդակի 1-ին համարժեք ֆունկցիոնալություն՝ 64 KB սեղմման պատուհանով:

OpenZL-ը թույլ է տալիս LZ խողովակաշարի յուրաքանչյուր փուլ վերաձևավորել արագության համար: Դրա գրաֆիկական ճարտարապետությունը նաև թույլ է տալիս համատեղել էնտրոպիայի կոդավորման փուլերը՝ մեկ խողովակաշար օգտագործելու փոխարեն, որը հավասարապես հարմար է բոլոր օգտագործման դեպքերի համար: Այնուհետև բազմաթիվ փուլերը կարող են համատեղվել մեկ գործողության մեջ՝ մշակման արագությունը բարելավելու համար: Սա թույլ է տալիս OpenZL-ին հասնել 10%-ով ավելի արագ սեղմման և 70%-ով ավելի արագ դեկոմպրեսիայի՝ համեմատած Silesia կորպուսի Zstandard մակարդակի 1-ի հետ: մեր թեստերը:

ԿոմպրեսորՍեղմման հարաբերակցությունըՍեղմման արագությունԴեկոմպրեսիայի արագություն
OpenZL LZ մակարդակ 12.74466 Մբ / վ2288 Մբ / վ
Zstd մակարդակ 1՝ 64K պատուհանի չափսով2.74419 Մբ / վ1254 Մբ / վ
Zstd մակարդակ 12.89424 Մբ / վ1345 Մբ / վ

Աջակցություն շատ մեծ մուտքային տվյալների համար

zli-ն այժմ աջակցում է հսկայական մուտքային տվյալների մշակում (մի քանի գիգաբայթ չափի): Սեղմումից առաջ նման տվյալները այժմ ավտոմատ կերպով բաժանվում են կառավարելի չափի կտորների (մոտավորապես 16 ՄԲ՝ ըստ լռելյայնի), սահմանափակելով հիշողության օգտագործումը, բարելավելով տվյալների տեղայնությունը և հնարավորություն տալով զուգահեռ մշակում: SDDL2-ը սխեմայի հետ աշխատելիս ներդնում է նմանատիպ ավտոմատ կտորավորման գործառույթ: Այդ ընթացքում ստեղծվել կամ թարմացվել են նոր սեգմենտատորներ՝ CSV, Parquet և ստանդարտ թվային տվյալների համար, և բոլոր սեգմենտատորներն այժմ սերիականացվելի և կարգավորելի են, ուստի ընտրված դասավորությունը կարող է պահպանվել կոմպրեսորում և հետագայում վերօգտագործվել:

Սա կիրառվում է թափանցիկորեն սեղմման ժամանակ։ Նկատի ունեցեք, որ մարզման խողովակաշարը տարբեր է և մնում է անփոփոխ, ուստի այն նախատեսված չէ հսկայական մուտքային տվյալներ որպես մարզման նյութ ընդունելու համար։

Առցանց գրաֆիկի վիզուալիզատորի բարելավումներ (փորձել)
Վիզուալիզատորն այժմ ճանաչում է սեղմման և դեկոմպրեսիայի հետքերը սկզբից մինչև վերջ։

Հոսքի նախադիտման վահանակը թույլ է տալիս տեսնել, թե իրականում ինչպես են բայթերը հոսում յուրաքանչյուր եզրով, իսկ կտրման կառավարման տարրերը հեշտացնում են նույնիսկ մեծ հոսքերի հետ աշխատանքը։

Կարգավորումների վահանակը մեկ տեղում է միավորում ցուցադրման բոլոր տարբերակները, իսկ ստեղների ամբողջական հավաքածուն՝ ուղղորդված նավարկություն, հերթականությամբ տեղաշարժ, ընդարձակում և փլուզում, և հանգույցի ընտրություն, թույլ է տալիս հարմարավետորեն աշխատել գործիքի հետ առանց մկնիկի։

Հետագծերը այժմ տարբերակված են, բլոկների վրա հիմնված սեղմումը ճիշտ է ցուցադրվում, և zli-ն վերջապես կարող է ստեղծել իր սեփական հետագծերը՝ օգտագործելով նոր --trace և --trace-streams-dir դրոշակները։

Ժողովածու

  • Կատալոգին ավելացվել են մի քանի կոդեկներ: Բաժնային և բիթփեք կոդեկներն այժմ օգտագործում են միասնական դեկոդեր: Լողացող կետով բիթբաժանման կոդեկն այժմ ներառում է նվիրված կոդավորիչներ և դեկոդերներ fp16, fp32, fp64 և bf16 ձևաչափերի համար՝ մասնագիտացված արագացմամբ: Ավելացվել են տիրույթի վրա հիմնված բաժանում (split_byrange), երկարության մուլտիպլեքսոր, sentinel կոդեկ, lz4 գրաֆ և փոքր օժանդակ ֆունկցիաներ, ինչպիսիք են tryParseInt-ը և splitByParam-ը:
  • API-ը արդիականացվել է։
  • Բարելավված մշուշոտ թեստավորում։
  • Ավելի շատ հարթակների համար բարելավված կառուցման և փաթեթավորման գործընթաց։

Source: linux.org.ru