summaryrefslogtreecommitdiff
path: root/src/mem/cache/tags/repl/gen.cc
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@gmail.com>2008-02-10 14:15:42 -0800
committerSteve Reinhardt <stever@gmail.com>2008-02-10 14:15:42 -0800
commitd56e77c180aeca0ff1ba271378424787345ec0b8 (patch)
tree2533f37fd2657cca05c3459aba34e128548c8172 /src/mem/cache/tags/repl/gen.cc
parent6cc1573923754ecb406d03ab4d807f928737c294 (diff)
downloadgem5-d56e77c180aeca0ff1ba271378424787345ec0b8.tar.xz
Rename cache files for brevity and consistency with rest of tree.
--HG-- rename : src/mem/cache/base_cache.cc => src/mem/cache/base.cc rename : src/mem/cache/base_cache.hh => src/mem/cache/base.hh rename : src/mem/cache/cache_blk.cc => src/mem/cache/blk.cc rename : src/mem/cache/cache_blk.hh => src/mem/cache/blk.hh rename : src/mem/cache/cache_builder.cc => src/mem/cache/builder.cc rename : src/mem/cache/miss/mshr.cc => src/mem/cache/mshr.cc rename : src/mem/cache/miss/mshr.hh => src/mem/cache/mshr.hh rename : src/mem/cache/miss/mshr_queue.cc => src/mem/cache/mshr_queue.cc rename : src/mem/cache/miss/mshr_queue.hh => src/mem/cache/mshr_queue.hh rename : src/mem/cache/prefetch/base_prefetcher.cc => src/mem/cache/prefetch/base.cc rename : src/mem/cache/prefetch/base_prefetcher.hh => src/mem/cache/prefetch/base.hh rename : src/mem/cache/prefetch/ghb_prefetcher.cc => src/mem/cache/prefetch/ghb.cc rename : src/mem/cache/prefetch/ghb_prefetcher.hh => src/mem/cache/prefetch/ghb.hh rename : src/mem/cache/prefetch/stride_prefetcher.cc => src/mem/cache/prefetch/stride.cc rename : src/mem/cache/prefetch/stride_prefetcher.hh => src/mem/cache/prefetch/stride.hh rename : src/mem/cache/prefetch/tagged_prefetcher.cc => src/mem/cache/prefetch/tagged.cc rename : src/mem/cache/prefetch/tagged_prefetcher.hh => src/mem/cache/prefetch/tagged.hh rename : src/mem/cache/tags/base_tags.cc => src/mem/cache/tags/base.cc rename : src/mem/cache/tags/base_tags.hh => src/mem/cache/tags/base.hh rename : src/mem/cache/tags/Repl.py => src/mem/cache/tags/iic_repl/Repl.py rename : src/mem/cache/tags/repl/gen.cc => src/mem/cache/tags/iic_repl/gen.cc rename : src/mem/cache/tags/repl/gen.hh => src/mem/cache/tags/iic_repl/gen.hh rename : src/mem/cache/tags/repl/repl.hh => src/mem/cache/tags/iic_repl/repl.hh extra : convert_revision : ff7a35cc155a8d80317563c45cebe405984eac62
Diffstat (limited to 'src/mem/cache/tags/repl/gen.cc')
-rw-r--r--src/mem/cache/tags/repl/gen.cc246
1 files changed, 0 insertions, 246 deletions
diff --git a/src/mem/cache/tags/repl/gen.cc b/src/mem/cache/tags/repl/gen.cc
deleted file mode 100644
index bc4e6b86a..000000000
--- a/src/mem/cache/tags/repl/gen.cc
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2002-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Erik Hallnor
- * Steve Reinhardt
- */
-
-/**
- * @file
- * Definitions of the Generational replacement policy.
- */
-
-#include <string>
-
-#include "base/misc.hh"
-#include "mem/cache/tags/iic.hh"
-#include "mem/cache/tags/repl/gen.hh"
-#include "params/GenRepl.hh"
-#include "sim/host.hh"
-
-using namespace std;
-
-GenRepl::GenRepl(const Params *p) // fix this, should be set by cache
- : Repl(p), num_pools(p->num_pools), fresh_res(p->fresh_res),
- pool_res(p->pool_res), num_entries(0), num_pool_entries(0), misses(0),
- pools(pools = new GenPool[num_pools+1])
-{
-}
-
-GenRepl::~GenRepl()
-{
- delete [] pools;
-}
-
-unsigned long
-GenRepl::getRepl()
-{
- unsigned long tmp;
- GenReplEntry *re;
- int i;
- int num_seen = 0;
- if (!(num_pool_entries>0)) {
- fatal("No blks available to replace");
- }
- num_entries--;
- num_pool_entries--;
- for (i = 0; i < num_pools; i++) {
- while ((re = pools[i].pop())) {
- num_seen++;
- // Remove invalidated entries
- if (!re->valid) {
- delete re;
- continue;
- }
- if (iic->clearRef(re->tag_ptr)) {
- pools[(((i+1)== num_pools)? i :i+1)].push(re, misses);
- }
- else {
- tmp = re->tag_ptr;
- delete re;
-
- repl_pool.sample(i);
-
- return tmp;
- }
- }
- }
- fatal("No replacement found");
- return 0xffffffff;
-}
-
-unsigned long *
-GenRepl::getNRepl(int n)
-{
- unsigned long *tmp;
- GenReplEntry *re;
- int i;
- if (!(num_pool_entries>(n-1))) {
- fatal("Not enough blks available to replace");
- }
- num_entries -= n;
- num_pool_entries -= n;
- tmp = new unsigned long[n]; /* array of cache_blk pointers */
- int blk_index = 0;
- for (i = 0; i < num_pools && blk_index < n; i++) {
- while (blk_index < n && (re = pools[i].pop())) {
- // Remove invalidated entries
- if (!re->valid) {
- delete re;
- continue;
- }
- if (iic->clearRef(re->tag_ptr)) {
- pools[(((i+1)== num_pools)? i :i+1)].push(re, misses);
- }
- else {
- tmp[blk_index] = re->tag_ptr;
- blk_index++;
- delete re;
- repl_pool.sample(i);
- }
- }
- }
- if (blk_index >= n)
- return tmp;
- /* search the fresh pool */
-
- fatal("No N replacements found");
- return NULL;
-}
-
-void
-GenRepl::doAdvance(std::list<unsigned long> &demoted)
-{
- int i;
- int num_seen = 0;
- GenReplEntry *re;
- misses++;
- for (i=0; i<num_pools; i++) {
- while (misses-pools[i].oldest > pool_res && (re = pools[i].pop())!=NULL) {
- if (iic->clearRef(re->tag_ptr)) {
- pools[(((i+1)== num_pools)? i :i+1)].push(re, misses);
- /** @todo Not really demoted, but use it for now. */
- demoted.push_back(re->tag_ptr);
- advance_pool.sample(i);
- }
- else {
- pools[(((i-1)<0)?i:i-1)].push(re, misses);
- demoted.push_back(re->tag_ptr);
- demote_pool.sample(i);
- }
- }
- num_seen += pools[i].size;
- }
- while (misses-pools[num_pools].oldest > fresh_res
- && (re = pools[num_pools].pop())!=NULL) {
- num_pool_entries++;
- if (iic->clearRef(re->tag_ptr)) {
- pools[num_pools/2].push(re, misses);
- /** @todo Not really demoted, but use it for now. */
- demoted.push_back(re->tag_ptr);
- advance_pool.sample(num_pools);
- }
- else {
- pools[num_pools/2-1].push(re, misses);
- demoted.push_back(re->tag_ptr);
- demote_pool.sample(num_pools);
- }
- }
-}
-
-void*
-GenRepl::add(unsigned long tag_index)
-{
- GenReplEntry *re = new GenReplEntry;
- re->tag_ptr = tag_index;
- re->valid = true;
- pools[num_pools].push(re, misses);
- num_entries++;
- return (void*)re;
-}
-
-void
-GenRepl::regStats(const string name)
-{
- using namespace Stats;
-
- /** GEN statistics */
- repl_pool
- .init(0, 16, 1)
- .name(name + ".repl_pool_dist")
- .desc("Dist. of Repl. across pools")
- .flags(pdf)
- ;
-
- advance_pool
- .init(0, 16, 1)
- .name(name + ".advance_pool_dist")
- .desc("Dist. of Repl. across pools")
- .flags(pdf)
- ;
-
- demote_pool
- .init(0, 16, 1)
- .name(name + ".demote_pool_dist")
- .desc("Dist. of Repl. across pools")
- .flags(pdf)
- ;
-}
-
-int
-GenRepl::fixTag(void* _re, unsigned long old_index, unsigned long new_index)
-{
- GenReplEntry *re = (GenReplEntry*)_re;
- assert(re->valid);
- if (re->tag_ptr == old_index) {
- re->tag_ptr = new_index;
- return 1;
- }
- fatal("Repl entry: tag ptrs do not match");
- return 0;
-}
-
-bool
-GenRepl::findTagPtr(unsigned long index)
-{
- for (int i = 0; i < num_pools + 1; ++i) {
- list<GenReplEntry*>::const_iterator iter = pools[i].entries.begin();
- list<GenReplEntry*>::const_iterator end = pools[i].entries.end();
- for (; iter != end; ++iter) {
- if ((*iter)->valid && (*iter)->tag_ptr == index) {
- return true;
- }
- }
- }
- return false;
-}
-
-GenRepl *
-GenReplParams::create()
-{
- return new GenRepl(this);
-}