Daniel Carvalho has uploaded this change for review. ( https://gem5-review.googlesource.com/11198

Change subject: mem-cache: Data pointer in findVictim and insertBlock
......................................................................

mem-cache: Data pointer in findVictim and insertBlock

Add data pointer to findVictim and insertBlock. In findVictim
it will be used to know whether data can be co-allocated or not.
In insertBlock it will be used to insert compressed data.

Change-Id: Id07f79763687b29f75d707c080fa9bd978a408aa
---
M src/mem/cache/base.cc
M src/mem/cache/tags/base.hh
M src/mem/cache/tags/base_set_assoc.hh
M src/mem/cache/tags/compressed_tags.cc
M src/mem/cache/tags/compressed_tags.hh
M src/mem/cache/tags/fa_lru.cc
M src/mem/cache/tags/fa_lru.hh
M src/mem/cache/tags/sector_tags.cc
M src/mem/cache/tags/sector_tags.hh
9 files changed, 42 insertions(+), 20 deletions(-)



diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc
index 1144cba..e76621d 100644
--- a/src/mem/cache/base.cc
+++ b/src/mem/cache/base.cc
@@ -1223,6 +1223,9 @@
     // Get secure bit
     const bool is_secure = pkt->isSecure();

+    // Get packet's data pointer
+    const uint64_t* data_ptr = pkt->getConstPtr<uint64_t>();
+
     // Allocation latency
     // @todo When evicting compressed blocks they must be decompressed
     //       first, so the latency to do so must be taken into account.
@@ -1233,7 +1236,8 @@

     // Find replacement victim
     std::vector<CacheBlk*> evict_blks;
-    CacheBlk *victim = tags->findVictim(addr, is_secure, lat, evict_blks);
+    CacheBlk *victim = tags->findVictim(addr, is_secure, data_ptr, lat,
+                                        evict_blks);

     // It is valid to return nullptr if there is no victim
     if (!victim)
@@ -1283,7 +1287,7 @@

     // Insert new block at victimized entry
     tags->insertBlock(addr, is_secure, pkt->req->masterId(),
-                      pkt->req->taskId(), victim);
+                      pkt->req->taskId(), data_ptr, victim);

     return victim;
 }
diff --git a/src/mem/cache/tags/base.hh b/src/mem/cache/tags/base.hh
index 6ce9e60..fe0e094 100644
--- a/src/mem/cache/tags/base.hh
+++ b/src/mem/cache/tags/base.hh
@@ -280,11 +280,13 @@
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param data_ptr Pointer to the block's data.
      * @param lat The access latency (i.e., decompression).
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
- virtual CacheBlk* findVictim(Addr addr, const bool is_secure, Cycles &lat,
+    virtual CacheBlk* findVictim(Addr addr, const bool is_secure,
+                                 const uint64_t* data_ptr, Cycles& lat,
std::vector<CacheBlk*>& evict_blks) const = 0;

virtual CacheBlk* accessBlock(Addr addr, bool is_secure, Cycles &lat) = 0;
@@ -301,11 +303,12 @@
      * @param is_secure Whether the block is in secure space or not.
      * @param src_master_ID The source requestor ID.
      * @param task_ID The new task ID.
+     * @param data_ptr Pointer to the block's data.
      * @param blk The block to update.
      */
     virtual void insertBlock(const Addr addr, const bool is_secure,
const int src_master_ID, const uint32_t task_ID,
-                             CacheBlk *blk) = 0;
+                             const uint64_t* data_ptr, CacheBlk *blk) = 0;

     /**
      * Regenerate the block address.
diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh
index 3029919..c383e75 100644
--- a/src/mem/cache/tags/base_set_assoc.hh
+++ b/src/mem/cache/tags/base_set_assoc.hh
@@ -204,11 +204,13 @@
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param data_ptr Pointer to the block's data.
      * @param lat The access latency (i.e., decompression).
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
-    CacheBlk* findVictim(Addr addr, const bool is_secure, Cycles& lat,
+    CacheBlk* findVictim(Addr addr, const bool is_secure,
+                         const uint64_t* data_ptr, Cycles& lat,
                          std::vector<CacheBlk*>& evict_blks) const override
     {
         // Get possible locations for the victim block
@@ -252,11 +254,12 @@
      * @param is_secure Whether the block is in secure space or not.
      * @param src_master_ID The source requestor ID.
      * @param task_ID The new task ID.
+     * @param data_ptr Pointer to the block's data.
      * @param blk The block to update.
      */
     void insertBlock(const Addr addr, const bool is_secure,
                      const int src_master_ID, const uint32_t task_ID,
-                     CacheBlk *blk) override
+                     const uint64_t* data_ptr, CacheBlk *blk) override
     {
         // Make sure we are not overwriting a valid block
         assert(!blk->isValid());
diff --git a/src/mem/cache/tags/compressed_tags.cc b/src/mem/cache/tags/compressed_tags.cc
index 4ff7dee..e99a4c8 100644
--- a/src/mem/cache/tags/compressed_tags.cc
+++ b/src/mem/cache/tags/compressed_tags.cc
@@ -225,7 +225,8 @@
 }

 CacheBlk*
