gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
random_repl.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 The Regents of The University of Michigan
3  * Copyright (c) 2016 ARM Limited
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met: redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer;
10  * redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution;
13  * neither the name of the copyright holders nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  *
29  * Authors: Anthony Gutierrez
30  */
31 
38 
39 #include "base/random.hh"
40 #include "debug/CacheRepl.hh"
41 #include "mem/cache/base.hh"
42 
44  : BaseSetAssoc(p)
45 
46 {
47 }
48 
49 CacheBlk*
50 RandomRepl::accessBlock(Addr addr, bool is_secure, Cycles &lat)
51 {
52  return BaseSetAssoc::accessBlock(addr, is_secure, lat);
53 }
54 
55 CacheBlk*
57 {
59  unsigned set = extractSet(addr);
60 
61  // if all blocks are valid, pick a replacement at random
62  if (blk && blk->isValid()) {
63  // find a random index within the bounds of the set
64  int idx = random_mt.random<int>(0, assoc - 1);
65  blk = sets[set].blks[idx];
66  // Enforce allocation limit
67  while (blk->way >= allocAssoc) {
68  idx = (idx + 1) % assoc;
69  blk = sets[set].blks[idx];
70  }
71 
72  assert(idx < assoc);
73  assert(idx >= 0);
74  assert(blk->way < allocAssoc);
75 
76  DPRINTF(CacheRepl, "set %x: selecting blk %x for replacement\n",
77  blk->set, regenerateBlkAddr(blk->tag, blk->set));
78  }
79 
80  return blk;
81 }
82 
83 void
85 {
86  BaseSetAssoc::insertBlock(pkt, blk);
87 }
88 
89 void
91 {
93 }
94 
96 RandomReplParams::create()
97 {
98  return new RandomRepl(this);
99 }
#define DPRINTF(x,...)
Definition: trace.hh:212
unsigned allocAssoc
The allocatable associativity of the cache (alloc mask).
Declares a basic cache interface BaseCache.
void invalidate(CacheBlk *blk)
Invalidate the given block.
Definition: random_repl.cc:90
void insertBlock(PacketPtr pkt, CacheBlk *blk) override
Insert the new block into the cache.
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:83
CacheBlk * findVictim(Addr addr)
Find an invalid block to evict for the address provided.
Definition: random_repl.cc:56
ip6_addr_t addr
Definition: inet.hh:335
CacheBlk * accessBlock(Addr addr, bool is_secure, Cycles &lat) override
Access block and update replacement data.
std::enable_if< std::is_integral< T >::value, T >::type random()
Use the SFINAE idiom to choose an implementation based on whether the type is integral or floating po...
Definition: random.hh:83
Blktype ** blks
Cache blocks in this set, maintained in LRU order 0 = MRU.
Definition: cacheset.hh:64
void insertBlock(PacketPtr pkt, BlkType *blk)
Insert the new block into the cache.
Definition: random_repl.cc:84
BaseTagsParams Params
Definition: base.hh:151
A Basic Cache block.
Definition: blk.hh:79
CacheBlk * findVictim(Addr addr) override
Find an invalid block to evict for the address provided.
A BaseSetAssoc cache tag store.
SetType * sets
The cache sets.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
void invalidate(CacheBlk *blk) override
Invalidate the given block.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:245
int extractSet(Addr addr) const override
Calculate the set index from the address.
const unsigned assoc
The associativity of the cache.
Random random_mt
Definition: random.cc:100
CacheBlk * accessBlock(Addr addr, bool is_secure, Cycles &lat)
Access block and update replacement data.
Definition: random_repl.cc:50
bool isValid() const
Checks that a block is valid.
Definition: blk.hh:203
RandomRepl(const Params *p)
Construct and initiliaze this tag store.
Definition: random_repl.cc:43
Bitfield< 0 > p
Declaration of a random replacement tag store.
Addr regenerateBlkAddr(Addr tag, unsigned set) const override
Regenerate the block address from the tag.

Generated on Fri Jun 9 2017 13:03:48 for gem5 by doxygen 1.8.6