mem-cache: Add an extra decomp lat to multi compressor
There is extra hardware required when dealing with multi compressors. As such, add a parameter to allowing increasing their decompression latency to account for any extra delay. Change-Id: I153e4c5ab6927ac092e2ebd767fe88974597bb20 Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/33382 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Daniel Carvalho
parent
99a8c5a27a
commit
58c7fc72d3
2
src/mem/cache/compressors/Compressors.py
vendored
2
src/mem/cache/compressors/Compressors.py
vendored
@@ -116,6 +116,8 @@ class MultiCompressor(BaseCacheCompressor):
|
||||
encoding_in_tags = Param.Bool(False, "If set the bits to inform which "
|
||||
"sub-compressor compressed some data are added to its corresponding "
|
||||
"tag entry.")
|
||||
extra_decomp_lat = Param.Unsigned(0, "Extra latency to be added to the "
|
||||
"sub-compressor's decompression latency")
|
||||
|
||||
class PerfectCompressor(BaseCacheCompressor):
|
||||
type = 'PerfectCompressor'
|
||||
|
||||
3
src/mem/cache/compressors/multi.cc
vendored
3
src/mem/cache/compressors/multi.cc
vendored
@@ -61,6 +61,7 @@ Multi::Multi(const Params *p)
|
||||
: Base(p), compressors(p->compressors),
|
||||
numEncodingBits(p->encoding_in_tags ? 0 :
|
||||
std::log2(alignToPowerOfTwo(compressors.size()))),
|
||||
extraDecompressionLatency(p->extra_decomp_lat),
|
||||
multiStats(stats, *this)
|
||||
{
|
||||
fatal_if(compressors.size() == 0, "There must be at least one compressor");
|
||||
@@ -145,7 +146,7 @@ Multi::compress(const std::vector<Chunk>& chunks, Cycles& comp_lat,
|
||||
DPRINTF(CacheComp, "Best compressor: %d\n", best_index);
|
||||
|
||||
// Set decompression latency of the best compressor
|
||||
decomp_lat = results.top()->decompLat;
|
||||
decomp_lat = results.top()->decompLat + extraDecompressionLatency;
|
||||
|
||||
// Update compressor ranking stats
|
||||
for (int rank = 0; rank < compressors.size(); rank++) {
|
||||
|
||||
7
src/mem/cache/compressors/multi.hh
vendored
7
src/mem/cache/compressors/multi.hh
vendored
@@ -75,6 +75,13 @@ class Multi : public Base
|
||||
*/
|
||||
const std::size_t numEncodingBits;
|
||||
|
||||
/**
|
||||
* Extra decompression latency to be added to the sub-compressor's
|
||||
* decompression latency. This can different from zero due to decoding,
|
||||
* shifting, or packaging, for example.
|
||||
*/
|
||||
const Cycles extraDecompressionLatency;
|
||||
|
||||
struct MultiStats : public Stats::Group
|
||||
{
|
||||
const Multi& compressor;
|
||||
|
||||
Reference in New Issue
Block a user