Após sete meses de desenvolvimento, a versão 0.2.0 da estrutura foi lançada. OpenZL, projetado para criar compressores de dados sem perdas.
A estrutura consiste em uma biblioteca base e ferramentas para a criação de compressores especializados descritos na linguagem. SDDL.
Existem duas etapas para criar um bom compressor dedicado:
- Análise de dados para extrair estrutura.
- Utilizando bons compressores de backend que explorem a estrutura resultante para obter uma boa compressão.
O OpenZL fornece ferramentas para ambas as etapas.
O projeto foi escrito em C e C++ e é distribuído sob a licença BSD.
Mudanças importantes
SDDL2
O SDDL foi completamente reescrito do zero para atingir seus objetivos de projeto originais. Enquanto a demonstração original era um ambiente de execução simplificado, o SDDL2 é um compilador completo: o analisador sintático passa dados para o analisador semântico, que por sua vez passa uma árvore sintática abstrata tipada (AST) para o otimizador, e o otimizador controla o gerador de código, que gera bytecode de máquina virtual.
O principal resultado é a análise instantânea. Quando a localização de um registro pode ser totalmente determinada usando apenas parâmetros e constantes, o mecanismo salta diretamente para qualquer campo sem examinar os bytes anteriores, permitindo acesso sem cópia e uma taxa de transferência de vários GB/s.
A própria linguagem evoluiu juntamente com seu conjunto de ferramentas. Agora, ela oferece suporte a cláusulas `when` para instruções condicionais, registros parametrizados e anônimos, acesso a membros de campos de registro e operadores bit a bit e lógicos.
Do lado do desenvolvedor, a etapa de análise semântica agora identifica referências indefinidas, incompatibilidades de tipo e erros de aridade em tempo de compilação — com a localização no código-fonte — em vez de em tempo de execução, e uma extensão do VS Code para realce de sintaxe de arquivos .sddl foi lançada.
Novo codec LZ integrado
O OpenZL agora inclui seu próprio codec LZ, representado como ZL_GRAPH_LZ, bem como um perfil de compressão sequencial no utilitário zli. O trabalho no codec está em andamento, expandindo seu conjunto de recursos e melhorando o desempenho no processamento de pequenos conjuntos de dados de entrada. Atualmente, ele oferece funcionalidade equivalente ao nível 1 do zstd, com uma janela de compressão de 64 KB.
O OpenZL permite que cada etapa do pipeline LZ seja redesenhada para otimizar a velocidade. Sua arquitetura gráfica também possibilita a combinação de etapas de codificação de entropia, em vez de usar um único pipeline igualmente adequado para todos os casos de uso. Várias etapas podem então ser combinadas em uma única operação para melhorar a velocidade de processamento. Isso permite que o OpenZL alcance uma compressão 10% mais rápida e uma descompressão 70% mais rápida em comparação com o Zstandard nível 1 no corpus Silesia. nossos testes:
| Compressor | Taxa de compressão | Velocidade de compressão | Velocidade de descompressão |
|---|---|---|---|
| OpenZL LZ nível 1 | 2.74 | 466 MB / s | 2288 MB / s |
| Zstd nível 1 com tamanho de janela de 64K | 2.74 | 419 MB / s | 1254 MB / s |
| Nível 1 de Zstd | 2.89 | 424 MB / s | 1345 MB / s |
Suporte para dados de entrada muito grandes.
O zli agora suporta o processamento de grandes volumes de dados de entrada (com vários gigabytes de tamanho). Antes da compressão, esses dados são automaticamente divididos em blocos de tamanho gerenciável (aproximadamente 16 MB por padrão), limitando o uso de memória, melhorando a localidade dos dados e permitindo o processamento paralelo. O SDDL2 implementa um recurso semelhante de fragmentação automática ao trabalhar com esquemas. Novos segmentadores foram criados ou atualizados nesse processo — para CSV, Parquet e dados numéricos padrão — e todos os segmentadores agora são serializáveis e configuráveis, de modo que o layout escolhido pode ser salvo no compressor e reutilizado posteriormente.
Isso é aplicado de forma transparente durante a compressão. Observe que o pipeline de treinamento é diferente e permanece inalterado, portanto, não foi projetado para aceitar dados de entrada gigantescos como material de treinamento.
Melhorias no visualizador de gráficos online (tentar)
O visualizador agora reconhece os rastros de compressão e descompressão do início ao fim.
O painel de pré-visualização do fluxo permite ver os bytes fluindo ao longo de cada borda, e os controles de corte facilitam o trabalho mesmo com fluxos grandes.
O painel de configurações reúne todas as opções de exibição em um só lugar, e um conjunto completo de teclas de atalho — navegação direcional, percurso ordenado, expansão e recolhimento e seleção de nós — permite que você trabalhe com a ferramenta de forma prática, sem usar o mouse.
Os rastreamentos agora são versionados, a compressão baseada em blocos é exibida corretamente e o zli finalmente pode gerar seus próprios rastreamentos usando as novas opções --trace e --trace-streams-dir.
Miscelânea
- Vários codecs foram adicionados ao catálogo. Os codecs Partition e bitpack agora usam um decodificador unificado. O codec bitsplit de ponto flutuante agora inclui codificadores e decodificadores dedicados para os formatos fp16, fp32, fp64 e bf16 com aceleração especializada. Foram adicionados o splitting com reconhecimento de intervalo (split_byrange), um multiplexador de comprimento, o codec sentinel, um grafo lz4 e funções auxiliares menores, como tryParseInt e splitByParam.
- A API foi simplificada.
- Testes de fuzzing aprimorados.
- Processo de compilação e empacotamento aprimorado para mais plataformas.
Fonte: linux.org.ru
