gem5 v24.0.0.0
|
This encoder builds a Huffman tree using the frequency of each value to be encoded. More...
#include <huffman.hh>
Classes | |
class | Node |
Node for the Huffman tree. More... | |
struct | NodeComparator |
Entries are not inserted directly into the tree. More... | |
Public Member Functions | |
Huffman (uint64_t max_code_length) | |
~Huffman ()=default | |
void | sample (uint64_t value, uint64_t frequency) |
Inserts the value-frequency pair in the tree. | |
void | generateCodeMaps () |
Generation of the code maps. | |
Code | encode (const uint64_t val) const override |
The function responsible for the generation of the alternative value. | |
uint64_t | decode (const uint64_t code) const override |
Decode a value. | |
Public Member Functions inherited from gem5::compression::encoder::Base | |
Base () | |
virtual | ~Base ()=default |
Private Member Functions | |
std::unique_ptr< Node > | buildTree () |
Build a Huffman tree using the values and their respective frequencies, which have been informed through the insertion function. | |
void | generateCodes (const Node *node, const Code ¤t_code) |
Recursive function that generates the huffman codes based on the tree provided. | |
Private Attributes | |
const unsigned | maxCodeLength |
Maximum number of bits in a codeword. | |
std::map< uint64_t, Code > | valueToCode |
Table containing the codewords and their respective lengths. | |
std::map< uint64_t, uint64_t > | codeToValue |
std::priority_queue< Node *, std::vector< Node * >, NodeComparator > | trees |
This encoder builds a Huffman tree using the frequency of each value to be encoded.
Definition at line 54 of file huffman.hh.
gem5::compression::encoder::Huffman::Huffman | ( | uint64_t | max_code_length | ) |
Definition at line 43 of file huffman.cc.
References fatal_if, and maxCodeLength.
|
default |
|
private |
Build a Huffman tree using the values and their respective frequencies, which have been informed through the insertion function.
Definition at line 59 of file huffman.cc.
References trees.
Referenced by generateCodeMaps().
|
overridevirtual |
Decode a value.
code | The encoded value. |
Implements gem5::compression::encoder::Base.
Definition at line 130 of file huffman.cc.
References codeToValue.
|
overridevirtual |
The function responsible for the generation of the alternative value.
If the size of the returning Code is greater than the maximum undelying type's size (e.g., 64 bits) the encoding results should be discarded.
The | value to be encoded. |
Implements gem5::compression::encoder::Base.
Definition at line 114 of file huffman.cc.
References gem5::compression::encoder::Code::code, gem5::compression::encoder::Code::length, gem5::X86ISA::val, and valueToCode.
Referenced by gem5::compression::FrequentValues::compress(), and gem5::compression::FrequentValues::decompress().
void gem5::compression::encoder::Huffman::generateCodeMaps | ( | ) |
Generation of the code maps.
This automatically builds the tree.
Definition at line 82 of file huffman.cc.
References buildTree(), codeToValue, generateCodes(), and valueToCode.
Referenced by gem5::compression::FrequentValues::generateCodes().
|
private |
Recursive function that generates the huffman codes based on the tree provided.
The generated codes are added to the code map structure.
node | The node being analyzed. |
current_code | The code so far. |
Definition at line 90 of file huffman.cc.
References gem5::compression::encoder::Code::code, codeToValue, generateCodes(), gem5::compression::encoder::Huffman::Node::getLeftSubTree(), gem5::compression::encoder::Huffman::Node::getRightSubTree(), gem5::compression::encoder::Huffman::Node::getValue(), gem5::compression::encoder::Huffman::Node::isLeaf(), gem5::compression::encoder::Code::length, maxCodeLength, and valueToCode.
Referenced by generateCodeMaps(), and generateCodes().
void gem5::compression::encoder::Huffman::sample | ( | uint64_t | value, |
uint64_t | frequency ) |
Inserts the value-frequency pair in the tree.
value | The value. |
frequency | The value's frequency. |
Definition at line 51 of file huffman.cc.
References trees.
Referenced by gem5::compression::FrequentValues::generateCodes().
|
private |
Definition at line 147 of file huffman.hh.
Referenced by decode(), generateCodeMaps(), and generateCodes().
|
private |
Maximum number of bits in a codeword.
If a codeword requires more than this amount of bits, its respective value is discarded.
Definition at line 140 of file huffman.hh.
Referenced by generateCodes(), and Huffman().
|
private |
Definition at line 161 of file huffman.hh.
Referenced by buildTree(), and sample().
|
private |
Table containing the codewords and their respective lengths.
Some entries are discarded due to their lengths being too big.
Definition at line 146 of file huffman.hh.
Referenced by encode(), generateCodeMaps(), and generateCodes().