Decodificación zigzag con AVX-512: dos optimizaciones SIMD

Fuentes: Zigzag decoding with AVX-512

Este artículo técnico explora dos optimizaciones SIMD para la decodificación de enteros codificados en formato zigzag, descubiertas durante el trabajo del autor en la decodificación de vértices con AVX-512 en la biblioteca meshoptimizer. El zigzag es una técnica que mapea enteros con signo a valores sin signo pequeños —los positivos se almacenan como 2v y los negativos como 2(~v)+1— para que diferencias pequeñas, habituales tras una codificación delta, se puedan comprimir de forma eficiente con esquemas de ancho variable como VByte/LEB128.

La primera optimización consiste en implementar la versión ramificada de la decodificación usando las máscaras de ejecución de AVX-512. Mediante la instrucción vptestmd —que realiza un AND, compara con cero y genera una máscara de predicado en un solo paso— se reduce la secuencia de cuatro instrucciones típica a solo tres: la prueba enmascarada, el desplazamiento y un XOR o una resta condicional que aplica el NOT o el negativo de uno en las lanes que lo requieran. Para enteros de 8 o 16 bits, donde AVX-512 no admite XOR con máscara, se propone sustituir el NOT por -1 - x, ejecutable con una resta con máscara válida para todos los anchos.

La segunda optimización aprovecha registros de máscara de 16 bits (k1–k7) y operaciones como kunpckbw, kxor y kmov para invertir bits dentro de una máscara usando únicamente tres instrucciones, una alternativa compacta a las técnicas tradicionales basadas en registros de 128 o 256 bits. En conjunto, el artículo muestra cómo las primitivas de predicción de AVX-512 permiten reescribir algoritmos SIMD clásicos de forma más corta, aunque la mejora real de rendimiento dependa de la microarquitectura concreta.