mem-cache: Vectorize C arrays in BaseSetAssoc.

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

Change-Id: I656f42f29e5f9589eba491b410ca1df5a64f2f34
Reviewed-on: https://gem5-review.googlesource.com/8621
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
Daniel R. Carvalho
2018-02-26 15:22:33 +01:00
committed by Daniel Carvalho
parent f4d83eaf52
commit 3c076e4d69
3 changed files with 16 additions and 23 deletions

View File

@@ -63,7 +63,7 @@ BaseTags::BaseTags(const Params *p)
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)
{
}

View File

@@ -56,8 +56,11 @@ using namespace std;
BaseSetAssoc::BaseSetAssoc(const Params *p)
:BaseTags(p), assoc(p->assoc), allocAssoc(p->assoc),
blks(p->size / p->block_size),
dataBlks(new uint8_t[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 @@ BaseSetAssoc::BaseSetAssoc(const Params *p)
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(const Params *p)
}
}
BaseSetAssoc::~BaseSetAssoc()
{
delete [] dataBlks;
delete [] blks;
delete [] sets;
}
CacheBlk*
BaseSetAssoc::findBlock(Addr addr, bool is_secure) const
{

View File

@@ -50,7 +50,8 @@
#include <cassert>
#include <cstring>
#include <list>
#include <memory>
#include <vector>
#include "mem/cache/base.hh"
#include "mem/cache/blk.hh"
@@ -87,18 +88,20 @@ class BaseSetAssoc : public BaseTags
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::unique_ptr<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 +123,7 @@ public:
/**
* Destructor
*/
virtual ~BaseSetAssoc();
virtual ~BaseSetAssoc() {};
/**
* Find the cache block given set and way