diff options
Diffstat (limited to 'sim/sat_counter.cc')
-rw-r--r-- | sim/sat_counter.cc | 269 |
1 files changed, 0 insertions, 269 deletions
diff --git a/sim/sat_counter.cc b/sim/sat_counter.cc deleted file mode 100644 index dc365f0f3..000000000 --- a/sim/sat_counter.cc +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (c) 2003 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. - */ - -#include <sstream> - -#include "sat_counter.hh" - -#include "statistics.hh" -#include "sim_stats.hh" - - -using namespace std; - - -SaturatingCounterPred::SaturatingCounterPred(string p_name, - string z_name, - string o_name, - unsigned _index_bits, - unsigned _counter_bits, - unsigned _zero_change, - unsigned _one_change, - unsigned _thresh, - unsigned _init_value) -{ - pred_name = p_name; - zero_name = z_name; - one_name = o_name; - - index_bits = _index_bits; - counter_bits = _counter_bits; - zero_change = _zero_change; - one_change = _one_change; - thresh = _thresh; - init_value = _init_value; - - max_index = (1 << index_bits) - 1; - max_value = (1 << counter_bits) - 1; - - table = new unsigned[max_index + 1]; - - // Initialize with the right parameters & clear the counter - for (int i = 0; i <= max_index; ++i) - table[i] = init_value; -} - -void SaturatingCounterPred::regStats() -{ - using namespace Statistics; - stringstream name, description; - - // - // Number of predictions - // - name << pred_name << ":" << zero_name << ":preds"; - description << "number of predictions of " << zero_name; - predicted_zero - .name(name.str()) - .desc(description.str()) - ; - description.str(""); - name.str(""); - - name << pred_name << ":" << one_name << ":preds"; - description << "number of predictions of " << one_name; - predicted_one - .name(name.str()) - .desc(description.str()) - ; - description.str(""); - name.str(""); - - // - // Count the number of correct predictions - // - name << pred_name << ":" << zero_name << ":corr_preds"; - description << "number of correct " << zero_name << " preds"; - correct_pred_zero - .name(name.str()) - .desc(description.str()) - ; - description.str(""); - name.str(""); - - name << pred_name << ":" << one_name << ":corr_preds"; - description << "number of correct " << one_name << " preds"; - correct_pred_one - .name(name.str()) - .desc(description.str()) - ; - description.str(""); - name.str(""); - - // - // Number of predictor updates - // - name << pred_name << ":" << zero_name << ":updates"; - description << "number of actual " << zero_name << "s"; - record_zero - .name(name.str()) - .desc(description.str()) - ; - description.str(""); - name.str(""); - - name << pred_name << ":" << one_name << ":updates"; - description << "number of actual " << one_name << "s"; - record_one - .name(name.str()) - .desc(description.str()) - ; - description.str(""); - name.str(""); -} - -void SaturatingCounterPred::regFormulas() -{ - using namespace Statistics; - stringstream name, description; - - // - // Number of predictions - // - name << pred_name << ":predictions"; - preds_total - .name(name.str()) - .desc("total number of predictions made") - ; - preds_total = predicted_zero + predicted_one; - name.str(""); - - // - // Fraction of all predictions that are one or zero - // - name << pred_name << ":" << zero_name << ":pred_frac"; - description << "fraction of all preds that were " << zero_name; - pred_frac_zero - .name(name.str()) - .desc(description.str()) - ; - pred_frac_zero = 100 * predicted_zero / preds_total; - description.str(""); - name.str(""); - - name << pred_name << ":" << one_name << ":pred_frac"; - description << "fraction of all preds that were " << one_name; - pred_frac_one - .name(name.str()) - .desc(description.str()) - ; - pred_frac_one = 100 * predicted_one / preds_total; - description.str(""); - name.str(""); - - - // - // Count the number of correct predictions - // - name << pred_name << ":correct_preds"; - correct_total - .name(name.str()) - .desc("total correct predictions made") - ; - correct_total = correct_pred_one + correct_pred_zero; - name.str(""); - - // - // Number of predictor updates - // - name << pred_name << ":updates"; - updates_total - .name(name.str()) - .desc("total number of updates") - ; - updates_total = record_zero + record_one; - name.str(""); - - // - // Prediction accuracy rates - // - name << pred_name << ":pred_rate"; - pred_rate - .name(name.str()) - .desc("correct fraction of all preds") - ; - pred_rate = correct_total / updates_total; - name.str(""); - - name << pred_name << ":" << zero_name << ":pred_rate"; - description << "fraction of " << zero_name << " preds that were correct"; - frac_correct_zero - .name(name.str()) - .desc(description.str()) - ; - frac_correct_zero = 100 * correct_pred_zero / - (correct_pred_zero + record_one - correct_pred_one); - description.str(""); - name.str(""); - - name << pred_name << ":" << one_name << ":pred_rate"; - description << "fraction of " << one_name << " preds that were correct"; - frac_correct_one - .name(name.str()) - .desc(description.str()) - ; - frac_correct_one = 100 * correct_pred_one / - (correct_pred_one + record_zero - correct_pred_zero); - description.str(""); - name.str(""); - - // - // Coverage - // - name << pred_name << ":" << zero_name << ":coverage"; - description << "fraction of " << zero_name - << "s that were predicted correctly"; - coverage_zero - .name(name.str()) - .desc(description.str()) - ; - coverage_zero = 100 * correct_pred_zero / record_zero; - description.str(""); - name.str(""); - - name << pred_name << ":" << one_name << ":coverage"; - description << "fraction of " << one_name - << "s that were predicted correctly"; - coverage_one - .name(name.str()) - .desc(description.str()) - ; - coverage_one = 100 * correct_pred_one / record_one; - description.str(""); - name.str(""); -} - - - - - - - - - - |