45 Stage* stage =
nullptr;
48 case StageType::LORENZO_QUANT: {
55 s->deserializeHeader(config, config_size);
59 s->deserializeHeader(config, config_size);
62 throw std::runtime_error(
63 "Unsupported Lorenzo template instantiation: input_type="
64 + std::to_string(
static_cast<int>(lc.
input_type))
65 +
" code_type=" + std::to_string(
static_cast<int>(lc.
code_type)));
68 throw std::runtime_error(
"Lorenzo config too small: " + std::to_string(config_size));
73 case StageType::DIFFERENCE: {
76 if (config_size >= 2) {
80 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
82 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
84 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
86 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
97 throw std::runtime_error(
"Unsupported Difference data type: "
98 + std::to_string(
static_cast<int>(tin_dt)));
100 }
else if (config_size >= 1) {
112 throw std::runtime_error(
"Unsupported Difference data type: "
113 + std::to_string(
static_cast<int>(dt)));
121 case StageType::RLE: {
122 if (config_size >= 1) {
124 std::memcpy(&dt, config,
sizeof(
DataType));
131 throw std::runtime_error(
"Unsupported RLE data type: "
132 + std::to_string(
static_cast<int>(dt)));
142 case StageType::ZIGZAG: {
143 if (config_size >= 2) {
146 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
148 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
150 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
152 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
155 throw std::runtime_error(
156 "Unsupported ZigzagStage type pair: TIn="
157 + std::to_string(
static_cast<int>(tin_dt))
158 +
" TOut=" + std::to_string(
static_cast<int>(tout_dt)));
167 case StageType::NEGABINARY: {
168 if (config_size >= 2) {
171 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
173 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
175 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
177 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
180 throw std::runtime_error(
181 "Unsupported NegabinaryStage type pair: TIn="
182 + std::to_string(
static_cast<int>(tin_dt))
183 +
" TOut=" + std::to_string(
static_cast<int>(tout_dt)));
191 case StageType::BITSHUFFLE: {
193 s->deserializeHeader(config, config_size);
198 case StageType::BITPACK: {
206 else throw std::runtime_error(
207 "Unsupported BitpackStage DataType: "
208 + std::to_string(
static_cast<int>(dt)));
213 case StageType::RZE: {
215 s->deserializeHeader(config, config_size);
222 s->deserializeHeader(config, config_size);
227 case StageType::MERGE: {
229 s->deserializeHeader(config, config_size);
234 case StageType::HUFFMAN: {
242 else throw std::runtime_error(
243 "Unsupported HuffmanStage DataType: "
244 + std::to_string(
static_cast<int>(dt)));
249 case StageType::LORENZO: {
257 else throw std::runtime_error(
258 "Unsupported LorenzoStage DataType: "
259 + std::to_string(
static_cast<int>(dt)));
265 auto* s =
new ANSStage();
266 s->deserializeHeader(config, config_size);
272 auto* s =
new ADMStage();
273 s->deserializeHeader(config, config_size);
281 throw std::runtime_error(
282 "GInterp config too small: " + std::to_string(config_size));
286 auto make_ginterp = [&](
auto input_tag) {
287 using TInput =
decltype(input_tag);
290 s->deserializeHeader(config, config_size);
292 }
else if (gc.
code_type == DataType::UINT16) {
294 s->deserializeHeader(config, config_size);
296 }
else if (gc.
code_type == DataType::UINT32) {
298 s->deserializeHeader(config, config_size);
301 throw std::runtime_error(
302 "Unsupported GInterp code_type: "
303 + std::to_string(
static_cast<int>(gc.
code_type)));
307 make_ginterp(
float{});
308 }
else if (gc.
input_type == DataType::FLOAT64) {
309 make_ginterp(
double{});
311 throw std::runtime_error(
312 "Unsupported GInterp input_type: "
313 + std::to_string(
static_cast<int>(gc.
input_type)));
320 s->deserializeHeader(config, config_size);
332 else throw std::runtime_error(
333 "Unsupported AdaptiveBitpackStage DataType: "
334 + std::to_string(
static_cast<int>(dt)));
346 else throw std::runtime_error(
347 "Unsupported TiledLorenzoStage DataType: "
348 + std::to_string(
static_cast<int>(dt)));
354 throw std::runtime_error(
"Unknown stage type: "
355 + std::to_string(
static_cast<uint16_t
>(type)));
Per-block adaptive fixed-rate bit-plane coder (cuSZp-style plain mode).
Adaptive Data Mapping (ADM) stage — remaps u16/u32 integer streams into a compact 8-bit symbol domain...
rANS entropy coding stage (GPU, via vendored dietGPU kernel templates).
Bit-packing stage: packs N-bit integers into a dense byte stream.
Fused bitplane-transpose + zero-group RZE stage — the FZ-GPU lossless encoder, ported as a single-ker...
GPU bit-matrix transpose stage (W × N bit shuffle over fixed-size chunks).
Definition adaptive_bitpack_stage.h:75
Definition bitpack_stage.h:47
Definition bitplane_rze_stage.h:60
Definition bitshuffle_stage.h:43
Definition ginterp_stage.h:204
Definition huffman_stage.h:68
Definition lorenzo_quant.h:96
Definition lorenzo_stage.h:53
Definition merge_stage.h:68
Definition negabinary_stage.h:34
Definition rre_stage.h:54
Definition rze_stage.h:55
virtual void deserializeHeader(const uint8_t *header_buffer, size_t size)
Definition stage.h:149
Definition tiled_lorenzo_stage.h:70
Definition zigzag_stage.h:30
First-order difference coding stage with optional negabinary fusion.
G-Interp spline-interpolation predictor + quantizer (cuSZ-Hi port).
Huffman entropy coding stage with selectable encode mode.
Fused Lorenzo predictor and quantizer stage.
Plain integer Lorenzo predictor (delta coding / prefix sum). Lossless.
MergeStage — concatenate N input buffers into one, split back to N.
Definition fzm_format.h:25
Stage * createStage(StageType type, const uint8_t *config, size_t config_size)
Definition stage_factory.h:44
StageType
Stage type identifiers written into the FZM header.
Definition fzm_format.h:76
@ ADAPTIVE_BITPACK
Per-block adaptive fixed-rate bit-plane coder (cuSZp plain mode)
@ ANS
rANS entropy coder (GPU, via dietGPU)
@ RRE
Repetition-Reduction Encoding (LC framework lossless component)
@ ADM
Adaptive Data Mapping transform (MANS)
@ TILED_LORENZO
Dimension-aware (tiled separable) Lorenzo predictor (cuSZp3 delta)
@ BITPLANE_RZE
Fused bitplane transpose + zero-group RZE (FZ-GPU lossless encoder)
@ G_INTERP
Spline interpolation predictor + quantizer (cuSZ-Hi G-Interp)
DataType
Element data type identifiers used in buffer and stage descriptors.
Definition fzm_format.h:109
Element-wise negabinary encode/decode stage (TIn[] ↔ TOut[]).
Run-Length Encoding stage (lossless, stream-ordered).
Repetition-Reduction Encoding stage — lossless byte-stream compressor.
Zero-Elimination Encoding stage — lossless byte-stream compressor.
Base class interface for all compression stages.
Definition ginterp_stage.h:39
DataType code_type
Quant code type (1 B).
Definition ginterp_stage.h:47
DataType input_type
Float input type (1 B).
Definition ginterp_stage.h:46
Definition lorenzo_stage.h:28
Definition lorenzo_quant.h:43
DataType input_type
Original input type (1B).
Definition lorenzo_quant.h:48
DataType code_type
Quantization code type (1B).
Definition lorenzo_quant.h:49
Dimension-aware (tiled separable) Lorenzo predictor — cuSZp3 delta. Lossless.
Element-wise zigzag encode/decode stage (TIn[] ↔ TOut[]).