AbstractReplacementPolicy.hh revision 6145
16691Stjones1@inf.ed.ac.uk 26691Stjones1@inf.ed.ac.uk#ifndef ABSTRACTREPLACEMENTPOLICY_H 36691Stjones1@inf.ed.ac.uk#define ABSTRACTREPLACEMENTPOLICY_H 46691Stjones1@inf.ed.ac.uk 56691Stjones1@inf.ed.ac.uk#include "Global.hh" 66691Stjones1@inf.ed.ac.uk 76691Stjones1@inf.ed.ac.ukclass AbstractReplacementPolicy { 86691Stjones1@inf.ed.ac.uk 96691Stjones1@inf.ed.ac.ukpublic: 106691Stjones1@inf.ed.ac.uk 116691Stjones1@inf.ed.ac.uk AbstractReplacementPolicy(Index num_sets, Index assoc); 126691Stjones1@inf.ed.ac.uk virtual ~AbstractReplacementPolicy(); 136691Stjones1@inf.ed.ac.uk 146691Stjones1@inf.ed.ac.uk /* touch a block. a.k.a. update timestamp */ 156691Stjones1@inf.ed.ac.uk virtual void touch(Index set, Index way, Time time) = 0; 166691Stjones1@inf.ed.ac.uk 176691Stjones1@inf.ed.ac.uk /* returns the way to replace */ 186691Stjones1@inf.ed.ac.uk virtual Index getVictim(Index set) const = 0; 196691Stjones1@inf.ed.ac.uk 206691Stjones1@inf.ed.ac.uk /* get the time of the last access */ 216691Stjones1@inf.ed.ac.uk Time getLastAccess(Index set, Index way); 226691Stjones1@inf.ed.ac.uk 236691Stjones1@inf.ed.ac.uk protected: 246691Stjones1@inf.ed.ac.uk unsigned int m_num_sets; /** total number of sets */ 256691Stjones1@inf.ed.ac.uk unsigned int m_assoc; /** set associativity */ 266691Stjones1@inf.ed.ac.uk Time **m_last_ref_ptr; /** timestamp of last reference */ 276691Stjones1@inf.ed.ac.uk}; 286691Stjones1@inf.ed.ac.uk 296691Stjones1@inf.ed.ac.ukinline 306691Stjones1@inf.ed.ac.ukAbstractReplacementPolicy::AbstractReplacementPolicy(Index num_sets, Index assoc) 316691Stjones1@inf.ed.ac.uk{ 3211793Sbrandon.potter@amd.com m_num_sets = num_sets; 336691Stjones1@inf.ed.ac.uk m_assoc = assoc; 347680Sgblack@eecs.umich.edu m_last_ref_ptr = new Time*[m_num_sets]; 356691Stjones1@inf.ed.ac.uk for(unsigned int i = 0; i < m_num_sets; i++){ 366691Stjones1@inf.ed.ac.uk m_last_ref_ptr[i] = new Time[m_assoc]; 376691Stjones1@inf.ed.ac.uk for(unsigned int j = 0; j < m_assoc; j++){ 386691Stjones1@inf.ed.ac.uk m_last_ref_ptr[i][j] = 0; 396691Stjones1@inf.ed.ac.uk } 406691Stjones1@inf.ed.ac.uk } 416691Stjones1@inf.ed.ac.uk} 426691Stjones1@inf.ed.ac.uk 436691Stjones1@inf.ed.ac.ukinline 446691Stjones1@inf.ed.ac.ukAbstractReplacementPolicy::~AbstractReplacementPolicy() 456691Stjones1@inf.ed.ac.uk{ 466691Stjones1@inf.ed.ac.uk if(m_last_ref_ptr != NULL){ 476691Stjones1@inf.ed.ac.uk for(unsigned int i = 0; i < m_num_sets; i++){ 486691Stjones1@inf.ed.ac.uk if(m_last_ref_ptr[i] != NULL){ 496691Stjones1@inf.ed.ac.uk delete[] m_last_ref_ptr[i]; 506691Stjones1@inf.ed.ac.uk } 516691Stjones1@inf.ed.ac.uk } 526691Stjones1@inf.ed.ac.uk delete[] m_last_ref_ptr; 536691Stjones1@inf.ed.ac.uk } 546691Stjones1@inf.ed.ac.uk} 556691Stjones1@inf.ed.ac.uk 567720Sgblack@eecs.umich.eduinline 577720Sgblack@eecs.umich.eduTime AbstractReplacementPolicy::getLastAccess(Index set, Index way) 586691Stjones1@inf.ed.ac.uk{ 597720Sgblack@eecs.umich.edu return m_last_ref_ptr[set][way]; 606691Stjones1@inf.ed.ac.uk} 616691Stjones1@inf.ed.ac.uk 626691Stjones1@inf.ed.ac.uk#endif // ABSTRACTREPLACEMENTPOLICY_H 636691Stjones1@inf.ed.ac.uk