След седем месеца разработка бе пусната версия 0.2.0 на фреймворка OpenZL, предназначен за създаване на компресори за данни без загуби.
Фреймворкът се състои от основната библиотека и инструменти за създаване на специализирани компресори, описани на езика SDDL.
За създаването на добър специализиран компресор има два етапа:
- Анализ на данните за извличане на структура.
- Използване на добри бекенда компресори, които използват получената структура, за постигане на добро компресиране.
OpenZL предоставя инструменти за двата етапа.
Проектът е написан на езици C и C++ и се разпространява под лиценз BSD.
Основни промени
SDDL2
SDDL беше напълно преработен от нулата, за да постигне зададените проектни цели. Докато първоначалната демонстрационна версия представляваше опростена среда за изпълнение, SDDL2 е пълен компилатор: синтактичният анализатор предава данни на семантичния анализатор, който от своя страна предава типизираното абстрактно синтаксично дърво (AST) на оптимизатора, а оптимизаторът управява генератора на код, който генерира байт-код за виртуалната машина.
Ключовият резултат е мигновен синтактичен анализ. Когато местоположението на записа може да бъде напълно определено само по параметри и константи, двигателят преминава директно към всяко поле, без да сканира предходните байтове, което осигурява достъп без копиране и честотна лента от няколко ГБ/с.
Самият език се е развивал заедно с набора от инструменти. Сега той поддържа блокове when за условни местоположения, параметризирани и анонимни записи, достъп до членове на полета на записа, както и побитови и логически оператори.
Що се отнася до удобството за разработчика, етапът на семантичен анализ сега открива неопределени референции, несъответствия в типовете и грешки в арността още на етапа на компилация – с указание на местоположението в изходния код – а не по време на изпълнение, и е издадено разширение за VS Code за синтактична окраска на файлове .sddl.
Нови вградени кодек LZ
В OpenZL вече е включен собствен кодек LZ, представен под формата ZL_GRAPH_LZ, както и профил на последователна компресия в утилитата zli. Работата по кода продължава: разширява се наборът от функции и се повишава производителността при обработка на малки входни данни. В момента той поддържа функционалност, еквивалентна на zstd ниво 1, с размер на компресионния прозорец 64 KB.
OpenZL предоставя възможност да се преработи всяка стъпка от LZ конвейера с цел увеличаване на скоростта. Неговата графова архитектура също позволява комбиниране на стъпките на ентропийното кодиране вместо използването на единен конвейер, който е равностойно добър за всички сценарии на използване. След това няколко стъпки могат да бъдат комбинирани в една операция за увеличение на скоростта на обработка. Това позволява на OpenZL да осигури с 10% по-висока скорост на компресия и с 70% по-висока скорост на декомпресия в сравнение със Zstandard ниво 1 на корпус Silesia в нашите тестове:
| Компресор | Степен на компресия | Скорост на компресия | Скорост на декомпресия |
|---|---|---|---|
| OpenZL LZ ниво 1 | 2.74 | 466 MB/s | 2288 MB/s |
| Zstd ниво 1 с размер на прозорец 64K | 2.74 | 419 MB/s | 1254 MB/s |
| Zstd ниво 1 | 2.89 | 424 MB/s | 1345 MB/s |
Поддръжка на много големи входни данни
zli вече поддържа обработка на огромни входни данни (в обем от няколко гигабайта). Преди компресията, данните сега автоматично се разбиват на фрагменти с управлявани размери (по подразбиране – около 16MB), което позволява ограничаване на обема на използваната памет, повишаване на локалността на данните и отваря възможности за паралелна обработка. В SDDL2 е реализирана аналогична функция за автоматично фрагментиране при работа по схема. В процеса са създадени или обновени нови сегментатори – за CSV, Parquet и стандартни числови данни – и всички сегментатори вече са сериализуеми и настраиваеми, така че избраната компоновка може да бъде запазена в компресора и повторно използвана по-късно.
Това се прилага прозрачно по време на компресията. Обърнете внимание, че конвейерът на обучението е различен и остава непроменен, така че не е предназначен за приемане на гигантски входни данни като учебен материал.
Подобрения в онлайн визуализатора на графа (да опитат)
Вече визуализаторът разпознава трасировки на компресия и декомпресия от начало до край.
Панелата за предварителен преглед на потока позволява преглед на байтовете, които всъщност преминават през всяко ребро, а благодарение на елементите за управление на отрязването дори големи потоци остават удобни за работа.
Панелата с настройки обединява всичките параметри за визуализация на едно място, а пълният набор от клавишни комбинации – навигация по посоки, подредено обхождане, разширяване и свиване, избор на възли – позволява удобно работа с инструмента без мишка.
Сега проследяванията имат версии, компресията с разбиване на блокове се показва правилно, а zli най-накрая може да генерира свои собствени проследявания с новите флагове —trace и —trace-streams-dir.
Разнообразно
- В каталога са добавени няколко кодека. Кодеците Partition и bitpack сега използват комбиниран декодер. Кодекът Floating-point bitsplit получи специални кодировачи и декодери за форматите fp16, fp32, fp64 и bf16 с специализирани ускорения. Добавено е разбиване в зависимост от диапазона (split_byrange), мултиплексор на дължината, кодек sentinel, граф lz4 и малки помощни функции, като tryParseInt и splitByParam.
- API-то е подредено.
- Подобрено е фузинг-тестироването.
- Подобрен е процесът на изграждане и пакетиране за повече платформи.
Източник: linux.org.ru
