Daniel Carvalho has submitted this change and it was merged. (
https://gem5-review.googlesource.com/c/public/gem5/+/11102 )
Change subject: mem-cache: Add compression data to CompressionBlk
......................................................................
mem-cache: Add compression data to CompressionBlk
Add a compression bit, decompression latency and compressed
block size and their respective getters and setters.
Change-Id: Ia9d8656552d60e8d4e85fe5379dd75fc5adb0abe
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/11102
Tested-by: kokoro <[email protected]>
Maintainer: Nikos Nikoleris <[email protected]>
Reviewed-by: Nikos Nikoleris <[email protected]>
---
M src/mem/cache/cache_blk.hh
M src/mem/cache/tags/super_blk.cc
M src/mem/cache/tags/super_blk.hh
3 files changed, 138 insertions(+), 1 deletion(-)
Approvals:
Nikos Nikoleris: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass
diff --git a/src/mem/cache/cache_blk.hh b/src/mem/cache/cache_blk.hh
index 611ce44..ddcf3ec 100644
--- a/src/mem/cache/cache_blk.hh
+++ b/src/mem/cache/cache_blk.hh
@@ -76,6 +76,8 @@
BlkHWPrefetched = 0x20,
/** block holds data from the secure memory space */
BlkSecure = 0x40,
+ /** block holds compressed data */
+ BlkCompressed = 0x80
};
/**
diff --git a/src/mem/cache/tags/super_blk.cc
b/src/mem/cache/tags/super_blk.cc
index 3e88356..530a2c0 100644
--- a/src/mem/cache/tags/super_blk.cc
+++ b/src/mem/cache/tags/super_blk.cc
@@ -39,6 +39,69 @@
#include "base/logging.hh"
CompressionBlk::CompressionBlk()
- : SectorSubBlk()
+ : SectorSubBlk(), _size(0), _decompressionLatency(0)
{
}
+
+bool
+CompressionBlk::isCompressed() const
+{
+ return (status & BlkCompressed) != 0;
+}
+
+void
+CompressionBlk::setCompressed()
+{
+ status |= BlkCompressed;
+}
+
+void
+CompressionBlk::setUncompressed()
+{
+ status &= ~BlkCompressed;
+}
+
+std::size_t
+CompressionBlk::getSizeBits() const
+{
+ return _size;
+}
+
+void
+CompressionBlk::setSizeBits(const std::size_t size)
+{
+ _size = size;
+}
+
+Cycles
+CompressionBlk::getDecompressionLatency() const
+{
+ return _decompressionLatency;
+}
+
+void
+CompressionBlk::setDecompressionLatency(const Cycles lat)
+{
+ _decompressionLatency = lat;
+}
+
+std::string
+CompressionBlk::print() const
+{
+ return csprintf("%s compressed: %d size: %llu decompression
latency: %d",
+ SectorSubBlk::print(), isCompressed(), getSizeBits(),
+ getDecompressionLatency());
+}
+
+bool
+SuperBlk::isCompressed() const
+{
+ for (const auto& blk : blks) {
+ if (blk->isValid()) {
+ return static_cast<CompressionBlk*>(blk)->isCompressed();
+ }
+ }
+
+ // An invalid block is seen as compressed
+ return true;
+}
diff --git a/src/mem/cache/tags/super_blk.hh
b/src/mem/cache/tags/super_blk.hh
index 45c7f1a..bf35c69 100644
--- a/src/mem/cache/tags/super_blk.hh
+++ b/src/mem/cache/tags/super_blk.hh
@@ -49,11 +49,75 @@
*/
class CompressionBlk : public SectorSubBlk
{
+ private:
+ /**
+ * Set size, in bits, of this compressed block's data.
+ */
+ std::size_t _size;
+
+ /**
+ * Number of cycles needed to decompress this block. We store it to
avoid
+ * doing decompressions.
+ */
+ Cycles _decompressionLatency;
+
public:
CompressionBlk();
CompressionBlk(const CompressionBlk&) = delete;
CompressionBlk& operator=(const CompressionBlk&) = delete;
~CompressionBlk() {};
+
+ /**
+ * Check if this block holds compressed data.
+ *
+ * @return True if the block holds compressed data.
+ */
+ bool isCompressed() const;
+
+ /**
+ * Set compression bit.
+ */
+ void setCompressed();
+
+ /**
+ * Clear compression bit.
+ */
+ void setUncompressed();
+
+ /*
+ * Get size, in bits, of this compressed block's data.
+ *
+ * @return The compressed size.
+ */
+ std::size_t getSizeBits() const;
+
+ /**
+ * Set size, in bits, of this compressed block's data.
+ *
+ * @param The compressed size.
+ */
+ void setSizeBits(const std::size_t size);
+
+ /**
+ * Get number of cycles needed to decompress this block.
+ *
+ * @return Decompression latency.
+ */
+ Cycles getDecompressionLatency() const;
+
+ /**
+ * Set number of cycles needed to decompress this block.
+ *
+ * @param Decompression latency.
+ */
+ void setDecompressionLatency(const Cycles lat);
+
+ /**
+ * Pretty-print sector offset and other CacheBlk information.
+ *
+ * @return string with basic state information
+ */
+ std::string print() const override;
};
/**
@@ -67,6 +131,14 @@
SuperBlk(const SuperBlk&) = delete;
SuperBlk& operator=(const SuperBlk&) = delete;
~SuperBlk() {};
+
+ /**
+ * Returns whether the superblock contains compressed blocks or not. By
+ * default, if not blocks are valid, the superblock is compressible.
+ *
+ * @return The compressibility state of the superblock.
+ */
+ bool isCompressed() const;
};
#endif //__MEM_CACHE_TAGS_SUPER_BLK_HH__
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/11102
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ia9d8656552d60e8d4e85fe5379dd75fc5adb0abe
Gerrit-Change-Number: 11102
Gerrit-PatchSet: 20
Gerrit-Owner: Daniel Carvalho <[email protected]>
Gerrit-Reviewer: Daniel Carvalho <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Nikos Nikoleris <[email protected]>
Gerrit-Reviewer: kokoro <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev