FZGPUModules 1.0
GPU-accelerated modular compression pipeline
Loading...
Searching...
No Matches
fz::LorenzoStage< TInput, TCode > Class Template Reference

#include <lorenzo.h>

+ Inheritance diagram for fz::LorenzoStage< TInput, TCode >:

Classes

struct  Config
 

Public Member Functions

void execute (cudaStream_t stream, MemoryPool *pool, const std::vector< void * > &inputs, const std::vector< void * > &outputs, const std::vector< size_t > &sizes) override
 
void postStreamSync (cudaStream_t stream) override
 
std::string getName () const override
 
std::vector< std::string > getOutputNames () const override
 
std::vector< size_t > estimateOutputSizes (const std::vector< size_t > &input_sizes) const override
 
std::unordered_map< std::string, size_t > getActualOutputSizesByName () const override
 
size_t getActualOutputSize (int index) const override
 
void saveState () override
 
void setDims (const std::array< size_t, 3 > &dims) override
 
int ndim () const
 Returns the effective spatial dimensionality (1, 2, or 3).
 
void setInverse (bool inverse)
 
uint16_t getStageTypeId () const override
 
uint8_t getOutputDataType (size_t output_index) const override
 
uint8_t getInputDataType (size_t) const override
 
size_t serializeHeader (size_t output_index, uint8_t *header_buffer, size_t max_size) const override
 
size_t getMaxHeaderSize (size_t output_index) const override
 
void deserializeHeader (const uint8_t *header_buffer, size_t size) override
 
- Public Member Functions inherited from fz::Stage
virtual size_t getRequiredInputAlignment () const
 
int getOutputIndex (const std::string &name) const
 
virtual bool isGraphCompatible () const
 
virtual size_t estimateScratchBytes (const std::vector< size_t > &input_sizes) const
 

Detailed Description

template<typename TInput = float, typename TCode = uint16_t>
class fz::LorenzoStage< TInput, TCode >

Lorenzo predictor with error-bounded quantization (1-D, 2-D, 3-D).

Forward outputs (compression):

  • [0] codes — quantization codes for all elements (TCode)
  • [1] outlier_errors — prediction errors for outliers (TInput)
  • [2] outlier_indices — outlier element indices (uint32_t)
  • [3] outlier_count — number of outliers (uint32_t, 4 bytes)

Inverse (decompression): takes the four forward outputs, produces the reconstructed data as a single TInput array.

Template Parameters
TInputFloating-point input type (float or double).
TCodeQuantization code type (uint8_t, uint16_t, uint32_t).

Member Function Documentation

◆ execute()

template<typename TInput = float, typename TCode = uint16_t>
void fz::LorenzoStage< TInput, TCode >::execute ( cudaStream_t  stream,
MemoryPool pool,
const std::vector< void * > &  inputs,
const std::vector< void * > &  outputs,
const std::vector< size_t > &  sizes 
)
overridevirtual

Execute the stage. Inputs, outputs, and sizes are device pointers/bytes.

Implements fz::Stage.

◆ postStreamSync()

template<typename TInput = float, typename TCode = uint16_t>
void fz::LorenzoStage< TInput, TCode >::postStreamSync ( cudaStream_t  stream)
overridevirtual

Reads back the actual outlier count from the device (4 bytes) and trims actual_output_sizes_ to the real values. Called by Pipeline::compress() after the stream is synchronized — avoids a mid-pipeline stall.

Reimplemented from fz::Stage.

◆ getName()

template<typename TInput = float, typename TCode = uint16_t>
std::string fz::LorenzoStage< TInput, TCode >::getName ( ) const
inlineoverridevirtual

Human-readable name used in error messages and debug output.

Implements fz::Stage.

◆ getOutputNames()

template<typename TInput = float, typename TCode = uint16_t>
std::vector< std::string > fz::LorenzoStage< TInput, TCode >::getOutputNames ( ) const
inlineoverridevirtual

Output port names in order. Default: single port named "output". Multi-output stages (e.g. Lorenzo: "codes", "outliers") override this.

Reimplemented from fz::Stage.

◆ estimateOutputSizes()

template<typename TInput = float, typename TCode = uint16_t>
std::vector< size_t > fz::LorenzoStage< TInput, TCode >::estimateOutputSizes ( const std::vector< size_t > &  input_sizes) const
overridevirtual

