gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
frequent_values.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019-2020 Inria
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #ifndef __MEM_CACHE_COMPRESSORS_FREQUENT_VALUES_HH__
30 #define __MEM_CACHE_COMPRESSORS_FREQUENT_VALUES_HH__
31 
32 #include <climits>
33 #include <cstdint>
34 #include <memory>
35 #include <vector>
36 
37 #include "base/sat_counter.hh"
38 #include "base/types.hh"
39 #include "mem/cache/base.hh"
43 #include "sim/eventq.hh"
44 #include "sim/probe/probe.hh"
45 
46 namespace gem5
47 {
48 
49 struct FrequentValuesCompressorParams;
50 
51 namespace compression
52 {
53 
61 class FrequentValues : public Base
62 {
63  private:
64  class CompData;
65 
67 
68  class FrequentValuesListener : public ProbeListenerArgBase<DataUpdate>
69  {
70  protected:
72 
73  public:
75  const std::string &name)
76  : ProbeListenerArgBase(pm, name), parent(_parent)
77  {
78  }
79  void notify(const DataUpdate &data_update) override;
80  };
82 
84  const bool useHuffmanEncoding;
85 
88 
90  const int counterBits;
91 
94 
96  const bool checkSaturation;
97 
99  const unsigned numVFTEntries;
100 
102  const unsigned numSamples;
103 
105  unsigned takenSamples;
106 
113 
114  class VFTEntry : public TaggedEntry
115  {
116  public:
121  uint64_t value;
122 
130 
131  VFTEntry(std::size_t num_bits)
132  : TaggedEntry(), value(0), counter(num_bits)
133  {
134  }
135 
136  void
137  invalidate() override
138  {
140  value = 0;
141  counter.reset();
142  }
143  };
144 
150 
157 
160 
168  bool is_invalidation);
169 
171  void generateCodes();
172 
173  std::unique_ptr<Base::CompressionData> compress(
174  const std::vector<Chunk>& chunks, Cycles& comp_lat,
175  Cycles& decomp_lat) override;
176 
177  void decompress(const CompressionData* comp_data, uint64_t* data) override;
178 
179  public:
180  typedef FrequentValuesCompressorParams Params;
181  FrequentValues(const Params &p);
182  ~FrequentValues() = default;
183 
189  void probeNotify(const DataUpdate &data_update);
190 
191  void regProbeListeners() override;
192 };
193 
195 {
196  public:
202  {
205 
210  uint64_t value;
211 
212  CompressedValue(encoder::Code _code, uint64_t _value)
213  : code(_code), value(_value)
214  {
215  }
216  };
217 
223 };
224 
225 } // namespace compression
226 } // namespace gem5
227 
228 #endif //__MEM_CACHE_COMPRESSORS_FREQUENT_VALUES_HH__
gem5::compression::FrequentValues::compress
std::unique_ptr< Base::CompressionData > compress(const std::vector< Chunk > &chunks, Cycles &comp_lat, Cycles &decomp_lat) override
Apply the compression process to the cache line.
Definition: frequent_values.cc:63
gem5::compression::Base::CompressionData
Definition: base.hh:245
gem5::compression::FrequentValues::uncompressedValue
uint64_t uncompressedValue
A pseudo value is used as the representation of uncompressed values.
Definition: frequent_values.hh:156
base.hh
gem5::compression::FrequentValues::probeNotify
void probeNotify(const DataUpdate &data_update)
Process a notification event from the ProbeListener.
Definition: frequent_values.cc:264
data
const char data[]
Definition: circlebuf.test.cc:48
gem5::compression::FrequentValues::checkSaturation
const bool checkSaturation
Whether an action must be performed when counters saturate.
Definition: frequent_values.hh:96
gem5::compression::FrequentValues::CompData::CompressedValue
A compressed value contains its encoding, and the compressed data itself.
Definition: frequent_values.hh:201
gem5::compression::FrequentValues::VFTEntry::VFTEntry
VFTEntry(std::size_t num_bits)
Definition: frequent_values.hh:131
gem5::compression::FrequentValues::FrequentValuesListener::notify
void notify(const DataUpdate &data_update) override
Definition: frequent_values.cc:297
gem5::compression::FrequentValues::useHuffmanEncoding
const bool useHuffmanEncoding
Whether Huffman encoding is applied to the VFT indices.
Definition: frequent_values.hh:84
gem5::compression::FrequentValues::decompress
void decompress(const CompressionData *comp_data, uint64_t *data) override
Apply the decompression process to the compressed data.
Definition: frequent_values.cc:136
base.hh
gem5::compression::FrequentValues::VFTEntry::value
uint64_t value
The value is stored as a 64 bit entry to accomodate for the uncompressed value.
Definition: frequent_values.hh:121
gem5::compression::FrequentValues
This compressor samples the cache for a while, trying to define the most frequently used values.
Definition: frequent_values.hh:61
gem5::compression::FrequentValues::listeners
std::vector< FrequentValuesListener * > listeners
Definition: frequent_values.hh:81
gem5::compression::Base::Params
BaseCacheCompressorParams Params
Definition: base.hh:201
std::vector
STL vector class.
Definition: stl.hh:37
gem5::compression::FrequentValues::sampleValues
void sampleValues(const std::vector< uint64_t > &data, bool is_invalidation)
Sample values from a packet, adding them to the VFT.
Definition: frequent_values.cc:176
gem5::compression::FrequentValues::VFT
AssociativeSet< VFTEntry > VFT
The Value Frequency Table, a small cache that keeps track and estimates the frequency distribution of...
Definition: frequent_values.hh:149
gem5::compression::FrequentValues::takenSamples
unsigned takenSamples
Number of samples taken so far.
Definition: frequent_values.hh:105
sat_counter.hh
gem5::compression::FrequentValues::codeGenerationTicks
const Tick codeGenerationTicks
Ticks needed to perform the CODE_GENERATION phase.
Definition: frequent_values.hh:93
gem5::compression::FrequentValues::CompData::compressedValues
std::vector< CompressedValue > compressedValues
The values contained in the original data, after being compressed sequentially.
Definition: frequent_values.hh:222
gem5::compression::FrequentValues::CODE_GENERATION
@ CODE_GENERATION
Definition: frequent_values.hh:111
gem5::Cycles
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:78
gem5::compression::FrequentValues::phase
Phase phase
Definition: frequent_values.hh:112
gem5::GenericSatCounter< uint32_t >
gem5::BaseCache::DataUpdate
A data contents update is composed of the updated block's address, the old contents,...
Definition: base.hh:123
gem5::compression::encoder::Huffman
This encoder builds a Huffman tree using the frequency of each value to be encoded.
Definition: huffman.hh:54
gem5::compression::encoder::Code
Definition: base.hh:44
gem5::compression::FrequentValues::indexEncoder
encoder::Huffman indexEncoder
The encoder applied to the VFT indices.
Definition: frequent_values.hh:87
gem5::TaggedEntry
A tagged entry is an entry containing a tag.
Definition: tagged_entry.hh:46
gem5::compression::FrequentValues::FrequentValuesListener::FrequentValuesListener
FrequentValuesListener(FrequentValues &_parent, ProbeManager *pm, const std::string &name)
Definition: frequent_values.hh:74
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
gem5::compression::FrequentValues::CompData::CompressedValue::code
encoder::Code code
The codeword.
Definition: frequent_values.hh:204
gem5::AssociativeSet
Associative container based on the previosuly defined Entry type Each element is indexed by a key of ...
Definition: associative_set.hh:45
gem5::compression::FrequentValues::numSamples
const unsigned numSamples
Number of samples in the sampling phase.
Definition: frequent_values.hh:102
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::compression::Base
Base cache compressor interface.
Definition: base.hh:64
gem5::GenericSatCounter::reset
void reset()
Reset the counter to its initial value.
Definition: sat_counter.hh:292
gem5::compression::FrequentValues::Params
FrequentValuesCompressorParams Params
Definition: frequent_values.hh:180
gem5::compression::FrequentValues::VFTEntry::counter
SatCounter32 counter
The ideal counter width (in bits) is determined by the maximum number of times a given value appears ...
Definition: frequent_values.hh:129
gem5::TaggedEntry::invalidate
virtual void invalidate()
Invalidate the block.
Definition: tagged_entry.hh:103
gem5::compression::FrequentValues::numVFTEntries
const unsigned numVFTEntries
Maximum number of VFT entries, and thus of codewords too.
Definition: frequent_values.hh:99
gem5::compression::FrequentValues::VFTEntry::invalidate
void invalidate() override
Invalidate the block.
Definition: frequent_values.hh:137
gem5::ProbeManager
ProbeManager is a conduit class that lives on each SimObject, and is used to match up probe listeners...
Definition: probe.hh:162
gem5::compression::FrequentValues::CompData::CompressedValue::CompressedValue
CompressedValue(encoder::Code _code, uint64_t _value)
Definition: frequent_values.hh:212
gem5::compression::FrequentValues::FrequentValuesListener::parent
FrequentValues & parent
Definition: frequent_values.hh:71
gem5::EventFunctionWrapper
Definition: eventq.hh:1136
gem5::compression::FrequentValues::~FrequentValues
~FrequentValues()=default
gem5::ProbeListenerArgBase
ProbeListenerArgBase is used to define the base interface to a ProbeListenerArg (i....
Definition: probe.hh:210
types.hh
gem5::compression::FrequentValues::COMPRESSING
@ COMPRESSING
Definition: frequent_values.hh:111
gem5::compression::FrequentValues::counterBits
const int counterBits
Number of bits in the saturating counters.
Definition: frequent_values.hh:90
gem5::compression::FrequentValues::FrequentValuesListener
Definition: frequent_values.hh:68
huffman.hh
gem5::ProbeListener::name
const std::string name
Definition: probe.hh:137
gem5::compression::FrequentValues::CompData
Definition: frequent_values.hh:194
associative_set.hh
gem5::compression::FrequentValues::codeGenerationEvent
EventFunctionWrapper codeGenerationEvent
Event to handle finishing code generation and starting compression.
Definition: frequent_values.hh:159
gem5::compression::FrequentValues::SAMPLING
@ SAMPLING
Definition: frequent_values.hh:111
gem5::compression::FrequentValues::VFTEntry
Definition: frequent_values.hh:114
probe.hh
gem5::compression::FrequentValues::CompData::CompressedValue::value
uint64_t value
Original value, stored both for when the codeword marks an uncompressed entry, and to verify correctn...
Definition: frequent_values.hh:210
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::compression::FrequentValues::regProbeListeners
void regProbeListeners() override
Register probe listeners for this object.
Definition: frequent_values.cc:288
gem5::compression::FrequentValues::generateCodes
void generateCodes()
End sampling phase and start the code generation.
Definition: frequent_values.cc:217
gem5::compression::FrequentValues::Phase
Phase
The phase that the compressor is at.
Definition: frequent_values.hh:111
gem5::compression::FrequentValues::FrequentValues
FrequentValues(const Params &p)
Definition: frequent_values.cc:48
eventq.hh

Generated on Sun Jul 30 2023 01:56:57 for gem5 by doxygen 1.8.17