|
FZGPUModules 2.0
GPU-accelerated modular compression pipelines
|
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 |
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.
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.
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.
2-D only (ndim must resolve to 2 from setDims()); 3-D SPECK is future work (see memory/speck_gpu_design.md P4).