diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2018-10-18 15:31:51 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2018-11-14 21:02:08 +0000 |
commit | c6e0d8f54f1ce90933f95a7a3a875fed53b8ee3e (patch) | |
tree | 60bb086bf5b96e5c694eb662f0e34abeae26e6ad /src/mem/cache/tags/sector_tags.cc | |
parent | ea0f654923d13a2f81fe7c22eeca4c8cffae947a (diff) | |
download | gem5-c6e0d8f54f1ce90933f95a7a3a875fed53b8ee3e.tar.xz |
mem-cache: Move access latency calculation to Cache
Access latency was not being calculated properly, as it was
always assuming that for hits reads take as long as writes,
and that parallel accesses would produce the same latency
for read and write misses.
By moving the calculation to the Cache we can use the write/
read information, reduce latency variables duplication and
remove Cache dependency from Tags.
The tag lookup latency is still calculated by the Tags.
Change-Id: I71bc68fb5c3515b372c3bf002d61b6f048a45540
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/13697
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/cache/tags/sector_tags.cc')
-rw-r--r-- | src/mem/cache/tags/sector_tags.cc | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc index 24751c97d..02649cc40 100644 --- a/src/mem/cache/tags/sector_tags.cc +++ b/src/mem/cache/tags/sector_tags.cc @@ -149,18 +149,8 @@ SectorTags::accessBlock(Addr addr, bool is_secure, Cycles &lat) dataAccesses += allocAssoc*numBlocksPerSector; } + // If a cache hit if (blk != nullptr) { - // If a cache hit - lat = accessLatency; - // Check if the block to be accessed is available. If not, - // apply the accessLatency on top of block->whenReady. - if (blk->whenReady > curTick() && - cache->ticksToCycles(blk->whenReady - curTick()) > - accessLatency) { - lat = cache->ticksToCycles(blk->whenReady - curTick()) + - accessLatency; - } - // Update number of references to accessed block blk->refCount++; @@ -171,11 +161,11 @@ SectorTags::accessBlock(Addr addr, bool is_secure, Cycles &lat) // Update replacement data of accessed block, which is shared with // the whole sector it belongs to replacementPolicy->touch(sector_blk->replacementData); - } else { - // If a cache miss - lat = lookupLatency; } + // The tag lookup latency is the same for a hit or a miss + lat = lookupLatency; + return blk; } |