Estimate output buffer sizes given input sizes. Used for buffer allocation planning in PREALLOCATE mode — must be a safe upper bound; under-estimation causes buffer overruns.

Implements fz::Stage.

◆ getActualOutputSizesByName()

template<typename TInput = float, typename TCode = uint16_t>
std::unordered_map< std::string, size_t > fz::LorenzoStage< TInput, TCode >::getActualOutputSizesByName ( ) const
inlineoverridevirtual

Actual output sizes after execute(), keyed by output port name.

Implements fz::Stage.

◆ getActualOutputSize()

template<typename TInput = float, typename TCode = uint16_t>
size_t fz::LorenzoStage< TInput, TCode >::getActualOutputSize ( int  index) const
inlineoverridevirtual

Actual size of a single output by index after execute(). Avoids constructing the map for the common single-output case. Default delegates to getActualOutputSizesByName(); override to return directly from an internal field.

Reimplemented from fz::Stage.

◆ saveState()

template<typename TInput = float, typename TCode = uint16_t>
void fz::LorenzoStage< TInput, TCode >::saveState ( )
inlineoverridevirtual

Save/restore config state around a decompression pass. deserializeHeader() overwrites the stage's forward-pass config; saveState() is called before and restoreState() after so the stage returns to its original configuration.

Reimplemented from fz::Stage.

◆ setDims()

template<typename TInput = float, typename TCode = uint16_t>
void fz::LorenzoStage< TInput, TCode >::setDims ( const std::array< size_t, 3 > &  dims)
inlineoverridevirtual

Called once by Pipeline::finalize() so stages can react to the dataset dimensions set via Pipeline::setDims() after construction.

Parameters
dims{x, y, z} extents (z==1 → 2-D; y==z==1 → 1-D)

Reimplemented from fz::Stage.

◆ setInverse()

template<typename TInput = float, typename TCode = uint16_t>
void fz::LorenzoStage< TInput, TCode >::setInverse ( bool  inverse)
inlinevirtual

Switch between forward (compression) and inverse (decompression) mode. Affects getNumInputs()/getNumOutputs() for stages with asymmetric port counts.

Reimplemented from fz::Stage.

◆ getStageTypeId()

template<typename TInput = float, typename TCode = uint16_t>
uint16_t fz::LorenzoStage< TInput, TCode >::getStageTypeId ( ) const
inlineoverridevirtual

Stage type identifier written into the FZM file header.

Implements fz::Stage.

◆ getOutputDataType()

template<typename TInput = float, typename TCode = uint16_t>
uint8_t fz::LorenzoStage< TInput, TCode >::getOutputDataType ( size_t  output_index) const
inlineoverridevirtual

DataType enum of the given output port.

Implements fz::Stage.

◆ getInputDataType()

template<typename TInput = float, typename TCode = uint16_t>
uint8_t fz::LorenzoStage< TInput, TCode >::getInputDataType ( size_t  ) const
inlineoverridevirtual

Expected DataType of the given input port.

Used by Pipeline::finalize() to detect type mismatches between connected stages before any execution. Return DataType::UNKNOWN to opt out of checking — byte-transparent stages (Bitshuffle, RZE) and mock stages must return UNKNOWN; finalize() skips any connection where either side is UNKNOWN.

Reimplemented from fz::Stage.

◆ serializeHeader()

template<typename TInput = float, typename TCode = uint16_t>
size_t fz::LorenzoStage< TInput, TCode >::serializeHeader ( size_t  output_index,
uint8_t *  header_buffer,
size_t  max_size 
) const
inlineoverridevirtual

Serialize stage config into header_buffer (max 128 bytes) for the FZM file. Return the number of bytes written, or 0 if the stage has no config.

Reimplemented from fz::Stage.

◆ getMaxHeaderSize()

template<typename TInput = float, typename TCode = uint16_t>
size_t fz::LorenzoStage< TInput, TCode >::getMaxHeaderSize ( size_t  output_index) const
inlineoverridevirtual

Maximum bytes this stage writes into its per-output FZM header slot.

Reimplemented from fz::Stage.

◆ deserializeHeader()

template<typename TInput = float, typename TCode = uint16_t>
void fz::LorenzoStage< TInput, TCode >::deserializeHeader ( const uint8_t *  header_buffer,
size_t  size 
)
inlineoverridevirtual

Restore stage config from header_buffer during decompression.

Reimplemented from fz::Stage.