FZGPUModules 2.0
GPU-accelerated modular compression pipelines
Loading...
Searching...
No Matches
fusion.h
1#pragma once
2
3#include "backend/types.h" // fz::stream_t
4#include <cstddef>
5#include <cstdint>
6#include <string>
7#include <vector>
8
9namespace fz {
10
11class MemoryPool;
12
37enum class FusionAccess : uint8_t {
38 Unfusable = 0,
39 Elementwise,
40 RegionLocal,
41 TileSelector,
42 SegmentCodec,
43};
44
51struct FusionSpec {
53 FusionAccess access = FusionAccess::Unfusable;
57 uint32_t block_size = 0;
60 uint32_t coder_unit_size = 0;
61
62 bool fusable() const { return access != FusionAccess::Unfusable; }
63};
64
77enum class FusionStrategy : uint8_t {
78 ChunkCooperative,
79 WarpRegister,
80};
81
90enum class EncodingOracleKind : uint8_t {
91 None = 0,
92 PlainFixedRateBitpack,
93 AdaptiveFixedRateBitpack,
94};
95
105 EncodingOracleKind kind = EncodingOracleKind::None;
106 std::string op_name;
107 std::string include_header;
108 std::vector<uint8_t> params;
109 uint8_t input_data_type = 0xFF;
110 uint32_t unit_elems = 0;
111 bool exact = false;
112 bool additive = false;
113
114 bool valid() const {
115 return kind != EncodingOracleKind::None && !op_name.empty() &&
116 unit_elems != 0 && exact;
117 }
118};
119
121enum class FusedAuxSizeKind : uint8_t {
122 FixedBitsPerUnit = 0,
124};
125
132 int output_index = -1;
133 std::string name;
135 uint8_t data_type = 0xFF;
136 uint32_t unit_elems = 0;
137 uint32_t bits_per_unit = 0;
138 uint32_t count_group = 0;
139
140 bool valid() const {
141 if (output_index < 0 || name.empty() || unit_elems == 0) return false;
142 return size_kind != FusedAuxSizeKind::FixedBitsPerUnit || bits_per_unit != 0;
143 }
144};
145
162 FusionStrategy strategy = FusionStrategy::ChunkCooperative;
163 std::string op_name;
164 std::string include_header;
165 std::vector<uint8_t> params;
166
172 uint32_t elems_per_lane = 0;
173 size_t n_ab = 0;
174
191 std::string ti_op_name;
192
193 bool valid() const { return !op_name.empty(); }
194};
195
206 const void* d_input = nullptr;
207 size_t input_bytes = 0;
208 MemoryPool* pool = nullptr;
209 fz::stream_t stream = nullptr;
210};
211
212} // namespace fz
Definition mempool.h:82
Definition dag.h:24
FusionAccess
A stage's dependency and codec role for generated execution.
Definition fusion.h:37
FusionStrategy
Which fused-kernel execution model a stage's device-op belongs to.
Definition fusion.h:77
FusedAuxSizeKind
Definition fusion.h:121
@ CompactedElements
runtime count * sizeof(element)
@ FixedBitsPerUnit
ceil(num_units * bits_per_unit / 8)
EncodingOracleKind
Registered exact encoded-size policies used by an upstream adaptive stage for an algorithmic mode dec...
Definition fusion.h:90
Host-side declaration of a local, exact encoded-size oracle.
Definition fusion.h:104
uint8_t input_data_type
DataType value; 0xFF = unknown.
Definition fusion.h:109
Definition fusion.h:131
uint32_t count_group
stage-local shared compaction count; 0=none.
Definition fusion.h:138
A stage's contribution to a generated fused kernel — the device-op it maps to, where its source lives...
Definition fusion.h:161
std::vector< uint8_t > params
POD Params bytes; empty for stateless ops.
Definition fusion.h:165
uint32_t elems_per_lane
Definition fusion.h:172
std::string op_name
device-op type name, e.g. "DiffNegabinary"
Definition fusion.h:163
std::string include_header
header used by the generated source
Definition fusion.h:164
std::string ti_op_name
Definition fusion.h:191
Minimal context a fused runner hands a stage so it can establish the forward-computed state its OWN i...
Definition fusion.h:205
fz::stream_t stream
stream to prime on
Definition fusion.h:209
MemoryPool * pool
scratch pool
Definition fusion.h:208
const void * d_input
device input buffer
Definition fusion.h:206
size_t input_bytes
its size in bytes
Definition fusion.h:207
A stage's fusion contract. Stages that can participate in a fused kernel override Stage::getFusionSpe...
Definition fusion.h:51
uint32_t block_size
Definition fusion.h:57
FusionAccess access
Access pattern class.
Definition fusion.h:53
uint32_t coder_unit_size
Definition fusion.h:60
Backend-neutral GPU type aliases.