gem5  v21.2.1.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 GEM5_DEPRECATED_NAMESPACE(Compressor, compression);
52 namespace compression
53 {
54 
62 class FrequentValues : public Base
63 {
64  private:
65  class CompData;
66 
68 
69  class FrequentValuesListener : public ProbeListenerArgBase<DataUpdate>
70  {
71  protected:
73 
74  public:
76  const std::string &name)
77  : ProbeListenerArgBase(pm, name), parent(_parent)
78  {
79  }
80  void notify(const DataUpdate &data_update) override;
81  };
83 
85  const bool useHuffmanEncoding;
86 
89 
91  const int counterBits;
92 
95 
97  const bool checkSaturation;
98 
100  const unsigned numVFTEntries;
101 
103  const unsigned numSamples;
104 
106  unsigned takenSamples;
107 
114 
115  class VFTEntry : public TaggedEntry
116  {
117  public:
122  uint64_t value;
123 
131 
132  VFTEntry(std::size_t num_bits)
133  : TaggedEntry(), value(0), counter(num_bits)
134  {
135  }
136 
137  void
138  invalidate() override
139  {
141  value = 0;
142  counter.reset();
143  }
144  };
145 
151 
158 
161 
169  bool is_invalidation);
170 
172  void generateCodes();
173 
174  std::unique_ptr<Base::CompressionData> compress(
175  const std::vector<Chunk>& chunks, Cycles& comp_lat,
176  Cycles& decomp_lat) override;
177 
178  void decompress(const CompressionData* comp_data, uint64_t* data) override;
179 
180  public:
181  typedef FrequentValuesCompressorParams Params;
182  FrequentValues(const Params &p);
183  ~FrequentValues() = default;
184 
190  void probeNotify(const DataUpdate &data_update);
191 
192  void regProbeListeners() override;
193 };
194 
196 {
197  public:
203  {
206 
211  uint64_t value;
212 
213  CompressedValue(encoder::Code _code, uint64_t _value)
214  : code(_code), value(_value)
215  {
216  }
217  };
218 
224 };
225 
226 } // namespace compression
227 } // namespace gem5
228 
229 #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:64
gem5::compression::Base::CompressionData
Definition: base.hh:246
gem5::compression::FrequentValues::uncompressedValue
uint64_t uncompressedValue
A pseudo value is used as the representation of uncompressed values.
Definition: frequent_values.hh:157
base.hh
gem5::compression::FrequentValues::probeNotify
void probeNotify(const DataUpdate &data_update)
Process a notification event from the ProbeListener.
Definition: frequent_values.cc:265
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:97
gem5::compression::FrequentValues::CompData::CompressedValue
A compressed value contains its encoding, and the compressed data itself.
Definition: frequent_values.hh:202
gem5::compression::FrequentValues::VFTEntry::VFTEntry
VFTEntry(std::size_t num_bits)
Definition: frequent_values.hh:132
gem5::compression::FrequentValues::FrequentValuesListener::notify
void notify(const DataUpdate &data_update) override
Definition: frequent_values.cc:298
gem5::compression::FrequentValues::useHuffmanEncoding
const bool useHuffmanEncoding
Whether Huffman encoding is applied to the VFT indices.
Definition: frequent_values.hh:85
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:137
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:122
gem5::compression::FrequentValues
This compressor samples the cache for a while, trying to define the most frequently used values.
Definition: frequent_values.hh:62
gem5::compression::FrequentValues::listeners
std::vector< FrequentValuesListener * > listeners
Definition: frequent_values.hh:82
gem5::compression::Base::Params
BaseCacheCompressorParams Params
Definition: base.hh:202
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:177
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:150
gem5::compression::FrequentValues::takenSamples
unsigned takenSamples
Number of samples taken so far.
Definition: frequent_values.hh:106
sat_counter.hh
gem5::compression::FrequentValues::codeGenerationTicks
const Tick codeGenerationTicks
Ticks needed to perform the CODE_GENERATION phase.
Definition: frequent_values.hh:94
gem5::compression::FrequentValues::CompData::compressedValues
std::vector< CompressedValue > compressedValues
The values contained in the original data, after being compressed sequentially.
Definition: frequent_values.hh:223
gem5::compression::FrequentValues::CODE_GENERATION
@ CODE_GENERATION
Definition: frequent_values.hh:112
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:113
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:124
gem5::compression::encoder::Huffman
This encoder builds a Huffman tree using the frequency of each value to be encoded.
Definition: huffman.hh:56
gem5::compression::encoder::Code
Definition: base.hh:46
gem5::compression::FrequentValues::indexEncoder
encoder::Huffman indexEncoder
The encoder applied to the VFT indices.
Definition: frequent_values.hh:88
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:75
gem5::compression::FrequentValues::CompData::CompressedValue::code
encoder::Code code
The codeword.
Definition: frequent_values.hh:205
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::MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:326
gem5::compression::FrequentValues::numSamples
const unsigned numSamples
Number of samples in the sampling phase.
Definition: frequent_values.hh:103
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::compression::Base
Base cache compressor interface.
Definition: base.hh:65
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:181
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:130
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:100
gem5::GEM5_DEPRECATED_NAMESPACE
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)
gem5::compression::FrequentValues::VFTEntry::invalidate
void invalidate() override
Invalidate the block.
Definition: frequent_values.hh:138
gem5::ProbeManager
ProbeManager is a conduit class that lives on each SimObject, and is used to match up probe listeners...
Definition: probe.hh:163
gem5::compression::FrequentValues::CompData::CompressedValue::CompressedValue
CompressedValue(encoder::Code _code, uint64_t _value)
Definition: frequent_values.hh:213
gem5::compression::FrequentValues::FrequentValuesListener::parent
FrequentValues & parent
Definition: frequent_values.hh:72
gem5::EventFunctionWrapper
Definition: eventq.hh:1115
gem5::compression::FrequentValues::~FrequentValues
~FrequentValues()=default
gem5::ProbeListenerArgBase
ProbeListenerArgBase is used to define the base interface to a ProbeListenerArg (i....
Definition: probe.hh:211
types.hh
gem5::compression::FrequentValues::COMPRESSING
@ COMPRESSING
Definition: frequent_values.hh:112
gem5::compression::FrequentValues::counterBits
const int counterBits
Number of bits in the saturating counters.
Definition: frequent_values.hh:91
gem5::compression::FrequentValues::FrequentValuesListener
Definition: frequent_values.hh:69
huffman.hh
gem5::ProbeListener::name
const std::string name
Definition: probe.hh:138
gem5::compression::FrequentValues::CompData
Definition: frequent_values.hh:195
associative_set.hh
gem5::compression::FrequentValues::codeGenerationEvent
EventFunctionWrapper codeGenerationEvent
Event to handle finishing code generation and starting compression.
Definition: frequent_values.hh:160
gem5::compression::FrequentValues::SAMPLING
@ SAMPLING
Definition: frequent_values.hh:112
gem5::compression::FrequentValues::VFTEntry
Definition: frequent_values.hh:115
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:211
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: tlb.cc:60
gem5::compression::FrequentValues::regProbeListeners
void regProbeListeners() override
Register probe listeners for this object.
Definition: frequent_values.cc:289
gem5::compression::FrequentValues::generateCodes
void generateCodes()
End sampling phase and start the code generation.
Definition: frequent_values.cc:218
gem5::compression::FrequentValues::Phase
Phase
The phase that the compressor is at.
Definition: frequent_values.hh:112
gem5::compression::FrequentValues::FrequentValues
FrequentValues(const Params &p)
Definition: frequent_values.cc:49
eventq.hh

Generated on Tue Feb 8 2022 11:47:10 for gem5 by doxygen 1.8.17