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
38enum class FusionAccess : uint8_t {
39 Unfusable = 0,
40 Map,
41 BlockLocal,
42 TileAdaptive,
43 Cooperative,
44};
45
52struct FusionSpec {
54 FusionAccess access = FusionAccess::Unfusable;
58 uint32_t block_size = 0;
61 uint32_t coder_unit_size = 0;
62
63 bool fusable() const { return access != FusionAccess::Unfusable; }
64};
65
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 bool valid() const { return !op_name.empty(); }
175};
176
187 const void* d_input = nullptr;
188 size_t input_bytes = 0;
189 MemoryPool* pool = nullptr;
190 fz::stream_t stream = nullptr;
191};
192
193} // namespace fz
Definition mempool.h:82
Definition dag.h:24
FusionAccess
How a stage accesses its input — the property that decides whether it can be fused into a single kern...
Definition fusion.h:38
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
Minimal context a fused runner hands a stage so it can establish the forward-computed state its OWN i...
Definition fusion.h:186
fz::stream_t stream
stream to prime on
Definition fusion.h:190
MemoryPool * pool
scratch pool
Definition fusion.h:189
const void * d_input
device input buffer
Definition fusion.h:187
size_t input_bytes
its size in bytes
Definition fusion.h:188
A stage's fusion contract. Stages that can participate in a fused kernel override Stage::getFusionSpe...
Definition fusion.h:52
uint32_t block_size
Definition fusion.h:58
FusionAccess access
Access pattern class.
Definition fusion.h:54
uint32_t coder_unit_size
Definition fusion.h:61
Backend-neutral GPU type aliases.