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
9
namespace
fz
{
10
11
class
MemoryPool;
12
38
enum class
FusionAccess
: uint8_t {
39
Unfusable = 0,
40
Map,
41
BlockLocal,
42
TileAdaptive,
43
Cooperative,
44
};
45
52
struct
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
77
enum class
FusionStrategy
: uint8_t {
78
ChunkCooperative,
79
WarpRegister,
80
};
81
90
enum class
EncodingOracleKind
: uint8_t {
91
None = 0,
92
PlainFixedRateBitpack,
93
AdaptiveFixedRateBitpack,
94
};
95
104
struct
EncodingOracleDecl
{
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
121
enum class
FusedAuxSizeKind
: uint8_t {
122
FixedBitsPerUnit
= 0,
123
CompactedElements
,
124
};
125
131
struct
FusedAuxOutputDecl
{
132
int
output_index = -1;
133
std::string name;
134
FusedAuxSizeKind
size_kind =
FusedAuxSizeKind::CompactedElements
;
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
161
struct
FusedOpDecl
{
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
186
struct
FusedPrimeContext
{
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
fz::MemoryPool
Definition
mempool.h:82
fz
Definition
dag.h:24
fz::FusionAccess
FusionAccess
How a stage accesses its input — the property that decides whether it can be fused into a single kern...
Definition
fusion.h:38
fz::FusionStrategy
FusionStrategy
Which fused-kernel execution model a stage's device-op belongs to.
Definition
fusion.h:77
fz::FusedAuxSizeKind
FusedAuxSizeKind
Definition
fusion.h:121
fz::FusedAuxSizeKind::CompactedElements
@ CompactedElements
runtime count * sizeof(element)
fz::FusedAuxSizeKind::FixedBitsPerUnit
@ FixedBitsPerUnit
ceil(num_units * bits_per_unit / 8)
fz::EncodingOracleKind
EncodingOracleKind
Registered exact encoded-size policies used by an upstream adaptive stage for an algorithmic mode dec...
Definition
fusion.h:90
fz::EncodingOracleDecl
Host-side declaration of a local, exact encoded-size oracle.
Definition
fusion.h:104
fz::EncodingOracleDecl::input_data_type
uint8_t input_data_type
DataType value; 0xFF = unknown.
Definition
fusion.h:109
fz::FusedAuxOutputDecl
Definition
fusion.h:131
fz::FusedAuxOutputDecl::count_group
uint32_t count_group
stage-local shared compaction count; 0=none.
Definition
fusion.h:138
fz::FusedOpDecl
A stage's contribution to a generated fused kernel — the device-op it maps to, where its source lives...
Definition
fusion.h:161
fz::FusedOpDecl::params
std::vector< uint8_t > params
POD Params bytes; empty for stateless ops.
Definition
fusion.h:165
fz::FusedOpDecl::elems_per_lane
uint32_t elems_per_lane
Definition
fusion.h:172
fz::FusedOpDecl::op_name
std::string op_name
device-op type name, e.g. "DiffNegabinary"
Definition
fusion.h:163
fz::FusedOpDecl::include_header
std::string include_header
header used by the generated source
Definition
fusion.h:164
fz::FusedPrimeContext
Minimal context a fused runner hands a stage so it can establish the forward-computed state its OWN i...
Definition
fusion.h:186
fz::FusedPrimeContext::stream
fz::stream_t stream
stream to prime on
Definition
fusion.h:190
fz::FusedPrimeContext::pool
MemoryPool * pool
scratch pool
Definition
fusion.h:189
fz::FusedPrimeContext::d_input
const void * d_input
device input buffer
Definition
fusion.h:187
fz::FusedPrimeContext::input_bytes
size_t input_bytes
its size in bytes
Definition
fusion.h:188
fz::FusionSpec
A stage's fusion contract. Stages that can participate in a fused kernel override Stage::getFusionSpe...
Definition
fusion.h:52
fz::FusionSpec::block_size
uint32_t block_size
Definition
fusion.h:58
fz::FusionSpec::access
FusionAccess access
Access pattern class.
Definition
fusion.h:54
fz::FusionSpec::coder_unit_size
uint32_t coder_unit_size
Definition
fusion.h:61
types.h
Backend-neutral GPU type aliases.
include
stage
fusion.h
Generated by
1.9.8