AbstractReplacementPolicy.hh revision 7008
12366Sktlim@umich.edu/*
22366Sktlim@umich.edu * Copyright (c) 2007 Mark D. Hill and David A. Wood
32366Sktlim@umich.edu * All rights reserved.
42366Sktlim@umich.edu *
52366Sktlim@umich.edu * Redistribution and use in source and binary forms, with or without
62366Sktlim@umich.edu * modification, are permitted provided that the following conditions are
72366Sktlim@umich.edu * met: redistributions of source code must retain the above copyright
82366Sktlim@umich.edu * notice, this list of conditions and the following disclaimer;
92366Sktlim@umich.edu * redistributions in binary form must reproduce the above copyright
102366Sktlim@umich.edu * notice, this list of conditions and the following disclaimer in the
112366Sktlim@umich.edu * documentation and/or other materials provided with the distribution;
122366Sktlim@umich.edu * neither the name of the copyright holders nor the names of its
132366Sktlim@umich.edu * contributors may be used to endorse or promote products derived from
142366Sktlim@umich.edu * this software without specific prior written permission.
152366Sktlim@umich.edu *
162366Sktlim@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
172366Sktlim@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
182366Sktlim@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
192366Sktlim@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
202366Sktlim@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
212366Sktlim@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
222366Sktlim@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
232366Sktlim@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
242366Sktlim@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
252366Sktlim@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
262366Sktlim@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272366Sktlim@umich.edu */
282366Sktlim@umich.edu
292366Sktlim@umich.edu#ifndef ABSTRACTREPLACEMENTPOLICY_H
302366Sktlim@umich.edu#define ABSTRACTREPLACEMENTPOLICY_H
312366Sktlim@umich.edu
322366Sktlim@umich.edu#include "mem/ruby/common/Global.hh"
332366Sktlim@umich.edu
342366Sktlim@umich.educlass AbstractReplacementPolicy {
352366Sktlim@umich.edu
362366Sktlim@umich.edupublic:
372366Sktlim@umich.edu
382366Sktlim@umich.edu  AbstractReplacementPolicy(Index num_sets, Index assoc);
392366Sktlim@umich.edu  virtual ~AbstractReplacementPolicy();
402366Sktlim@umich.edu
412366Sktlim@umich.edu  /* touch a block. a.k.a. update timestamp */
422366Sktlim@umich.edu  virtual void touch(Index set, Index way, Time time) = 0;
432366Sktlim@umich.edu
442366Sktlim@umich.edu  /* returns the way to replace */
452366Sktlim@umich.edu  virtual Index getVictim(Index set) const = 0;
462366Sktlim@umich.edu
472366Sktlim@umich.edu  /* get the time of the last access */
482366Sktlim@umich.edu  Time getLastAccess(Index set, Index way);
492366Sktlim@umich.edu
502366Sktlim@umich.edu protected:
512366Sktlim@umich.edu  unsigned int m_num_sets;       /** total number of sets */
522366Sktlim@umich.edu  unsigned int m_assoc;          /** set associativity */
532366Sktlim@umich.edu  Time **m_last_ref_ptr;         /** timestamp of last reference */
542366Sktlim@umich.edu};
552366Sktlim@umich.edu
562366Sktlim@umich.eduinline
572366Sktlim@umich.eduAbstractReplacementPolicy::AbstractReplacementPolicy(Index num_sets, Index assoc)
582366Sktlim@umich.edu{
592366Sktlim@umich.edu  m_num_sets = num_sets;
602366Sktlim@umich.edu  m_assoc = assoc;
612366Sktlim@umich.edu  m_last_ref_ptr = new Time*[m_num_sets];
622366Sktlim@umich.edu  for(unsigned int i = 0; i < m_num_sets; i++){
632366Sktlim@umich.edu    m_last_ref_ptr[i] = new Time[m_assoc];
642366Sktlim@umich.edu    for(unsigned int j = 0; j < m_assoc; j++){
652366Sktlim@umich.edu      m_last_ref_ptr[i][j] = 0;
662366Sktlim@umich.edu    }
672366Sktlim@umich.edu  }
682366Sktlim@umich.edu}
692366Sktlim@umich.edu
702366Sktlim@umich.eduinline
712366Sktlim@umich.eduAbstractReplacementPolicy::~AbstractReplacementPolicy()
722366Sktlim@umich.edu{
732366Sktlim@umich.edu  if(m_last_ref_ptr != NULL){
742366Sktlim@umich.edu    for(unsigned int i = 0; i < m_num_sets; i++){
752366Sktlim@umich.edu      if(m_last_ref_ptr[i] != NULL){
762366Sktlim@umich.edu        delete[] m_last_ref_ptr[i];
772366Sktlim@umich.edu      }
782366Sktlim@umich.edu    }
792366Sktlim@umich.edu    delete[] m_last_ref_ptr;
802366Sktlim@umich.edu  }
812366Sktlim@umich.edu}
822366Sktlim@umich.edu
832366Sktlim@umich.eduinline
842366Sktlim@umich.eduTime AbstractReplacementPolicy::getLastAccess(Index set, Index way)
852366Sktlim@umich.edu{
862366Sktlim@umich.edu  return m_last_ref_ptr[set][way];
872366Sktlim@umich.edu}
882366Sktlim@umich.edu
892366Sktlim@umich.edu#endif // ABSTRACTREPLACEMENTPOLICY_H
902366Sktlim@umich.edu