FZGPUModules 2.0
GPU-accelerated modular compression pipelines
Loading...
Searching...
No Matches
speck2d_stage.h File Reference

GPU-parallel "wavefront" SPECK-like coder (2-D), see speck2d_kernels.cuh for the algorithm/format and the level-fusion optimization. More...

#include "stage/stage.h"
#include "fzm_format.h"
#include "backend/types.h"
#include <array>
#include <cstdint>
#include <cstring>
#include <stdexcept>
#include <string>
#include <unordered_map>
#include <vector>

Go to the source code of this file.

Classes

struct  fz::Speck2DConfig
 Serialized Speck2DStage config (FZMBufferEntry.stage_config). 24 bytes. More...
 

Namespaces

namespace  fz
 

Detailed Description

GPU-parallel "wavefront" SPECK-like coder (2-D), see speck2d_kernels.cuh for the algorithm/format and the level-fusion optimization.

A lossless, dimension-aware CODER: input is a 2-D field of signed 32-bit codes (e.g. quantized DWT coefficients out of Cdf97Stage -> a quantizer in linear/ signed mode); output is a variable-length compressed bitstream, smaller in the common case (worst case ~3x input – see estimateOutputSizes()). Losslessly invertible: decompress(compress(x)) == x exactly, for any int32 input, including degenerate (all-zero) fields.

Precision / scope

int32_t codes only (v1). Extending to int16_t/int64_t is straightforward (the kernels are not int32-specific beyond the sign/magnitude split and the 31-__clz msb call) but not yet done – see speck2d_kernels.cuh.

Not size-preserving

Unlike Cdf97Stage, output size is DATA-DEPENDENT and only known after the device kernels run. Like RLEStage, the actual size is read back asynchronously during execute() and completed in postStreamSync()getActualOutputSize()/getActualOutputSizesByName() must not be called before the stream passed to execute() has been synchronized.

Current limitation

2-D only (ndim must resolve to 2 from setDims()); 3-D SPECK is future work (see memory/speck_gpu_design.md P4).