summaryrefslogtreecommitdiff
path: root/src/mcpat/gpgpu_sim_wrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mcpat/gpgpu_sim_wrapper.h')
-rw-r--r--src/mcpat/gpgpu_sim_wrapper.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/mcpat/gpgpu_sim_wrapper.h b/src/mcpat/gpgpu_sim_wrapper.h
new file mode 100644
index 0000000..5ef6f05
--- /dev/null
+++ b/src/mcpat/gpgpu_sim_wrapper.h
@@ -0,0 +1,140 @@
+// Copyright (c) 2009-2011, Tor M. Aamodt, Tayler Hetherington, Ahmed ElTantawy,
+// The University of British Columbia
+// 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 University of British Columbia 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 HOLDER 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.
+
+#ifndef GPGPU_SIM_WRAPPER_H_
+#define GPGPU_SIM_WRAPPER_H_
+
+#include "processor.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <zlib.h>
+#include <string.h>
+
+
+using namespace std;
+
+
+
+
+class gpgpu_sim_wrapper {
+public:
+ gpgpu_sim_wrapper();
+ ~gpgpu_sim_wrapper();
+
+ void init_mcpat(char* xmlfile, char* powerfile, char* power_trace_file,char* metric_trace_file,
+ char * steady_state_file,bool power_sim_enabled,bool trace_enabled,bool steady_state_enabled,
+ bool power_per_cycle_dump,double steady_power_deviation,double steady_min_period,int zlevel,
+ double init_val,int stat_sample_freq);
+ void detect_print_steady_state(int position, double init_val);
+ void close_files();
+ void open_files();
+ void compute();
+ void dump();
+ void print_trace_files();
+ void update_components_power();
+ void update_coefficients();
+ void print_power_kernel_stats(double gpu_sim_cycle, double gpu_tot_sim_cycle, double init_value);
+ 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);
+ void set_icache_power(double accesses, double misses);
+ void set_ccache_power(double accesses, double misses);
+ void set_tcache_power(double accesses, double misses);
+ void set_shrd_mem_power(double accesses);
+ void set_l1cache_power(double read_accesses, double read_misses, double write_accesses, double write_misses);
+ void set_l2cache_power(double read_accesses, double read_misses, double write_accesses, double write_misses);
+ void set_idle_core_power(double num_idle_core);
+ void set_duty_cycle_power(double duty_cycle);
+ void set_mem_ctrl_power(double reads, double writes, double dram_precharge);
+ void set_exec_unit_power(double fpu_accesses, double ialu_accesses, double sfu_accesses);
+ void set_active_lanes_power(double sp_avg_active_lane, double sfu_avg_active_lane);
+ void set_NoC_power(double noc_tot_reads,double noc_tot_write);
+ bool sanity_check(double a, double b);
+
+private:
+ Processor* proc;
+ 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;
+ bool has_written_avg;
+
+ double * perf_count;
+ double * initpower_coeff;
+ 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;
+
+ char *xml_filename;
+ char *g_power_filename;
+ char *g_power_trace_filename;
+ char *g_metric_trace_filename;
+ char * g_steady_state_tracking_filename;
+ bool g_power_simulation_enabled;
+ bool g_steady_power_levels_enabled;
+ bool g_power_trace_enabled;
+ bool g_power_per_cycle_dump;
+ double gpu_steady_power_deviation;
+ double gpu_steady_min_period;
+ int g_power_trace_zlevel;
+ double gpu_stat_sample_frequency;
+ int gpu_stat_sample_freq;
+
+ std::ofstream powerfile;
+ gzFile power_trace_file;
+ gzFile metric_trace_file;
+ gzFile steady_state_tacking_file;
+};
+
+#endif /* GPGPU_SIM_WRAPPER_H_ */