OpenZL 0.2.0

OpenZL 0.2.0 OpenZL 0.2.0

Tras siete meses de desarrollo, se lanzó la versión 0.2.0 del framework. AbrirZLDiseñado para crear compresores de datos sin pérdidas.

El marco consta de una biblioteca base y herramientas para crear compresores especializados descritos en el lenguaje. SDDL.
Para crear un buen compresor dedicado hay dos pasos:

  1. Análisis de datos para extraer la estructura.
  2. Utilizar buenos compresores de backend que aprovechen la estructura resultante para lograr una buena compresión.

OpenZL proporciona herramientas para ambas etapas.

El proyecto está escrito en C y C++ y se distribuye bajo la licencia BSD.

Cambios principales

SDDL2

SDDL se reescribió por completo desde cero para lograr sus objetivos de diseño originales. Mientras que la demostración original era un entorno de ejecución simplificado, SDDL2 es un compilador completo: el analizador sintáctico pasa los datos al analizador semántico, que a su vez pasa un árbol de sintaxis abstracta (AST) tipado al optimizador, y este último controla el generador de código, que genera el código de bytes de la máquina virtual.

El resultado clave es el análisis instantáneo. Cuando la ubicación de un registro se puede determinar completamente utilizando solo parámetros y constantes, el motor salta directamente a cualquier campo sin escanear los bytes anteriores, lo que permite un acceso sin copias y un rendimiento de varios GB/s.

El lenguaje en sí ha evolucionado junto con su conjunto de herramientas. Ahora admite cláusulas condicionales para sentencias condicionales, registros parametrizados y anónimos, acceso a miembros de campos de registro y operadores lógicos y a nivel de bits.

En lo que respecta a los desarrolladores, el paso de análisis semántico ahora identifica referencias no definidas, errores de tipo y errores de aridad en tiempo de compilación (con la ubicación en el código fuente) en lugar de en tiempo de ejecución, y se ha lanzado una extensión de VS Code para el resaltado de sintaxis de archivos .sddl.

Nuevo códec LZ integrado

OpenZL ahora incluye su propio códec LZ, representado como ZL_GRAPH_LZ, así como un perfil de compresión secuencial en la utilidad zli. El desarrollo del códec continúa, ampliando sus funcionalidades y mejorando su rendimiento al procesar datos de entrada pequeños. Actualmente, admite una funcionalidad equivalente al nivel 1 de zstd, con una ventana de compresión de 64 KB.

OpenZL permite rediseñar cada etapa del proceso LZ para optimizar la velocidad. Su arquitectura gráfica también permite combinar etapas de codificación de entropía, en lugar de utilizar un único proceso que sea igualmente adecuado para todos los casos de uso. De esta forma, se pueden combinar varias etapas en una sola operación para mejorar la velocidad de procesamiento. Esto permite que OpenZL logre una compresión un 10 % más rápida y una descompresión un 70 % más rápida en comparación con Zstandard nivel 1 en el corpus Silesia. nuestras pruebas:

CompresorÍndice de compresiónVelocidad de compresiónVelocidad de descompresión
OpenZL LZ nivel 12.74466 MB / s2288 MB / s
Nivel Zstd 1 con tamaño de ventana de 64K2.74419 MB / s1254 MB / s
Nivel Zstd 12.89424 MB / s1345 MB / s

Compatibilidad con datos de entrada muy grandes

zli ahora admite el procesamiento de grandes cantidades de datos de entrada (de varios gigabytes). Antes de la compresión, estos datos se dividen automáticamente en fragmentos de tamaño manejable (aproximadamente 16 MB por defecto), lo que limita el uso de memoria, mejora la localidad de los datos y permite el procesamiento paralelo. SDDL2 implementa una función de división automática similar al trabajar con esquemas. Se crearon o actualizaron nuevos segmentadores durante el proceso (para CSV, Parquet y datos numéricos estándar), y todos los segmentadores son ahora serializables y configurables, de modo que el diseño elegido se puede guardar en el compresor y reutilizar posteriormente.

Esto se aplica de forma transparente durante la compresión. Cabe destacar que el proceso de entrenamiento es diferente y no se ve afectado, por lo que no está diseñado para aceptar grandes cantidades de datos de entrada como material de entrenamiento.

Mejoras en el visualizador de gráficos en línea (para probar)
El visualizador ahora reconoce los rastros de compresión y descompresión de principio a fin.

El panel de vista previa de la transmisión permite ver los bytes que fluyen realmente a lo largo de cada borde, y los controles de recorte facilitan el trabajo incluso con transmisiones grandes.

El panel de configuración reúne todas las opciones de visualización en un solo lugar, y un conjunto completo de teclas de acceso rápido (navegación direccional, recorrido ordenado, expansión y contracción, y selección de nodos) le permite trabajar cómodamente con la herramienta sin necesidad de un ratón.

Ahora, los rastros están versionados, la compresión basada en bloques se muestra correctamente y zli finalmente puede generar sus propios rastros utilizando las nuevas opciones --trace y --trace-streams-dir.

Miscelánea

  • Se han añadido varios códecs al catálogo. Los códecs Partition y bitpack ahora utilizan un decodificador unificado. El códec de bits de punto flotante ahora incluye codificadores y decodificadores dedicados para los formatos fp16, fp32, fp64 y bf16 con aceleración especializada. Se han añadido la división con reconocimiento de rango (split_byrange), un multiplexor de longitud, el códec sentinel, un gráfico lz4 y funciones auxiliares menores como tryParseInt y splitByParam.
  • La API se ha optimizado.
  • Pruebas de fuzz mejoradas.
  • Proceso de compilación y empaquetado mejorado para más plataformas.

Fuente: linux.org.ru