29#include "coders/huffman/phf/hf.h"
31#include <cuda_runtime.h>
38#include <unordered_map>
43namespace phf {
template<
typename E>
struct Buf; }
70 std::is_same_v<T, uint8_t> ||
71 std::is_same_v<T, uint16_t> ||
72 std::is_same_v<T, uint32_t>,
73 "HuffmanStage: T must be uint8_t, uint16_t, or uint32_t.");
96 void setBklen(uint32_t bklen) { bklen_ = bklen; }
97 uint32_t getBklen()
const {
return bklen_; }
111 bool isInverse()
const override {
return is_inverse_; }
135 const std::vector<void*>& inputs,
136 const std::vector<void*>& outputs,
137 const std::vector<size_t>& sizes
141 std::string
getName()
const override {
return "Huffman"; }
142 size_t getNumInputs()
const override {
return 1; }
143 size_t getNumOutputs()
const override {
return 1; }
146 const std::vector<size_t>& input_sizes
148 if (input_sizes.empty())
return {0};
151 return {input_sizes[0] * 2 + 4096};
154 return {original_len_ *
sizeof(T)};
157 std::unordered_map<std::string, size_t>
159 return {{
"output", actual_output_size_}};
163 return (index == 0) ? actual_output_size_ : 0;
168 return static_cast<uint16_t
>(StageType::HUFFMAN);
181 size_t , uint8_t* buf,
size_t max_size
183 if (max_size < 11)
return 0;
184 buf[0] =
static_cast<uint8_t
>(dataTypeOf<T>());
185 uint16_t bk =
static_cast<uint16_t
>(bklen_);
186 std::memcpy(buf + 1, &bk,
sizeof(uint16_t));
187 std::memcpy(buf + 3, &original_len_,
sizeof(uint64_t));
194 std::memcpy(&bk, buf + 1,
sizeof(uint16_t));
198 std::memcpy(&original_len_, buf + 3,
sizeof(uint64_t));
204 saved_bklen_ = bklen_;
205 saved_original_len_ = original_len_;
206 saved_output_size_ = actual_output_size_;
209 void restoreState()
override {
210 bklen_ = saved_bklen_;
211 original_len_ = saved_original_len_;
212 actual_output_size_ = saved_output_size_;
216 bool is_inverse_ =
false;
217 uint32_t bklen_ = defaultBklen();
219 uint64_t original_len_ = 0;
220 size_t actual_output_size_ = 0;
221 size_t cap_inlen_ = 0;
222 uint32_t last_bklen_ = 0;
226 int hist_grid_dim_ = 0;
227 int hist_block_dim_ = 0;
228 int hist_shmem_use_ = 0;
229 int hist_r_per_block_ = 0;
232 std::unique_ptr<phf::Buf<T>> buf_;
233 phf_header header_ {};
238 MemoryPool* pool_ =
nullptr;
241 uint32_t saved_bklen_ = defaultBklen();
242 uint64_t saved_original_len_ = 0;
243 size_t saved_output_size_ = 0;
245 static constexpr uint32_t defaultBklen() {
246 if constexpr (std::is_same_v<T, uint8_t>)
return 256;
251 static constexpr DataType dataTypeOf() {
252 if constexpr (std::is_same_v<U, uint8_t>)
return DataType::UINT8;
253 if constexpr (std::is_same_v<U, uint16_t>)
return DataType::UINT16;
254 return DataType::UINT32;
261 void initBuf(
size_t inlen, MemoryPool* pool);
264extern template class HuffmanStage<uint8_t>;
265extern template class HuffmanStage<uint16_t>;
266extern template class HuffmanStage<uint32_t>;
Definition huffman_stage.h:68
size_t estimateDeviceFootprintBytes(size_t inlen) const override
size_t getMaxHeaderSize(size_t) const override
Definition huffman_stage.h:201
size_t serializeHeader(size_t, uint8_t *buf, size_t max_size) const override
Definition huffman_stage.h:180
void execute(cudaStream_t stream, MemoryPool *pool, const std::vector< void * > &inputs, const std::vector< void * > &outputs, const std::vector< size_t > &sizes) override
uint16_t getStageTypeId() const override
Definition huffman_stage.h:167
bool isGraphCompatible() const override
Definition huffman_stage.h:114
void onFinalize(size_t estimated_inlen, MemoryPool *pool) override
size_t getActualOutputSize(int index) const override
Definition huffman_stage.h:162
void saveState() override
Definition huffman_stage.h:203
void setInverse(bool inv) override
Definition huffman_stage.h:110
std::vector< size_t > estimateOutputSizes(const std::vector< size_t > &input_sizes) const override
Definition huffman_stage.h:145
void deserializeHeader(const uint8_t *buf, size_t size) override
Definition huffman_stage.h:191
size_t estimatePinnedFootprintBytes(size_t inlen) const override
std::string getName() const override
Definition huffman_stage.h:141
uint8_t getOutputDataType(size_t) const override
Definition huffman_stage.h:172
std::unordered_map< std::string, size_t > getActualOutputSizesByName() const override
Definition huffman_stage.h:158
void setBklen(uint32_t bklen)
Definition huffman_stage.h:96
void setEncodeMode(HuffmanEncodeMode mode)
Definition huffman_stage.h:106
uint8_t getInputDataType(size_t) const override
Definition huffman_stage.h:175
Definition fzm_format.h:25
DataType
Element data type identifiers used in buffer and stage descriptors.
Definition fzm_format.h:104
@ UNKNOWN
Byte-transparent stages: skip type checking at finalize()
HuffmanEncodeMode
Definition huffman_stage.h:48
@ Coarse
Multi-kernel coarse path; CPU prefix-sum sync in phase 3 (default).
@ Fine
ReVISIT-lite single kernel; fully GPU-async phase 3, no mid-encode CPU sync.
Base class interface for all compression stages.