|
FZGPUModules 2.0
GPU-accelerated modular compression pipelines
|
A stage's contribution to a generated fused kernel — the device-op it maps to, where its source lives, and its runtime parameter bytes. More...
#include <fusion.h>
Public Attributes | |
| std::string | op_name |
| device-op type name, e.g. "DiffNegabinary" | |
| std::string | include_header |
| header used by the generated source | |
| std::vector< uint8_t > | params |
| POD Params bytes; empty for stateless ops. | |
| uint32_t | elems_per_lane = 0 |
| std::string | ti_op_name |
A stage's contribution to a generated fused kernel — the device-op it maps to, where its source lives, and its runtime parameter bytes.
The generic runner collects one FusedOpDecl per stage in a fused group (after priming), packs the params blobs in group order, and hands the ordered op-name list to the codegen. This is how a stage declares its fused identity without the runner hard-coding any pipeline shape. Default-constructed (empty op_name) means "not a fused op" — the stage does not participate.
params is the raw bytes of the op's POD Params struct; the generated kernel reinterpret_casts the packed blob to that type, so the host-packed layout MUST match the device struct exactly (share the POD definition — see modules/fused/chunk_fusion/chunk_op_params.h). Stateless ops leave it empty.
| uint32_t fz::FusedOpDecl::elems_per_lane = 0 |
Warp-register predictors only (0/unused otherwise): the shape a generic warp runner needs so it does not have to downcast the predictor stage. The kernel is templated on elems_per_lane (= block_size/32), and the blocks cover n_ab padded elements. The predictor packs its config into params with a leading float inv2eb slot (offset 0) the runner fills from the resolved bound.
| std::string fz::FusedOpDecl::ti_op_name |
Thread-independent (TI) device-policy type name for this SAME op, if the stage has one registered; empty means "no TI variant" — the launcher's TI eligibility check is exactly "both predictor and coder declared a non-empty ti_op_name", nothing else. This replaces a launcher-side name whitelist (nvrtc_warp_fusion.cu's old tiSupportedChain) with the stage declaring its own capability directly: adding a TI variant for a new predictor/coder means writing the ThreadX policy in warp_ti_fusion.cuh and setting this field here — no separate list to keep in sync, and a mismatch (TI class exists but this field wasn't set, or vice versa) is a straightforward NVRTC-compile-time or eligibility-mismatch to find rather than a silent throughput regression.
For a PREDICTOR: the exact, non-templated TI class name ("ThreadLorenzo1DPredictor", "ThreadTiledLorenzo3DPredictor", ...). For a CODER: the TI class's TEMPLATE BASE name without the <N> block-size argument ("ThreadFixedRateCoderN", "ThreadPlainRateCoderN") — the launcher supplies N (= 32 * elems_per_lane) since only it knows the paired predictor's block size.