gem5 v23.0.0.1
Loading...
Searching...
No Matches
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
46namespace gem5
47{
48
49struct FrequentValuesCompressorParams;
50
51namespace compression
52{
53
61class FrequentValues : public Base
62{
63 private:
64 class CompData;
65
67
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
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__
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
const char data[]
Associative container based on the previosuly defined Entry type Each element is indexed by a key of ...
Cycles is a wrapper class for representing cycle counts, i.e.
Definition types.hh:79
ProbeListenerArgBase is used to define the base interface to a ProbeListenerArg (i....
Definition probe.hh:211
const std::string name
Definition probe.hh:137
ProbeManager is a conduit class that lives on each SimObject, and is used to match up probe listeners...
Definition probe.hh:163
A tagged entry is an entry containing a tag.
virtual void invalidate()
Invalidate the block.
Base cache compressor interface.
Definition base.hh:65
std::vector< CompressedValue > compressedValues
The values contained in the original data, after being compressed sequentially.
FrequentValuesListener(FrequentValues &_parent, ProbeManager *pm, const std::string &name)
void notify(const DataUpdate &data_update) override
SatCounter32 counter
The ideal counter width (in bits) is determined by the maximum number of times a given value appears ...
uint64_t value
The value is stored as a 64 bit entry to accomodate for the uncompressed value.
void invalidate() override
Invalidate the block.
This compressor samples the cache for a while, trying to define the most frequently used values.
std::vector< FrequentValuesListener * > listeners
FrequentValuesCompressorParams Params
const int counterBits
Number of bits in the saturating counters.
void decompress(const CompressionData *comp_data, uint64_t *data) override
Apply the decompression process to the compressed data.
void regProbeListeners() override
Register probe listeners for this object.
void sampleValues(const std::vector< uint64_t > &data, bool is_invalidation)
Sample values from a packet, adding them to the VFT.
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.
unsigned takenSamples
Number of samples taken so far.
Phase
The phase that the compressor is at.
void probeNotify(const DataUpdate &data_update)
Process a notification event from the ProbeListener.
const unsigned numVFTEntries
Maximum number of VFT entries, and thus of codewords too.
const Tick codeGenerationTicks
Ticks needed to perform the CODE_GENERATION phase.
const bool checkSaturation
Whether an action must be performed when counters saturate.
void generateCodes()
End sampling phase and start the code generation.
const unsigned numSamples
Number of samples in the sampling phase.
encoder::Huffman indexEncoder
The encoder applied to the VFT indices.
const bool useHuffmanEncoding
Whether Huffman encoding is applied to the VFT indices.
uint64_t uncompressedValue
A pseudo value is used as the representation of uncompressed values.
AssociativeSet< VFTEntry > VFT
The Value Frequency Table, a small cache that keeps track and estimates the frequency distribution of...
EventFunctionWrapper codeGenerationEvent
Event to handle finishing code generation and starting compression.
This encoder builds a Huffman tree using the frequency of each value to be encoded.
Definition huffman.hh:55
STL vector class.
Definition stl.hh:37
void reset()
Reset the counter to its initial value.
Declares a basic cache interface BaseCache.
Definition of a basic cache compressor.
Bitfield< 0 > p
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
uint64_t Tick
Tick count type.
Definition types.hh:58
A data contents update is composed of the updated block's address, the old contents,...
Definition base.hh:124
A compressed value contains its encoding, and the compressed data itself.
uint64_t value
Original value, stored both for when the codeword marks an uncompressed entry, and to verify correctn...

Generated on Mon Jul 10 2023 15:32:04 for gem5 by doxygen 1.9.7