mem-cache: Make cache warmup percentage a parameter.

The warmupPercentage is the percentage of different tags (based on the
cache size) that need to be touched in order to warm up the cache.
If Warmup failed (i.e., not enough tags were touched), warmup_cycle = 0.

The warmup is not being taken into account to calculate the stats (i.e.,
stats acquisition starts before cache is warmed up). Maybe in the future
this functionality should be added.

Change-Id: I2b93a99c19fddb99a4c60e6d4293fa355744d05e
Reviewed-on: https://gem5-review.googlesource.com/8061
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
Daniel R. Carvalho
2018-02-07 14:49:55 +01:00
committed by Daniel Carvalho
parent 718b53dc44
commit 5a3b9ca583
6 changed files with 12 additions and 6 deletions

View File

@@ -57,6 +57,9 @@ class BaseCache(MemObject):
data_latency = Param.Cycles("Data access latency")
response_latency = Param.Cycles("Latency for the return path on a miss");
warmup_percentage = Param.Percent(0,
"Percentage of tags to be touched to warm up the cache")
max_miss_count = Param.Counter(0,
"Number of misses to handle before calling exit")

View File

@@ -57,6 +57,10 @@ class BaseTags(ClockedObject):
data_latency = Param.Cycles(Parent.data_latency,
"The data access latency for this cache")
# Get the warmup percentage from the parent (cache)
warmup_percentage = Param.Percent(Parent.warmup_percentage,
"Percentage of tags to be touched to warm up the cache")
sequential_access = Param.Bool(Parent.sequential_access,
"Whether to access tags and data sequentially")

View File

@@ -61,7 +61,8 @@ BaseTags::BaseTags(const Params *p)
accessLatency(p->sequential_access ?
p->tag_latency + p->data_latency :
std::max(p->tag_latency, p->data_latency)),
cache(nullptr), warmupBound(0),
cache(nullptr),
warmupBound((p->warmup_percentage/100.0) * (p->size / p->block_size)),
warmedUp(false), numBlocks(0)
{
}

View File

@@ -86,7 +86,7 @@ class BaseTags : public ClockedObject
* The number of tags that need to be touched to meet the warmup
* percentage.
*/
int warmupBound;
const unsigned warmupBound;
/** Marked true when the cache is warmed up. */
bool warmedUp;
@@ -95,6 +95,7 @@ class BaseTags : public ClockedObject
// Statistics
/**
* TODO: It would be good if these stats were acquired after warmup.
* @addtogroup CacheStatistics
* @{
*/
@@ -120,7 +121,7 @@ class BaseTags : public ClockedObject
*/
Stats::Formula avgRefs;
/** The cycle that the warmup percentage was hit. */
/** The cycle that the warmup percentage was hit. 0 on failure. */
Stats::Scalar warmupCycle;
/** Average occupancy of each requestor using the cache */

View File

@@ -73,8 +73,6 @@ BaseSetAssoc::BaseSetAssoc(const Params *p)
setShift = floorLog2(blkSize);
setMask = numSets - 1;
tagShift = setShift + floorLog2(numSets);
/** @todo Make warmup percentage a parameter. */
warmupBound = numSets * assoc;
sets = new SetType[numSets];
blks = new BlkType[numSets * assoc];

View File

@@ -73,7 +73,6 @@ FALRU::FALRU(const Params *p)
cacheMask = 0;
}
warmupBound = size/blkSize;
numBlocks = size/blkSize;
blks = new FALRUBlk[numBlocks];