15#include <cuda_runtime.h>
29template<typename TIn, typename TOut = typename std::make_unsigned<TIn>::type>
31 static_assert(std::is_integral<TIn>::value && std::is_signed<TIn>::value,
32 "ZigzagStage: TIn must be a signed integer type "
33 "(int8_t, int16_t, int32_t, or int64_t).");
34 static_assert(std::is_integral<TOut>::value && std::is_unsigned<TOut>::value,
35 "ZigzagStage: TOut must be an unsigned integer type.");
36 static_assert(
sizeof(TIn) ==
sizeof(TOut),
37 "ZigzagStage: TIn and TOut must have the same byte width.");
40 ZigzagStage() : is_inverse_(
false), actual_output_size_(0) {}
43 void setInverse(
bool inv)
override { is_inverse_ = inv; }
44 bool isInverse()
const override {
return is_inverse_; }
59 bool isByteTransparent()
const {
return byte_transparent_; }
65 const std::vector<void*>& inputs,
66 const std::vector<void*>& outputs,
67 const std::vector<size_t>& sizes
71 std::string
getName()
const override {
return "Zigzag"; }
72 size_t getNumInputs()
const override {
return 1; }
73 size_t getNumOutputs()
const override {
return 1; }
76 const std::vector<size_t>& input_sizes
78 return {input_sizes[0]};
81 std::unordered_map<std::string, size_t>
83 return {{
"output", actual_output_size_}};
86 return (index == 0) ? actual_output_size_ : 0;
90 return static_cast<uint16_t
>(StageType::ZIGZAG);
98 ?
static_cast<uint8_t
>(dataTypeOf<TIn>())
99 :
static_cast<uint8_t
>(dataTypeOf<TOut>());
106 ?
static_cast<uint8_t
>(dataTypeOf<TOut>())
107 :
static_cast<uint8_t
>(dataTypeOf<TIn>());
112 size_t output_index, uint8_t* buf,
size_t max_size
115 if (max_size < 3)
return 0;
116 buf[0] =
static_cast<uint8_t
>(dataTypeOf<TIn>());
117 buf[1] =
static_cast<uint8_t
>(dataTypeOf<TOut>());
118 buf[2] = byte_transparent_ ? 1 : 0;
125 if (size >= 3) byte_transparent_ = (buf[2] != 0);
132 bool byte_transparent_ =
false;
133 size_t actual_output_size_;
136 static constexpr DataType dataTypeOf() {
137 if (std::is_same<U, int8_t>::value)
return DataType::INT8;
138 if (std::is_same<U, int16_t>::value)
return DataType::INT16;
139 if (std::is_same<U, int32_t>::value)
return DataType::INT32;
140 if (std::is_same<U, int64_t>::value)
return DataType::INT64;
141 if (std::is_same<U, uint8_t>::value)
return DataType::UINT8;
142 if (std::is_same<U, uint16_t>::value)
return DataType::UINT16;
143 if (std::is_same<U, uint32_t>::value)
return DataType::UINT32;
144 if (std::is_same<U, uint64_t>::value)
return DataType::UINT64;
145 return DataType::UINT8;
149extern template class ZigzagStage<int8_t, uint8_t>;
150extern template class ZigzagStage<int16_t, uint16_t>;
151extern template class ZigzagStage<int32_t, uint32_t>;
152extern template class ZigzagStage<int64_t, uint64_t>;
Definition zigzag_stage.h:30
uint8_t getInputDataType(size_t) const override
Definition zigzag_stage.h:102
std::unordered_map< std::string, size_t > getActualOutputSizesByName() const override
Definition zigzag_stage.h:82
void execute(cudaStream_t stream, MemoryPool *pool, const std::vector< void * > &inputs, const std::vector< void * > &outputs, const std::vector< size_t > &sizes) override
std::string getName() const override
Definition zigzag_stage.h:71
void setInverse(bool inv) override
Definition zigzag_stage.h:43
void deserializeHeader(const uint8_t *buf, size_t size) override
Definition zigzag_stage.h:122
uint16_t getStageTypeId() const override
Definition zigzag_stage.h:89
uint8_t getOutputDataType(size_t output_index) const override
Definition zigzag_stage.h:93
std::vector< size_t > estimateOutputSizes(const std::vector< size_t > &input_sizes) const override
Definition zigzag_stage.h:75
size_t serializeHeader(size_t output_index, uint8_t *buf, size_t max_size) const override
Definition zigzag_stage.h:111
size_t getMaxHeaderSize(size_t) const override
Definition zigzag_stage.h:128
void setByteTransparent(bool on)
Definition zigzag_stage.h:58
size_t getActualOutputSize(int index) const override
Definition zigzag_stage.h:85
Definition fzm_format.h:25
DataType
Element data type identifiers used in buffer and stage descriptors.
Definition fzm_format.h:109
@ UNKNOWN
Byte-transparent stages: skip type checking at finalize()
Base class interface for all compression stages.
Zigzag (two's complement to magnitude-sign) encoding helpers.