summaryrefslogtreecommitdiff
path: root/src/base/hybrid_pred.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/hybrid_pred.cc')
-rw-r--r--src/base/hybrid_pred.cc276
1 files changed, 0 insertions, 276 deletions
diff --git a/src/base/hybrid_pred.cc b/src/base/hybrid_pred.cc
deleted file mode 100644
index 73216489e..000000000
--- a/src/base/hybrid_pred.cc
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (c) 2003-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: Steve Reinhardt
- * Lisa Hsu
- */
-
-#include <string>
-#include <sstream>
-
-#include "base/hybrid_pred.hh"
-#include "base/statistics.hh"
-#include "sim/stats.hh"
-
-using namespace std;
-
-HybridPredictor::HybridPredictor(const char *_p_name, const char *_z_name,
- const char *_o_name,
- unsigned _index_bits, unsigned _counter_bits,
- unsigned _zero_change, unsigned _one_change,
- unsigned _thresh,
- unsigned _global_bits,
- unsigned _global_thresh,
- bool _reg_individual_stats)
-{
- stringstream local_name, global_name;
-
- pred_name = _p_name;
- one_name = _o_name;
- zero_name = _z_name;
- reg_individual_stats = _reg_individual_stats;
-
- local_name << pred_name.c_str() << ":L";
- local = new SaturatingCounterPred(local_name.str(), zero_name, one_name,
- _index_bits, _counter_bits,
- _zero_change, _one_change, _thresh);
-
- global_name << pred_name.c_str() << ":G";
- global = new SaturatingCounterPred(global_name.str(), zero_name, one_name,
- 0, _global_bits, 1, 1, _global_thresh);
-}
-
-void HybridPredictor::regStats()
-{
- using namespace Stats;
-
- string p_name;
- stringstream description;
-
- if (reg_individual_stats)
- p_name = pred_name + ":A";
- else
- p_name = pred_name;
-
-
- //
- // Number of predictions
- //
- stringstream num_zero_preds;
- num_zero_preds << p_name << ":" << zero_name << ":preds";
- description << "number of predictions of " << zero_name;
- pred_zero
- .name(num_zero_preds.str())
- .desc(description.str());
- description.str("");
-
- stringstream num_one_preds;
- num_one_preds << p_name << ":" << one_name << ":preds";
- description << "number of predictions of " << one_name;
- pred_one
- .name(num_one_preds.str())
- .desc(description.str())
- ;
- description.str("");
-
- //
- // Count the number of correct predictions
- //
- stringstream num_zero_correct;
- num_zero_correct << p_name << ":" << zero_name << ":corr_preds";
- description << "number of correct " << zero_name << " preds" ;
- correct_pred_zero
- .name(num_zero_correct.str())
- .desc(description.str())
- ;
- description.str("");
-
- stringstream num_one_correct;
- num_one_correct << p_name << ":" << one_name << ":corr_preds";
- description << "number of correct " << one_name << " preds" ;
- correct_pred_one
- .name(num_one_correct.str())
- .desc(description.str())
- ;
- description.str("");
-
-
- //
- // Number of predictor updates
- //
- stringstream num_zero_updates;
- num_zero_updates << p_name << ":" << zero_name << ":updates" ;
- description << "number of actual " << zero_name << "s" ;
- record_zero
- .name(num_zero_updates.str())
- .desc(description.str())
- ;
- description.str("");
-
- stringstream num_one_updates;
- num_one_updates << p_name << ":" << one_name << ":updates" ;
- description << "number of actual " << one_name << "s" ;
- record_one
- .name(num_one_updates.str())
- .desc(description.str())
- ;
- description.str("");
-
- //
- // Local & Global predictor stats
- //
- if (reg_individual_stats) {
- local->regStats();
- global->regStats();
- }
-}
-
-void HybridPredictor::regFormulas()
-{
- using namespace Stats;
-
- string p_name;
- stringstream description;
- stringstream name;
-
- if (reg_individual_stats)
- p_name = pred_name + ":A";
- else
- p_name = pred_name;
-
- //
- // Number of predictions
- //
- name << p_name << ":predictions" ;
- total_preds
- .name(name.str())
- .desc("total number of predictions made")
- ;
- total_preds = pred_one + pred_zero;
- name.str("");
-
- //
- // Fraction of all predictions that are one or zero
- //
- name << p_name << ":" << zero_name << ":pred_frac";
- description << "fraction of all preds that were " << zero_name ;
- frac_preds_zero
- .name(name.str())
- .desc(description.str())
- ;
- frac_preds_zero = 100 * record_zero / total_preds;
- description.str("");
- name.str("");
-
- name << p_name << ":" << one_name << ":pred_frac";
- description << "fraction of all preds that were " << one_name ;
- frac_preds_one
- .name(name.str())
- .desc(description.str())
- ;
- frac_preds_one = 100 * record_one / total_preds;
- description.str("");
- name.str("");
-
- //
- // Count the number of correct predictions
- //
- name << p_name << ":correct_preds" ;
- total_correct
- .name(name.str())
- .desc("total number of correct predictions made")
- ;
- total_correct = correct_pred_one + correct_pred_zero;
- name.str("");
-
-
- //
- // Prediction accuracy rates
- //
- name << p_name << ":pred_rate";
- total_accuracy
- .name(name.str())
- .desc("fraction of all preds that were correct")
- ;
- total_accuracy = 100 * total_correct / total_preds;
- name.str("");
-
- name << p_name << ":" << zero_name << ":pred_rate" ;
- description << "fraction of "<< zero_name <<" preds that were correct";
- zero_accuracy
- .name(name.str())
- .desc(description.str())
- ;
- zero_accuracy = 100 * correct_pred_zero / pred_zero;
- description.str("");
- name.str("");
-
- name << p_name << ":" << one_name << ":pred_rate" ;
- description << "fraction of "<< one_name <<" preds that were correct";
- one_accuracy
- .name(name.str())
- .desc(description.str())
- ;
- one_accuracy = 100 * correct_pred_one / pred_one;
- description.str("");
- name.str("");
-
- //
- // Coverage
- //
- name << p_name << ":" << zero_name << ":coverage";
- description << "fraction of " << zero_name
- << "s that were predicted correctly";
- zero_coverage
- .name(name.str())
- .desc(description.str())
- ;
- zero_coverage = 100 * correct_pred_zero / record_zero;
- description.str("");
- name.str("");
-
- name << p_name << ":" << one_name << ":coverage";
- description << "fraction of " << one_name
- << "s that were predicted correctly";
- one_coverage
- .name(name.str())
- .desc(description.str())
- ;
- one_coverage = 100 * correct_pred_one / record_one;
- description.str("");
- name.str("");
-
- //
- // Local & Global predictor stats
- //
- if (reg_individual_stats) {
- local->regFormulas();
- global->regFormulas();
- }
-
-}
-