base_set_assoc.cc (12727:56c23b54bcb1) | base_set_assoc.cc (12728:57bdea4f96aa) |
---|---|
1/* 2 * Copyright (c) 2012-2014 ARM Limited 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 33 unchanged lines hidden (view full) --- 42 43/** 44 * @file 45 * Definitions of a base set associative tag store. 46 */ 47 48#include "mem/cache/tags/base_set_assoc.hh" 49 | 1/* 2 * Copyright (c) 2012-2014 ARM Limited 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 33 unchanged lines hidden (view full) --- 42 43/** 44 * @file 45 * Definitions of a base set associative tag store. 46 */ 47 48#include "mem/cache/tags/base_set_assoc.hh" 49 |
50#include <cassert> | |
51#include <string> 52 53#include "base/intmath.hh" | 50#include <string> 51 52#include "base/intmath.hh" |
54#include "mem/request.hh" | |
55 56BaseSetAssoc::BaseSetAssoc(const Params *p) 57 :BaseTags(p), assoc(p->assoc), allocAssoc(p->assoc), 58 blks(p->size / p->block_size), 59 numSets(p->size / (p->block_size * p->assoc)), 60 sequentialAccess(p->sequential_access), 61 sets(p->size / (p->block_size * p->assoc)), 62 replacementPolicy(p->replacement_policy) --- 66 unchanged lines hidden (view full) --- 129} 130 131CacheBlk* 132BaseSetAssoc::findBlockBySetAndWay(int set, int way) const 133{ 134 return sets[set].blks[way]; 135} 136 | 53 54BaseSetAssoc::BaseSetAssoc(const Params *p) 55 :BaseTags(p), assoc(p->assoc), allocAssoc(p->assoc), 56 blks(p->size / p->block_size), 57 numSets(p->size / (p->block_size * p->assoc)), 58 sequentialAccess(p->sequential_access), 59 sets(p->size / (p->block_size * p->assoc)), 60 replacementPolicy(p->replacement_policy) --- 66 unchanged lines hidden (view full) --- 127} 128 129CacheBlk* 130BaseSetAssoc::findBlockBySetAndWay(int set, int way) const 131{ 132 return sets[set].blks[way]; 133} 134 |
137std::string 138BaseSetAssoc::print() const { 139 std::string cache_state; 140 for (const CacheBlk& blk : blks) { 141 if (blk.isValid()) 142 cache_state += csprintf("\tset: %d way: %d %s\n", blk.set, 143 blk.way, blk.print()); 144 } 145 if (cache_state.empty()) 146 cache_state = "no valid tags\n"; 147 return cache_state; 148} 149 150void 151BaseSetAssoc::cleanupRefs() 152{ 153 for (const CacheBlk& blk : blks) { 154 if (blk.isValid()) { 155 totalRefs += blk.refCount; 156 ++sampledRefs; 157 } 158 } 159} 160 161void 162BaseSetAssoc::computeStats() 163{ 164 for (unsigned i = 0; i < ContextSwitchTaskId::NumTaskId; ++i) { 165 occupanciesTaskId[i] = 0; 166 for (unsigned j = 0; j < 5; ++j) { 167 ageTaskId[i][j] = 0; 168 } 169 } 170 171 for (const CacheBlk& blk : blks) { 172 if (blk.isValid()) { 173 assert(blk.task_id < ContextSwitchTaskId::NumTaskId); 174 occupanciesTaskId[blk.task_id]++; 175 assert(blk.tickInserted <= curTick()); 176 Tick age = curTick() - blk.tickInserted; 177 178 int age_index; 179 if (age / SimClock::Int::us < 10) { // <10us 180 age_index = 0; 181 } else if (age / SimClock::Int::us < 100) { // <100us 182 age_index = 1; 183 } else if (age / SimClock::Int::ms < 1) { // <1ms 184 age_index = 2; 185 } else if (age / SimClock::Int::ms < 10) { // <10ms 186 age_index = 3; 187 } else 188 age_index = 4; // >10ms 189 190 ageTaskId[blk.task_id][age_index]++; 191 } 192 } 193} 194 | |
195BaseSetAssoc * 196BaseSetAssocParams::create() 197{ 198 return new BaseSetAssoc(this); 199} | 135BaseSetAssoc * 136BaseSetAssocParams::create() 137{ 138 return new BaseSetAssoc(this); 139} |