FZGPUModules 2.0
GPU-accelerated modular compression pipelines
Loading...
Searching...
No Matches
bitplane_rze_stage.h
Go to the documentation of this file.
1#pragma once
2
9#include "stage/stage.h"
10#include "fzm_format.h"
11#include <cuda_runtime.h>
12#include <cstdint>
13#include <cstring>
14#include <stdexcept>
15#include <string>
16#include <unordered_map>
17#include <vector>
18
19namespace fz {
20
60class BitplaneRZEStage : public Stage {
61public:
62 BitplaneRZEStage() = default;
63 ~BitplaneRZEStage() override;
64
65 // ── Stage control ──────────────────────────────────────────────────────
66 void setInverse(bool inv) override { is_inverse_ = inv; }
67 bool isInverse() const override { return is_inverse_; }
68
69 // Both directions do a blocking D2H sync; never graph-capturable.
70 bool isGraphCompatible() const override { return false; }
71
72 // ── Execution ──────────────────────────────────────────────────────────
73 void execute(
74 cudaStream_t stream,
75 MemoryPool* pool,
76 const std::vector<void*>& inputs,
77 const std::vector<void*>& outputs,
78 const std::vector<size_t>& sizes
79 ) override;
80
81 // ── Metadata ───────────────────────────────────────────────────────────
82 std::string getName() const override { return "BitplaneRZE"; }
83 size_t getNumInputs() const override { return 1; }
84 size_t getNumOutputs() const override { return 1; }
85
86 std::vector<size_t> estimateOutputSizes(
87 const std::vector<size_t>& input_sizes
88 ) const override;
89
90 std::unordered_map<std::string, size_t>
91 getActualOutputSizesByName() const override {
92 return {{"output", actual_output_size_}};
93 }
94 size_t getActualOutputSize(int index) const override {
95 return (index == 0) ? actual_output_size_ : 0;
96 }
97
98 uint16_t getStageTypeId() const override {
99 return static_cast<uint16_t>(StageType::BITPLANE_RZE);
100 }
101
102 // Forward output is a raw byte archive; inverse output is the uint16 codes.
103 uint8_t getOutputDataType(size_t) const override {
104 return static_cast<uint8_t>(is_inverse_ ? DataType::UINT16
105 : DataType::UINT8);
106 }
107 // Forward input is the uint16 code stream.
108 uint8_t getInputDataType(size_t) const override {
109 return static_cast<uint8_t>(is_inverse_ ? DataType::UINT8
110 : DataType::UINT16);
111 }
112
113 // ── Serialization ──────────────────────────────────────────────────────
114 // Header (8 bytes): [0..7] original_len (uint64_t LE) — the pre-pad uint16
115 // symbol count. The archive itself is self-describing, but the pipeline
116 // needs this to size the inverse output buffer for a cold decompress.
117 size_t serializeHeader(size_t, uint8_t* buf, size_t max_size) const override {
118 if (max_size < sizeof(uint64_t)) return 0;
119 uint64_t len = static_cast<uint64_t>(cached_orig_len_);
120 std::memcpy(buf, &len, sizeof(uint64_t));
121 return sizeof(uint64_t);
122 }
123 void deserializeHeader(const uint8_t* buf, size_t size) override {
124 if (size >= sizeof(uint64_t)) {
125 uint64_t len = 0;
126 std::memcpy(&len, buf, sizeof(uint64_t));
127 cached_orig_len_ = static_cast<size_t>(len);
128 }
129 }
130 size_t getMaxHeaderSize(size_t) const override { return sizeof(uint64_t); }
131
132 void saveState() override { saved_orig_len_ = cached_orig_len_; }
133 void restoreState() override { cached_orig_len_ = saved_orig_len_; }
134
135 size_t getCachedOrigLen() const { return cached_orig_len_; }
136
137private:
138 bool is_inverse_ = false;
139 size_t actual_output_size_ = 0;
140 // Pre-pad uint16 symbol count of the original input. Set by the forward
141 // execute() and persisted in the FZM header so a cold inverse can size its
142 // output buffer.
143 size_t cached_orig_len_ = 0;
144 size_t saved_orig_len_ = 0;
145};
146
147} // namespace fz
Definition bitplane_rze_stage.h:60
bool isGraphCompatible() const override
Definition bitplane_rze_stage.h:70
uint16_t getStageTypeId() const override
Definition bitplane_rze_stage.h:98
size_t getActualOutputSize(int index) const override
Definition bitplane_rze_stage.h:94
void saveState() override
Definition bitplane_rze_stage.h:132
void execute(cudaStream_t stream, MemoryPool *pool, const std::vector< void * > &inputs, const std::vector< void * > &outputs, const std::vector< size_t > &sizes) override
size_t serializeHeader(size_t, uint8_t *buf, size_t max_size) const override
Definition bitplane_rze_stage.h:117
uint8_t getOutputDataType(size_t) const override
Definition bitplane_rze_stage.h:103
size_t getMaxHeaderSize(size_t) const override
Definition bitplane_rze_stage.h:130
void deserializeHeader(const uint8_t *buf, size_t size) override
Definition bitplane_rze_stage.h:123
void setInverse(bool inv) override
Definition bitplane_rze_stage.h:66
std::string getName() const override
Definition bitplane_rze_stage.h:82
uint8_t getInputDataType(size_t) const override
Definition bitplane_rze_stage.h:108
std::unordered_map< std::string, size_t > getActualOutputSizesByName() const override
Definition bitplane_rze_stage.h:91
std::vector< size_t > estimateOutputSizes(const std::vector< size_t > &input_sizes) const override
Definition mempool.h:82
Definition stage.h:30
FZM binary file format definitions — structs, enums, and helpers.
Definition fzm_format.h:25
@ BITPLANE_RZE
Fused bitplane transpose + zero-group RZE (FZ-GPU lossless encoder)
Base class interface for all compression stages.