Após sete meses de desenvolvimento, foi lançado o framework 0.2.0 OpenZL, destinado à criação de compressões de dados sem perdas.
O framework consiste em uma biblioteca básica e ferramentas para criar compressões especializadas, descritas na linguagem SDDL.
Para criar uma boa compressão especializada, existem duas etapas:
- Análise de dados para extrair a estrutura.
- Uso de bons compressões backend, que utilizam a estrutura obtida para alcançar uma boa compactação.
OpenZL fornece ferramentas para ambas as etapas.
O projeto é escrito nas linguagens C e C++ e é distribuído sob a licença BSD.
Principais mudanças
SDDL2
SDDL foi completamente reestruturado do zero para atingir as metas de design estabelecidas. Enquanto a versão demo inicial 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 (AST) tipada para o otimizador, e o otimizador gerencia o gerador de código, que gera bytecode para a máquina virtual.
O resultado chave é a análise sintática instantânea. Quando a localização do registro pode ser completamente determinada apenas por parâmetros e constantes, o mecanismo vai diretamente a qualquer campo, sem escanear os bytes anteriores, garantindo acesso sem cópia e largura de banda de vários GB/s.
A própria linguagem evoluiu juntamente com o conjunto de ferramentas. Agora, ela suporta blocos when para locais condicionais, registros parametrizados e anônimos, acesso aos membros dos campos de registro, bem como operadores bit a bit e lógicos.
Quanto à conveniência do desenvolvedor, a etapa de análise semântica agora identifica referências indefinidas, incompatibilidades de tipos e erros de aridade na fase de compilação – com a indicação da localização no código-fonte – e uma extensão do VS Code foi lançada para a realce de sintaxe em arquivos .sddl.
Novo codec LZ embutido
Agora, o OpenZL inclui seu próprio codec LZ, representado como ZL_GRAPH_LZ, além de um perfil de compressão sequencial na ferramenta zli. O trabalho no codec continua: está em andamento a expansão do conjunto de funções e o aumento da performance no processamento de pequenas entradas. Neste momento, ele suporta funcionalidades equivalentes ao zstd nível 1, com um tamanho de janela de compressão de 64 KB.
O OpenZL permite redesenhar cada etapa do pipeline LZ para aumentar a velocidade. Sua arquitetura gráfica também permite combinar etapas de codificação de entropia, em vez de usar um único pipeline que funcione bem para todos os cenários de uso. Em seguida, várias etapas podem ser combinadas em uma única operação para aumentar a velocidade do processamento. Isso permite que o OpenZL forneça uma velocidade de compressão 10% maior e uma velocidade de descompressão 70% maior em comparação com o Zstandard nível 1 no conjunto de Silesia em 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 |
| Zstd nível 1 | 2.89 | 424 MB/s | 1345 MB/s |
Suporte a entradas muito grandes
O zli agora suporta o processamento de enormes entradas (de vários gigabytes). Antes da compressão, esses dados agora são automaticamente divididos em fragmentos de tamanho gerenciado (por padrão, cerca de 16MB), o que permite limitar a quantidade de memória utilizada, aumentar a localidade dos dados e abrir possibilidades para processamento paralelo. Uma função semelhante de fragmentação automática foi implementada em SDDL2 ao trabalhar no esquema. Durante o processo, novos segmentadores foram criados ou atualizados – para CSV, Parquet e dados numéricos padrão – e todos os segmentadores agora são serializáveis e configuráveis, de modo que a configuração escolhida pode ser salva no compressor e reutilizada posteriormente.
Isso é aplicado de forma transparente durante a compressão. Observe que o pipeline de aprendizado é diferente e permanece inalterado, portanto, não é destinado a receber enormes entradas como material de treino.
Melhorias no visualizador online de gráficos (tentar)
Agora, o visualizador reconhece rastreamentos de compressão e descompressão do início ao fim.
O painel de visualização de fluxo permite visualizar os bytes que realmente passam por cada aresta, e com os controles de recorte, até mesmo fluxos grandes permanecem gerenciáveis.
O painel de configurações reúne todas as opções de exibição em um só lugar, e o conjunto completo de atalhos de teclado – navegação direcional, обход ordenado, expansão e retração, seleção de nós – permite trabalhar com a ferramenta sem mouse de forma conveniente.
Agora, as rastreadas têm versões, a compressão com divisão em blocos é exibida corretamente, e o zli finalmente pode gerar suas próprias rastreadas com novas flags —trace e —trace-streams-dir.
Diversos
- Adicionados vários codecs ao catálogo. Os codecs Partition e bitpack agora usam um decodificador unificado. O codec Floating-point bitsplit recebeu codificadores e decodificadores especiais para os formatos fp16, fp32, fp64 e bf16 com acelerações especializadas. Adicionadas divisões com consideração de intervalo (split_byrange), multiplexador de comprimento, codec sentinel, gráfico lz4 e pequenas funções auxiliares, como tryParseInt e splitByParam.
- API ordenada.
- Melhorado o teste de fuzzing.
- Melhorado o processo de construção e empacotamento para um maior número de plataformas.
Fonte: linux.org.ru
