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

Change subject: mem-cache: Vectorize C arrays in BaseSetAssoc.
......................................................................

mem-cache: Vectorize C arrays in BaseSetAssoc.

Transform BaseSetAssoc's arrays into C++ vectors to avoid unnecessary
resource management.

Change-Id: I656f42f29e5f9589eba491b410ca1df5a64f2f34
---
M src/mem/cache/tags/base.cc
M src/mem/cache/tags/base_set_assoc.cc
M src/mem/cache/tags/base_set_assoc.hh
3 files changed, 15 insertions(+), 23 deletions(-)



diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc
index aa8a34f..8b52b74 100644
--- a/src/mem/cache/tags/base.cc
+++ b/src/mem/cache/tags/base.cc
@@ -63,7 +63,7 @@
                     std::max(p->tag_latency, p->data_latency)),
       cache(nullptr),
warmupBound((p->warmup_percentage/100.0) * (p->size / p->block_size)),
-      warmedUp(false), numBlocks(0)
+      warmedUp(false), numBlocks(p->size / p->block_size)
 {
 }

diff --git a/src/mem/cache/tags/base_set_assoc.cc b/src/mem/cache/tags/base_set_assoc.cc
index c398229..98c6f65 100644
--- a/src/mem/cache/tags/base_set_assoc.cc
+++ b/src/mem/cache/tags/base_set_assoc.cc
@@ -56,8 +56,11 @@

 BaseSetAssoc::BaseSetAssoc(const Params *p)
     :BaseTags(p), assoc(p->assoc), allocAssoc(p->assoc),
+     blks(p->size / p->block_size),
+     dataBlks(p->size), // Allocate data storage in one big chunk
      numSets(p->size / (p->block_size * p->assoc)),
-     sequentialAccess(p->sequential_access)
+     sequentialAccess(p->sequential_access),
+     sets(p->size / (p->block_size * p->assoc))
 {
     // Check parameters
     if (blkSize < 4 || !isPowerOf2(blkSize)) {
@@ -74,12 +77,6 @@
     setMask = numSets - 1;
     tagShift = setShift + floorLog2(numSets);

-    sets = new SetType[numSets];
-    blks = new BlkType[numSets * assoc];
-    // allocate data storage in one big chunk
-    numBlocks = numSets * assoc;
-    dataBlks = new uint8_t[numBlocks * blkSize];
-
     unsigned blkIndex = 0;       // index into blks array
     for (unsigned i = 0; i < numSets; ++i) {
         sets[i].assoc = assoc;
@@ -110,13 +107,6 @@
     }
 }

-BaseSetAssoc::~BaseSetAssoc()
-{
-    delete [] dataBlks;
-    delete [] blks;
-    delete [] sets;
-}
-
 CacheBlk*
 BaseSetAssoc::findBlock(Addr addr, bool is_secure) const
 {
diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh
index ef4c68b..65ba9dc 100644
--- a/src/mem/cache/tags/base_set_assoc.hh
+++ b/src/mem/cache/tags/base_set_assoc.hh
@@ -50,7 +50,7 @@

 #include <cassert>
 #include <cstring>
-#include <list>
+#include <vector>

 #include "mem/cache/base.hh"
 #include "mem/cache/blk.hh"
@@ -87,18 +87,20 @@
     const unsigned assoc;
     /** The allocatable associativity of the cache (alloc mask). */
     unsigned allocAssoc;
+
+    /** The cache blocks. */
+    std::vector<BlkType> blks;
+    /** The data blocks, 1 per cache block. */
+    std::vector<uint8_t> dataBlks;
+
     /** The number of sets in the cache. */
     const unsigned numSets;
+
     /** Whether tags and data are accessed sequentially. */
     const bool sequentialAccess;

     /** The cache sets. */
-    SetType *sets;
-
-    /** The cache blocks. */
-    BlkType *blks;
-    /** The data blocks, 1 per cache block. */
-    uint8_t *dataBlks;
+    std::vector<SetType> sets;

     /** The amount to shift the address to get the set. */
     int setShift;
@@ -120,7 +122,7 @@
     /**
      * Destructor
      */
-    virtual ~BaseSetAssoc();
+    virtual ~BaseSetAssoc() {};

     /**
      * Find the cache block given set and way

--
To view, visit https://gem5-review.googlesource.com/8621
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: I656f42f29e5f9589eba491b410ca1df5a64f2f34
Gerrit-Change-Number: 8621
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