base.hh revision 2810
16657Snate@binkert.org/* 26657Snate@binkert.org * Copyright (c) 2005 The Regents of The University of Michigan 36657Snate@binkert.org * All rights reserved. 46657Snate@binkert.org * 56657Snate@binkert.org * Redistribution and use in source and binary forms, with or without 66657Snate@binkert.org * modification, are permitted provided that the following conditions are 76657Snate@binkert.org * met: redistributions of source code must retain the above copyright 86657Snate@binkert.org * notice, this list of conditions and the following disclaimer; 96657Snate@binkert.org * redistributions in binary form must reproduce the above copyright 106657Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 116657Snate@binkert.org * documentation and/or other materials provided with the distribution; 126657Snate@binkert.org * neither the name of the copyright holders nor the names of its 136657Snate@binkert.org * contributors may be used to endorse or promote products derived from 146657Snate@binkert.org * this software without specific prior written permission. 156657Snate@binkert.org * 166657Snate@binkert.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 176657Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 186657Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 196657Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 206657Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 216657Snate@binkert.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 226657Snate@binkert.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 236657Snate@binkert.org * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 246657Snate@binkert.org * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 256657Snate@binkert.org * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 266657Snate@binkert.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276657Snate@binkert.org * 286999Snate@binkert.org * Authors: Ron Dreslinski 296657Snate@binkert.org */ 306657Snate@binkert.org 316657Snate@binkert.org/** 326657Snate@binkert.org * @file 336657Snate@binkert.org * Miss and writeback queue declarations. 346657Snate@binkert.org */ 356657Snate@binkert.org 366657Snate@binkert.org#ifndef __MEM_CACHE_PREFETCH_BASE_PREFETCHER_HH__ 376657Snate@binkert.org#define __MEM_CACHE_PREFETCH_BASE_PREFETCHER_HH__ 386657Snate@binkert.org 396657Snate@binkert.org#include "mem/packet.hh" 406657Snate@binkert.org#include <list> 416657Snate@binkert.org 426657Snate@binkert.orgclass BaseCache; 436657Snate@binkert.orgclass BasePrefetcher 446657Snate@binkert.org{ 456657Snate@binkert.org protected: 466657Snate@binkert.org 476657Snate@binkert.org /** The Prefetch Queue. */ 486657Snate@binkert.org std::list<Packet *> pf; 496657Snate@binkert.org 506657Snate@binkert.org // PARAMETERS 516657Snate@binkert.org 526657Snate@binkert.org /** The number of MSHRs in the Prefetch Queue. */ 536657Snate@binkert.org const int size; 546882SBrad.Beckmann@amd.com 556657Snate@binkert.org /** Pointr to the parent cache. */ 566657Snate@binkert.org BaseCache* cache; 576657Snate@binkert.org 586657Snate@binkert.org /** The block size of the parent cache. */ 596657Snate@binkert.org int blkSize; 606657Snate@binkert.org 616657Snate@binkert.org /** Do we prefetch across page boundaries. */ 626657Snate@binkert.org bool pageStop; 636657Snate@binkert.org 646657Snate@binkert.org /** Do we remove prefetches with later times than a new miss.*/ 656657Snate@binkert.org bool serialSquash; 666657Snate@binkert.org 676657Snate@binkert.org /** Do we check if it is in the cache when inserting into buffer, 686657Snate@binkert.org or removing.*/ 696657Snate@binkert.org bool cacheCheckPush; 706657Snate@binkert.org 716657Snate@binkert.org /** Do we prefetch on only data reads, or on inst reads as well. */ 726657Snate@binkert.org bool only_data; 736657Snate@binkert.org 746657Snate@binkert.org public: 756657Snate@binkert.org 766657Snate@binkert.org Stats::Scalar<> pfIdentified; 776657Snate@binkert.org Stats::Scalar<> pfMSHRHit; 786657Snate@binkert.org Stats::Scalar<> pfCacheHit; 796657Snate@binkert.org Stats::Scalar<> pfBufferHit; 806657Snate@binkert.org Stats::Scalar<> pfRemovedFull; 816657Snate@binkert.org Stats::Scalar<> pfRemovedMSHR; 826657Snate@binkert.org Stats::Scalar<> pfIssued; 836657Snate@binkert.org Stats::Scalar<> pfSpanPage; 846657Snate@binkert.org Stats::Scalar<> pfSquashed; 856657Snate@binkert.org 866657Snate@binkert.org void regStats(const std::string &name); 876657Snate@binkert.org 886657Snate@binkert.org public: 896657Snate@binkert.org BasePrefetcher(int numMSHRS, bool pageStop, bool serialSquash, 906657Snate@binkert.org bool cacheCheckPush, bool onlyData); 916657Snate@binkert.org 926657Snate@binkert.org virtual ~BasePrefetcher() {} 936657Snate@binkert.org 946657Snate@binkert.org void setCache(BaseCache *_cache); 956657Snate@binkert.org 966657Snate@binkert.org void handleMiss(Packet * &pkt, Tick time); 976657Snate@binkert.org 986657Snate@binkert.org Packet * getPacket(); 996657Snate@binkert.org 1006657Snate@binkert.org bool havePending() 1016657Snate@binkert.org { 1026657Snate@binkert.org return !pf.empty(); 1038086SBrad.Beckmann@amd.com } 1048086SBrad.Beckmann@amd.com 1058086SBrad.Beckmann@amd.com virtual void calculatePrefetch(Packet * &pkt, 1066657Snate@binkert.org std::list<Addr> &addresses, 1076657Snate@binkert.org std::list<Tick> &delays) = 0; 1086657Snate@binkert.org 1096657Snate@binkert.org virtual bool inCache(Packet * &pkt) = 0; 1106657Snate@binkert.org 1116657Snate@binkert.org virtual bool inMissQueue(Addr address, int asid) = 0; 1126657Snate@binkert.org 1136657Snate@binkert.org std::list<Packet *>::iterator inPrefetch(Addr address); 1146657Snate@binkert.org}; 1156657Snate@binkert.org 1166657Snate@binkert.org 1176657Snate@binkert.org#endif //__MEM_CACHE_PREFETCH_BASE_PREFETCHER_HH__ 1186657Snate@binkert.org