-CompressedTags::findVictim(Addr addr, const bool is_secure, Cycles& lat,
+CompressedTags::findVictim(Addr addr, const bool is_secure,
+                           const uint64_t* data_ptr, Cycles& lat,
                            std::vector<CacheBlk*>& evict_blks) const
 {
     // Clear latency
@@ -287,7 +288,7 @@
 void
 CompressedTags::insertBlock(const Addr addr, const bool is_secure,
const int src_master_ID, const uint32_t task_ID,
-                            CacheBlk *blk)
+                            const uint64_t* data_ptr, CacheBlk *blk)
 {
     // Make sure we are not overwriting a valid block
     assert(!blk->isValid());
diff --git a/src/mem/cache/tags/compressed_tags.hh b/src/mem/cache/tags/compressed_tags.hh
index ba08ca1..d4915f1 100644
--- a/src/mem/cache/tags/compressed_tags.hh
+++ b/src/mem/cache/tags/compressed_tags.hh
@@ -175,15 +175,18 @@
     CacheBlk* accessBlock(Addr addr, bool is_secure, Cycles &lat) override;

     /**
-     * Find replacement victim based on address.
+     * Find replacement victim based on address. The data_ptr is used to
+     * determine if a block can be co-allocated.
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param data_ptr Pointer to the block's data.
      * @param lat The access latency (i.e., decompression).
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
-    CacheBlk* findVictim(Addr addr, const bool is_secure, Cycles& lat,
+    CacheBlk* findVictim(Addr addr, const bool is_secure,
+                         const uint64_t* data_ptr, Cycles& lat,
std::vector<CacheBlk*>& evict_blks) const override;

     /**
@@ -193,11 +196,12 @@
      * @param is_secure Whether the block is in secure space or not.
      * @param src_master_ID The source requestor ID.
      * @param task_ID The new task ID.
+     * @param data_ptr Pointer to the block's data.
      * @param blk The block to update.
      */
     void insertBlock(const Addr addr, const bool is_secure,
                      const int src_master_ID, const uint32_t task_ID,
-                     CacheBlk *blk) override;
+                     const uint64_t* data_ptr, CacheBlk *blk) override;

     /**
      * Generate the superblock tag from the given address.
diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc
index 934876e..d200ca6 100644
--- a/src/mem/cache/tags/fa_lru.cc
+++ b/src/mem/cache/tags/fa_lru.cc
@@ -195,8 +195,8 @@
 }

 CacheBlk*
-FALRU::findVictim(Addr addr, const bool is_secure, Cycles& lat,
-                  std::vector<CacheBlk*>& evict_blks) const
+FALRU::findVictim(Addr addr, const bool is_secure, const uint64_t* data_ptr,
+                  Cycles& lat, std::vector<CacheBlk*>& evict_blks) const
 {
     // The victim is always stored on the tail for the FALRU
     FALRUBlk* victim = tail;
@@ -213,7 +213,7 @@
 void
 FALRU::insertBlock(const Addr addr, const bool is_secure,
                    const int src_master_ID, const uint32_t task_ID,
-                   CacheBlk *blk)
+                   const uint64_t* data_ptr, CacheBlk *blk)
 {
     FALRUBlk* falruBlk = static_cast<FALRUBlk*>(blk);

diff --git a/src/mem/cache/tags/fa_lru.hh b/src/mem/cache/tags/fa_lru.hh
index 252fa79..9f249ff 100644
--- a/src/mem/cache/tags/fa_lru.hh
+++ b/src/mem/cache/tags/fa_lru.hh
@@ -201,11 +201,13 @@
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param data_ptr Pointer to the block's data.
      * @param lat The access latency (i.e., decompression).
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
-    CacheBlk* findVictim(Addr addr, const bool is_secure, Cycles &lat,
+    CacheBlk* findVictim(Addr addr, const bool is_secure,
+                         const uint64_t* data_ptr, Cycles& lat,
std::vector<CacheBlk*>& evict_blks) const override;

     /**
@@ -215,11 +217,12 @@
      * @param is_secure Whether the block is in secure space or not.
      * @param src_master_ID The source requestor ID.
      * @param task_ID The new task ID.
+     * @param data_ptr Pointer to the block's data.
      * @param blk The block to update.
      */
     void insertBlock(const Addr addr, const bool is_secure,
                      const int src_master_ID, const uint32_t task_ID,
-                     CacheBlk *blk) override;
+                     const uint64_t* data_ptr, CacheBlk *blk) override;

     /**
* Generate the tag from the addres. For fully associative this is just the diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc
index 61f689a..230a701 100644
--- a/src/mem/cache/tags/sector_tags.cc
+++ b/src/mem/cache/tags/sector_tags.cc
@@ -196,7 +196,7 @@
 void
 SectorTags::insertBlock(const Addr addr, const bool is_secure,
                         const int src_master_ID, const uint32_t task_ID,
-                        CacheBlk *blk)
+                        const uint64_t* data_ptr, CacheBlk *blk)
 {
     // Make sure we are not overwriting a valid block
     assert(!blk->isValid());
@@ -259,7 +259,8 @@
 }

 CacheBlk*
-SectorTags::findVictim(Addr addr, const bool is_secure, Cycles& lat,
+SectorTags::findVictim(Addr addr, const bool is_secure,
+                       const uint64_t* data_ptr, Cycles& lat,
                        std::vector<CacheBlk*>& evict_blks) const
 {
     // Get all possible locations of this sector
diff --git a/src/mem/cache/tags/sector_tags.hh b/src/mem/cache/tags/sector_tags.hh
index 1611ca0..f415ff1 100644
--- a/src/mem/cache/tags/sector_tags.hh
+++ b/src/mem/cache/tags/sector_tags.hh
@@ -153,11 +153,12 @@
      * @param is_secure Whether the block is in secure space or not.
      * @param src_master_ID The source requestor ID.
      * @param task_ID The new task ID.
+     * @param data_ptr Pointer to the block's data.
      * @param blk The block to update.
      */
     void insertBlock(const Addr addr, const bool is_secure,
                      const int src_master_ID, const uint32_t task_ID,
-                     CacheBlk *blk) override;
+                     const uint64_t* data_ptr, CacheBlk *blk) override;

     /**
* Finds the given address in the cache, do not update replacement data.
@@ -183,11 +184,13 @@
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param data_ptr Pointer to the block's data.
      * @param lat The access latency (i.e., decompression).
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
-    CacheBlk* findVictim(Addr addr, const bool is_secure, Cycles& lat,
+    CacheBlk* findVictim(Addr addr, const bool is_secure,
+                         const uint64_t* data_ptr, Cycles& lat,
std::vector<CacheBlk*>& evict_blks) const override;

     /**

--
To view, visit https://gem5-review.googlesource.com/11198
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: Id07f79763687b29f75d707c080fa9bd978a408aa
Gerrit-Change-Number: 11198
Gerrit-PatchSet: 1
Gerrit-Owner: Daniel Carvalho <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to