OpenZL 0.2.0

OpenZL 0.2.0 OpenZL 0.2.0

Po siedmiu miesiącach prac nad rozwojem, wydano wersję 0.2.0 frameworka OpenZL, przeznaczonego do tworzenia kompresorów danych bez strat.

Framework składa się z podstawowej biblioteki oraz narzędzi do tworzenia wyspecjalizowanych kompresorów opisanych w języku SDDL.
Aby stworzyć dobry wyspecjalizowany kompresor, należy przejść przez dwa etapy:

  1. Analizę danych, aby wydobyć strukturę.
  2. Zastosowanie dobrych kompresorów zaplecza, które wykorzystują uzyskaną strukturę w celu osiągnięcia dobrej kompresji.

OpenZL zapewnia narzędzia do obu etapów.

Projekt napisano w językach C i C++ i jest dystrybuowany na licencji BSD.

Główne zmiany

SDDL2

SDDL został całkowicie przepisany od podstaw w celu osiągnięcia zamierzonych celów projektowych. Podczas gdy początkowa wersja demonstracyjna była uproszczonym środowiskiem wykonawczym, to SDDL2 jest pełnoprawnym kompilatorem: parser przekazuje dane analizatorowi semantycznemu, ten zaś przekazuje typowe drzewo abstrakcyjnej składni (AST) do optymalizatora, a optymalizator zarządza generatorem kodu, który generuje bajtowy kod dla maszyny wirtualnej.

Kluczowym rezultatem jest natychmiastowa analiza składniowa. Gdy miejsce zapisu może być w pełni określone tylko przez parametry i stałe, silnik przechodzi bezpośrednio do dowolnego pola, nie skanując poprzednich bajtów, co zapewnia dostęp bez kopiowania i przepustowość na poziomie kilku GB/s.

Sam język rozwijał się razem z zestawem narzędzi. Teraz obsługuje bloki when dla warunkowych lokalizacji, parametryzowane i anonimowe zapisy, dostęp do członków pól zapisu, a także operatory bitowe i logiczne.

Jeśli chodzi o wygodę dla programisty, etap analizy semantycznej teraz ujawnia nieokreślone odniesienia, niespójności typów oraz błędy arności na etapie kompilacji – z wskazaniem lokalizacji w kodzie źródłowym – a także wydano rozszerzenie do VS Code do podświetlania składni plików .sddl.

Nowy wbudowany kodek LZ

W OpenZL teraz wbudowany jest własny kodek LZ, przedstawiony jako ZL_GRAPH_LZ, oraz profil sekwencyjnej kompresji w narzędziu zli. Prace nad kodekiem trwają: wciąż trwa rozszerzanie zestawu funkcji i zwiększanie wydajności przy przetwarzaniu małych danych wejściowych. Obecnie obsługuje funkcjonalność równoważną z zstd na poziomie 1, z rozmiarem okna kompresji wynoszącym 64 KB.

OpenZL umożliwia przekształcenie każdego etapu potoku LZ w celu zwiększenia prędkości. Jego architektura oparta na grafach pozwala również na łączenie etapów kodowania entropijnego, zamiast korzystać z jednego potoku, który sprawdza się w różnych scenariuszach zastosowania. Następnie kilka etapów można połączyć w jedną operację, aby poprawić prędkość przetwarzania. Pozwala to OpenZL osiągnąć o 10% wyższą prędkość kompresji i o 70% wyższą prędkość dekompresji w porównaniu do Zstandard na poziomie 1 w case Silesia w naszych testach:

KompresorWspółczynnik kompresjiPrędkość kompresjiPrędkość dekompresji
OpenZL LZ poziom 12.74466 MB/s2288 MB/s
Zstd poziom 1 z rozmiarem okna 64K2.74419 MB/s1254 MB/s
Zstd poziom 12.89424 MB/s1345 MB/s

Wsparcie dla bardzo dużych danych wejściowych

Zli teraz obsługuje przetwarzanie ogromnych danych wejściowych (o wielkości kilku gigabajtów). Przed kompresją takie dane są teraz automatycznie dzielone na fragmenty o kontrolowanej wielkości (domyślnie około 16MB), co pozwala ograniczyć zużycie pamięci, zwiększyć lokalność danych i otworzyć możliwości dla równoległego przetwarzania. W SDDL2 wprowadzono podobną funkcję automatycznego fragmentowania w trybie schematycznym. W procesie stworzono lub zaktualizowano nowe segmentatory – dla CSV, Parquet i standardowych danych liczbowych – a wszystkie segmentatory są teraz serializowalne i konfigurowalne, więc wybrana kompozycja może być zapisana w kompresorze i ponownie użyta później.

Działa to przejrzysto podczas kompresji. Należy pamiętać, że potok uczenia się jest inny i pozostaje nienaruszony, więc nie jest przeznaczony do przyjmowania gigantycznych danych wejściowych jako materiału szkoleniowego.

Ulepszenia w internetowym wizualizatorze grafu (spróbuj)
Teraz wizualizator rozpoznaje ślady kompresji i dekompresji od początku do końca.

Panel podglądu strumienia pozwala na przeglądanie bajtów rzeczywiście przechodzących przez każde łącze, a dzięki elementom sterującym przycinaniem nawet duże strumienie pozostają łatwe do obsługi.

Panel ustawień łączy wszystkie opcje wyświetlania w jednym miejscu, a pełny zestaw skrótów klawiaturowych – nawigacja w kierunkach, uporządkowane przeszukiwanie, rozwijanie i zwijanie oraz wybór węzłów – pozwala wygodnie korzystać z narzędzia bez myszy.

Teraz śledzenia mają wersje, kompresja z podziałem na bloki jest wyświetlana poprawnie, a zli w końcu może generować własne śledzenia za pomocą nowych flag —trace i —trace-streams-dir.

Różne

  • Do katalogu dodano kilka kodeków. Kodeki Partition i bitpack teraz korzystają ze zintegrowanego dekodera. Kodek Floating-point bitsplit zyskał specjalne kodery i dekodery dla formatów fp16, fp32, fp64 i bf16 z wyspecjalizowanymi przyspieszeniami. Dodano podział z uwzględnieniem zakresu (split_byrange), multiplexer długości, kodek sentinel, grafikę lz4 oraz małe funkcje pomocnicze, takie jak tryParseInt i splitByParam.
  • API zostało uporządkowane.
  • Poprawione testy fuzzingowe.
  • Poprawiono proces budowy i pakowania dla większej liczby platform.

Źródło: linux.org.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster