پس از هفت ماه توسعه، نسخه ۰.۲.۰ این چارچوب منتشر شد. OpenZL، طراحی شده برای ایجاد فشردهسازهای داده بدون اتلاف.
این چارچوب شامل یک کتابخانه پایه و ابزارهایی برای ایجاد کمپرسورهای تخصصی است که در این زبان شرح داده شدهاند. SDDL.
دو مرحله برای ایجاد یک کمپرسور اختصاصی خوب وجود دارد:
- تحلیل دادهها برای استخراج ساختار.
- استفاده از کمپرسورهای backend خوب که از ساختار حاصل برای دستیابی به فشردهسازی خوب بهره میبرند.
OpenZL ابزارهایی را برای هر دو مرحله فراهم میکند.
این پروژه با زبانهای C و C++ نوشته شده و تحت مجوز BSD منتشر شده است.
تغییرات اساسی
SDDL2
SDDL به طور کامل از پایه بازنویسی شد تا به اهداف طراحی اولیه خود دست یابد. در حالی که نسخه آزمایشی اصلی یک محیط زمان اجرا ساده شده بود، SDDL2 یک کامپایلر تمام عیار است: تجزیه کننده دادهها را به تحلیلگر معنایی منتقل میکند، که به نوبه خود یک درخت نحوی انتزاعی تایپ شده (AST) را به بهینه ساز منتقل میکند و بهینه ساز، مولد کد را کنترل میکند که بایت کد ماشین مجازی را تولید میکند.
نتیجه کلیدی، تجزیه فوری است. وقتی مکان یک رکورد را بتوان به طور کامل با استفاده از پارامترها و ثابتها به تنهایی تعیین کرد، موتور بدون اسکن بایتهای قبلی، مستقیماً به هر فیلدی پرش میکند و امکان دسترسی بدون کپی و توان عملیاتی چندین گیگابایت بر ثانیه را فراهم میکند.
خود این زبان نیز در کنار مجموعه ابزارهایش تکامل یافته است. اکنون از عبارتهای when برای دستورات شرطی، رکوردهای پارامتری و ناشناس، دسترسی به اعضای فیلد رکورد و عملگرهای بیتی و منطقی پشتیبانی میکند.
در سمت توسعهدهنده، مرحله تحلیل معنایی اکنون ارجاعات تعریفنشده، عدم تطابق نوع و خطاهای arity را در زمان کامپایل - با محل کد منبع - به جای زمان اجرا شناسایی میکند و یک افزونه VS Code برای برجستهسازی نحوی فایلهای .sddl منتشر شده است.
کدک داخلی جدید LZ
OpenZL اکنون شامل کدک LZ مخصوص به خود است که با نام ZL_GRAPH_LZ نمایش داده میشود، و همچنین یک پروفایل فشردهسازی متوالی در ابزار zli دارد. کار بر روی این کدک در حال انجام است، مجموعه ویژگیهای آن را گسترش میدهد و عملکرد را هنگام پردازش دادههای ورودی کوچک بهبود میبخشد. در حال حاضر، از عملکردی معادل zstd سطح 1 با یک پنجره فشردهسازی 64 کیلوبایتی پشتیبانی میکند.
OpenZL اجازه میدهد تا هر مرحله از خط لوله LZ برای افزایش سرعت، دوباره طراحی شود. معماری گراف آن همچنین امکان ترکیب مراحل رمزگذاری آنتروپی را فراهم میکند، به جای استفاده از یک خط لوله واحد که برای همه موارد استفاده به طور یکسان مناسب است. سپس میتوان چندین مرحله را در یک عملیات واحد ترکیب کرد تا سرعت پردازش بهبود یابد. این به OpenZL اجازه میدهد تا در مقایسه با سطح ۱ استاندارد Z در مجموعه Silesia، به ۱۰٪ فشردهسازی سریعتر و ۷۰٪ رفع فشار سریعتر دست یابد. آزمایشهای ما:
| کمپرسور | نسبت تراکم | سرعت فشردهسازی | سرعت رفع فشار |
|---|---|---|---|
| OpenZL LZ سطح ۱ | 2.74 | 466 MB / s و | 2288 MB / s و |
| Zstd سطح ۱ با اندازه پنجره ۶۴ هزار | 2.74 | 419 MB / s و | 1254 MB / s و |
| سطح ۱ ZSTD | 2.89 | 424 MB / s و | 1345 MB / s و |
پشتیبانی از دادههای ورودی بسیار بزرگ
zli اکنون از پردازش دادههای ورودی عظیم (با اندازه چندین گیگابایت) پشتیبانی میکند. قبل از فشردهسازی، چنین دادههایی اکنون به طور خودکار به تکههای با اندازه قابل مدیریت (تقریباً 16 مگابایت به طور پیشفرض) تقسیم میشوند، که این امر باعث محدود شدن استفاده از حافظه، بهبود محلی بودن دادهها و فعال شدن پردازش موازی میشود. SDDL2 هنگام کار با طرحواره، ویژگی تکهبندی خودکار مشابهی را پیادهسازی میکند. در این فرآیند، سگمنترهای جدیدی ایجاد یا بهروزرسانی شدند - برای CSV، Parquet و دادههای عددی استاندارد - و اکنون همه سگمنترها قابل سریالسازی و پیکربندی هستند، بنابراین طرح انتخاب شده را میتوان در فشردهساز ذخیره کرد و بعداً دوباره استفاده کرد.
این به صورت شفاف در طول فشردهسازی اعمال میشود. توجه داشته باشید که خط لوله آموزش متفاوت است و تحت تأثیر قرار نمیگیرد، بنابراین برای پذیرش دادههای ورودی غولپیکر به عنوان ماده آموزشی طراحی نشده است.
بهبودهایی در تجسمگر نمودار آنلاین (تلاش كردن)
اکنون ویژوالایزر، آثار فشردهسازی و رفع فشار را از ابتدا تا انتها تشخیص میدهد.
پنل پیشنمایش استریم به شما امکان میدهد بایتهایی را که در امتداد هر لبه جریان دارند، ببینید و کنترلهای برش، کار با استریمهای بزرگ را نیز آسان میکنند.
پنل تنظیمات، تمام گزینههای نمایش را در یک مکان گرد هم میآورد و مجموعهای کامل از کلیدهای میانبر - ناوبری جهتدار، پیمایش مرتب، باز و بسته کردن و انتخاب گره - به شما امکان میدهد تا به راحتی و بدون ماوس با این ابزار کار کنید.
اکنون ردپاها نسخهبندی شدهاند، فشردهسازی مبتنی بر بلوک به درستی نمایش داده میشود و zli بالاخره میتواند با استفاده از پرچمهای جدید --trace و --trace-streams-dir ردپاهای خود را تولید کند.
متفرقه
- چندین کدک به کاتالوگ اضافه شدهاند. کدکهای Partition و bitpack اکنون از یک رمزگشای یکپارچه استفاده میکنند. کدک تقسیم بیت ممیز شناور اکنون شامل رمزگذارها و رمزگشاهای اختصاصی برای فرمتهای fp16، fp32، fp64 و bf16 با شتابدهی تخصصی است. تقسیمبندی آگاه از محدوده (split_byrange)، یک مالتیپلکسر طول، کدک نگهبان، یک گراف lz4 و توابع کمکی جزئی مانند tryParseInt و splitByParam اضافه شدهاند.
- رابط برنامهنویسی کاربردی (API) سادهسازی شده است.
- تست فاز بهبود یافته.
- فرآیند ساخت و بستهبندی بهبود یافته برای پلتفرمهای بیشتر.
منبع: linux.org.ru
