mem-cache: Add an extra decomp lat to multi compressor
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Wed, 10 Jun 2020 15:20:59 +0000 (17:20 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Mon, 31 Aug 2020 17:45:43 +0000 (17:45 +0000)
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>
src/mem/cache/compressors/Compressors.py
src/mem/cache/compressors/multi.cc
src/mem/cache/compressors/multi.hh

index 45effe905c387579dfc55a4ceaf1591ae1d058e2..01cb619752e703c1710abef95a77fec596bdf576 100644 (file)
@@ -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'
index bb98dcd54a690da7a54ef10d04e1d5511d88dc08..b740a956e5e15eaf392866a23ab9757cce844b67 100644 (file)
@@ -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++) {
index 868682feb26da82ac5f212a0993de5aba9a1e692..fe952d5226c82812e699e3ebc756290c1b57b55e 100644 (file)
@@ -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;