lru_rp.hh revision 12613:40c18bb90501
110916Sandreas.sandberg@arm.com/** 210916Sandreas.sandberg@arm.com * Copyright (c) 2018 Inria 310916Sandreas.sandberg@arm.com * All rights reserved. 410916Sandreas.sandberg@arm.com * 510916Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 610916Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 710916Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 810916Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 910916Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 1010916Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 1110916Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 1210916Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its 1310916Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from 1410916Sandreas.sandberg@arm.com * this software without specific prior written permission. 1510916Sandreas.sandberg@arm.com * 1610916Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1710916Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1810916Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1910916Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2010916Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2110916Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2210916Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2310916Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2410916Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2510916Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2610916Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2710916Sandreas.sandberg@arm.com * 2810916Sandreas.sandberg@arm.com * Authors: Daniel Carvalho 2910916Sandreas.sandberg@arm.com */ 3010916Sandreas.sandberg@arm.com 3110916Sandreas.sandberg@arm.com/** 3210916Sandreas.sandberg@arm.com * @file 3310916Sandreas.sandberg@arm.com * Declaration of a Least Recently Used replacement policy. 3410916Sandreas.sandberg@arm.com * The victim is chosen using the timestamp. The timestamp may be true or 3510916Sandreas.sandberg@arm.com * pseudo, depending on the quantity of bits allocated for that. 3610916Sandreas.sandberg@arm.com */ 3710916Sandreas.sandberg@arm.com 3810916Sandreas.sandberg@arm.com#ifndef __MEM_CACHE_REPLACEMENT_POLICIES_LRU_RP_HH__ 3910916Sandreas.sandberg@arm.com#define __MEM_CACHE_REPLACEMENT_POLICIES_LRU_RP_HH__ 4010916Sandreas.sandberg@arm.com 4110916Sandreas.sandberg@arm.com#include "mem/cache/replacement_policies/base.hh" 4210916Sandreas.sandberg@arm.com#include "params/LRURP.hh" 4310916Sandreas.sandberg@arm.com 4410916Sandreas.sandberg@arm.comclass LRURP : public BaseReplacementPolicy 4510916Sandreas.sandberg@arm.com{ 4610916Sandreas.sandberg@arm.com public: 4710916Sandreas.sandberg@arm.com /** Convenience typedef. */ 4810916Sandreas.sandberg@arm.com typedef LRURPParams Params; 4910916Sandreas.sandberg@arm.com 5010916Sandreas.sandberg@arm.com /** 5110916Sandreas.sandberg@arm.com * Construct and initiliaze this replacement policy. 5210916Sandreas.sandberg@arm.com */ 5310916Sandreas.sandberg@arm.com LRURP(const Params *p); 5410916Sandreas.sandberg@arm.com 5510916Sandreas.sandberg@arm.com /** 5610916Sandreas.sandberg@arm.com * Destructor. 5710916Sandreas.sandberg@arm.com */ 5811168Sandreas.hansson@arm.com ~LRURP() {} 5911168Sandreas.hansson@arm.com 6010916Sandreas.sandberg@arm.com /** 6110916Sandreas.sandberg@arm.com * Touch a block to update its last touch tick. 6211168Sandreas.hansson@arm.com * 6311168Sandreas.hansson@arm.com * @param blk Cache block to be touched. 6411168Sandreas.hansson@arm.com */ 6510916Sandreas.sandberg@arm.com void touch(CacheBlk *blk) override; 6610916Sandreas.sandberg@arm.com 6710916Sandreas.sandberg@arm.com /** 6810916Sandreas.sandberg@arm.com * Reset replacement data for a block. Used when a block is inserted. 6910916Sandreas.sandberg@arm.com * Sets its last touch tick as the current tick. 7010916Sandreas.sandberg@arm.com * 7110916Sandreas.sandberg@arm.com * @param blk Cache block to be reset. 7210916Sandreas.sandberg@arm.com */ 7310916Sandreas.sandberg@arm.com void reset(CacheBlk *blk) override; 7410916Sandreas.sandberg@arm.com 7510916Sandreas.sandberg@arm.com /** 7610916Sandreas.sandberg@arm.com * Find replacement victim using LRU timestamps. 7710916Sandreas.sandberg@arm.com * 7810916Sandreas.sandberg@arm.com * @param candidates Replacement candidates, selected by indexing policy. 7910916Sandreas.sandberg@arm.com * @return Cache block to be replaced. 8010916Sandreas.sandberg@arm.com */ 8110916Sandreas.sandberg@arm.com CacheBlk* getVictim(const ReplacementCandidates& candidates) override; 8210916Sandreas.sandberg@arm.com}; 8310916Sandreas.sandberg@arm.com 8410916Sandreas.sandberg@arm.com#endif // __MEM_CACHE_REPLACEMENT_POLICIES_LRU_RP_HH__ 8510916Sandreas.sandberg@arm.com