summaryrefslogtreecommitdiff
path: root/src/gpuwattch/gpgpu_sim_wrapper.h
diff options
context:
space:
mode:
authorTayler Hetherington <[email protected]>2013-06-11 12:41:25 -0800
committerAndrew Boktor <[email protected]>2014-08-14 13:50:47 -0700
commit821753ac64ac2b3f4a441d0ed6d8bb0cdffb0fb8 (patch)
treecb908455877b49fad310e6d32a0e8e25e057f396 /src/gpuwattch/gpgpu_sim_wrapper.h
parented5da41343db26bb2c06b46a6c16a0dc78c0636a (diff)
Further cleaning up power stats - Continuation of issue 35001.
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 16437]
Diffstat (limited to 'src/gpuwattch/gpgpu_sim_wrapper.h')
-rw-r--r--src/gpuwattch/gpgpu_sim_wrapper.h55
1 files changed, 29 insertions, 26 deletions
diff --git a/src/gpuwattch/gpgpu_sim_wrapper.h b/src/gpuwattch/gpgpu_sim_wrapper.h
index f7f5066..9d06092 100644
--- a/src/gpuwattch/gpgpu_sim_wrapper.h
+++ b/src/gpuwattch/gpgpu_sim_wrapper.h
@@ -41,8 +41,14 @@
using namespace std;
+template <typename T>
+struct avg_max_min_counters{
+ T avg;
+ T max;
+ T min;
-
+ avg_max_min_counters(){avg=0; max=0; min=0;}
+};
class gpgpu_sim_wrapper {
public:
@@ -61,8 +67,8 @@ public:
void print_trace_files();
void update_components_power();
void update_coefficients();
- void reset_counters(bool do_print);
- void print_power_kernel_stats(double gpu_sim_cycle, double gpu_tot_sim_cycle, double init_value, const std::string & kernel_info_string);
+ void reset_counters();
+ void print_power_kernel_stats(double gpu_sim_cycle, double gpu_tot_sim_cycle, double init_value, const std::string & kernel_info_string, bool print_trace);
void power_metrics_calculations();
void set_inst_power(bool clk_gated_lanes, double tot_cycles, double busy_cycles, double tot_inst, double int_inst, double fp_inst, double load_inst, double store_inst, double committed_inst);
void set_regfile_power(double reads, double writes, double ops);
@@ -88,37 +94,34 @@ private:
ParseXML * p;
// power parameters
double const_dynamic_power;
- double * pwr_cmp;
double proc_power;
- double * pwr_cmp_avg;
- double * pwr_cmp_max;
- double * pwr_cmp_min;
- double * perf_count_avg;
- double * perf_count_min;
- double * perf_count_max;
- double pavg;
- int count;
- unsigned num_per_counts;
- unsigned num_pwr_cmps;
- int gcount;
- double gpu_avg_power;
- double gpu_max_power;
- double gpu_min_power;
- double gpu_tot_avg_power;
- double gpu_tot_min_power;
- double gpu_tot_max_power;
+
+ unsigned num_perf_counters; // # of performance counters
+ unsigned num_pwr_cmps; // # of components modelled
+ int kernel_sample_count; // # of samples per kernel
+ int total_sample_count; // # of samples per benchmark
+
+ std::vector< avg_max_min_counters<double> > kernel_cmp_pwr; // Per-kernel component power avg/max/min values
+ std::vector< avg_max_min_counters<double> > kernel_cmp_perf_counters; // Per-kernel component avg/max/min performance counters
+
+ double kernel_tot_power; // Total per-kernel power
+ avg_max_min_counters<double> kernel_power; // Per-kernel power avg/max/min values
+ avg_max_min_counters<double> gpu_tot_power; // Global GPU power avg/max/min values (across kernels)
+
bool has_written_avg;
- double * perf_count;
- double * initpower_coeff;
- double * effpower_coeff;
+ std::vector<double> sample_cmp_pwr; // Current sample component powers
+ std::vector<double> sample_perf_counters; // Current sample component perf. counts
+ std::vector<double> initpower_coeff;
+ std::vector<double> effpower_coeff;
+
// For calculating steady-state average
unsigned sample_start;
double sample_val;
double init_inst_val;
std::vector<double> samples;
- std::vector< double > samples_counter;
- std::vector< double > pwr_counter;
+ std::vector<double> samples_counter;
+ std::vector<double> pwr_counter;
char *xml_filename;
char *g_power_filename;