FZGPUModules 2.0
GPU-accelerated modular compression pipelines
Loading...
Searching...
No Matches
stage.h
Go to the documentation of this file.
1
5#pragma once
6
7#include "backend/types.h"
8#include "fzm_format.h"
9#include <array>
10#include <cstdint>
11#include <stdexcept>
12#include <string>
13#include <unordered_map>
14#include <vector>
15
16namespace fz {
17
18// Forward declaration — avoids requiring mempool.h in every stage header
19class MemoryPool;
20
30class Stage {
31public:
32 virtual ~Stage() = default;
33
51 static constexpr bool isSupportedOnBackend() { return true; }
52
67 virtual void execute(
68 fz::stream_t stream,
69 MemoryPool* pool,
70 const std::vector<void*>& inputs,
71 const std::vector<void*>& outputs,
72 const std::vector<size_t>& sizes
73 ) = 0;
74
76 virtual std::string getName() const = 0;
77
78 virtual size_t getNumInputs() const = 0;
79 virtual size_t getNumOutputs() const = 0;
80
87 virtual size_t getRequiredInputAlignment() const { return 1; }
88
93 virtual std::vector<std::string> getOutputNames() const {
94 return {"output"};
95 }
96
98 int getOutputIndex(const std::string& name) const {
99 auto names = getOutputNames();
100 for (size_t i = 0; i < names.size(); i++) {
101 if (names[i] == name) return static_cast<int>(i);
102 }
103 return -1;
104 }
105
111 virtual std::vector<size_t> estimateOutputSizes(
112 const std::vector<size_t>& input_sizes
113 ) const = 0;
114
116 virtual std::unordered_map<std::string, size_t> getActualOutputSizesByName() const = 0;
117
124 virtual size_t getActualOutputSize(int index) const {
125 auto names = getOutputNames();
126 if (index < 0 || index >= static_cast<int>(names.size())) return 0;
128 auto it = m.find(names[index]);
129 return (it != m.end()) ? it->second : 0;
130 }
131
136 virtual void setInverse(bool inverse) { (void)inverse; }
137 virtual bool isInverse() const { return false; }
138
140 virtual uint16_t getStageTypeId() const = 0;
141
143 virtual uint8_t getOutputDataType(size_t output_index) const = 0;
144
154 virtual uint8_t getInputDataType(size_t /*input_index*/) const {
155 return static_cast<uint8_t>(DataType::UNKNOWN);
156 }
157
162 virtual size_t serializeHeader(size_t output_index, uint8_t* header_buffer, size_t max_size) const {
163 (void)output_index; (void)header_buffer; (void)max_size;
164 return 0;
165 }
166
168 virtual void deserializeHeader(const uint8_t* header_buffer, size_t size) {
169 (void)header_buffer; (void)size;
170 }
171
178 virtual void saveState() {}
179 virtual void restoreState() {}
180
199 virtual std::vector<std::string> getRunNotes() const { return {}; }
200
206 virtual void setDims(const std::array<size_t, 3>& dims) { (void)dims; }
207
225 virtual void onFinalize(size_t /*estimated_inlen*/, MemoryPool* /*pool*/) {}
226
232 virtual size_t estimateDeviceFootprintBytes(size_t /*inlen*/) const { return 0; }
233
239 virtual size_t estimatePinnedFootprintBytes(size_t /*inlen*/) const { return 0; }
240
247 virtual void postStreamSync(fz::stream_t stream) { (void)stream; }
248
250 virtual size_t getMaxHeaderSize(size_t output_index) const {
251 (void)output_index;
252 return 0;
253 }
254
267 virtual bool isGraphCompatible() const { return true; }
268
277 virtual size_t estimateScratchBytes(const std::vector<size_t>& input_sizes) const {
278 (void)input_sizes;
279 return 0;
280 }
281};
282
283} // namespace fz
Definition mempool.h:82
Definition stage.h:30
virtual size_t estimateDeviceFootprintBytes(size_t) const
Definition stage.h:232
virtual uint8_t getInputDataType(size_t) const
Definition stage.h:154
virtual std::string getName() const =0
virtual std::vector< std::string > getOutputNames() const
Definition stage.h:93
virtual size_t estimatePinnedFootprintBytes(size_t) const
Definition stage.h:239
virtual void saveState()
Definition stage.h:178
virtual bool isGraphCompatible() const
Definition stage.h:267
virtual size_t getActualOutputSize(int index) const
Definition stage.h:124
virtual void onFinalize(size_t, MemoryPool *)
Definition stage.h:225
virtual std::vector< size_t > estimateOutputSizes(const std::vector< size_t > &input_sizes) const =0
virtual void setInverse(bool inverse)
Definition stage.h:136
virtual uint16_t getStageTypeId() const =0
virtual size_t serializeHeader(size_t output_index, uint8_t *header_buffer, size_t max_size) const
Definition stage.h:162
virtual uint8_t getOutputDataType(size_t output_index) const =0
virtual void deserializeHeader(const uint8_t *header_buffer, size_t size)
Definition stage.h:168
virtual size_t getRequiredInputAlignment() const
Definition stage.h:87
virtual std::unordered_map< std::string, size_t > getActualOutputSizesByName() const =0
virtual void execute(fz::stream_t stream, MemoryPool *pool, const std::vector< void * > &inputs, const std::vector< void * > &outputs, const std::vector< size_t > &sizes)=0
virtual void postStreamSync(fz::stream_t stream)
Definition stage.h:247
int getOutputIndex(const std::string &name) const
Definition stage.h:98
virtual size_t estimateScratchBytes(const std::vector< size_t > &input_sizes) const
Definition stage.h:277
virtual std::vector< std::string > getRunNotes() const
Definition stage.h:199
static constexpr bool isSupportedOnBackend()
Definition stage.h:51
virtual size_t getMaxHeaderSize(size_t output_index) const
Definition stage.h:250
virtual void setDims(const std::array< size_t, 3 > &dims)
Definition stage.h:206
FZM binary file format definitions — structs, enums, and helpers.
Definition algorithms.h:48
@ UNKNOWN
Byte-transparent stages: skip type checking at finalize()
Backend-neutral GPU type aliases.