High-Performance Integer Decompression Using SIMD Vector Instructions
Based on research by Arseny Kapoulkine
June 2026
A compact variable-length encoding for signed integers
16x parallelism with 512-bit vector registers
__m512i zigzag_decode(__m512i v) {
__m512i sign = _mm512_and_si512(v, _mm512_set1_epi32(1));
__m512i shifted = _mm512_srli_epi32(v, 1);
__m512i negated = _mm512_sub_epi32(
_mm512_setzero_si512(), sign);
return _mm512_xor_si512(shifted, negated);
}
Process 16 integers simultaneously with a single instruction sequence
Load 16 × 32-bit integers into 512-bit AVX-512 register
Isolate the lowest bit from each integer (sign bit in zigzag)
Logical right shift by 1 to get magnitude
Create mask: 0 for positive, -1 for negative
Combine shifted value with sign mask to restore original integer
Throughput on Intel Xeon with Cascade Lake architecture
Accelerating data formats with modern CPU instructions