diff options
Diffstat (limited to 'src/gpuwattch/gpgpu_sim_wrapper.h')
| -rw-r--r-- | src/gpuwattch/gpgpu_sim_wrapper.h | 210 |
1 files changed, 116 insertions, 94 deletions
diff --git a/src/gpuwattch/gpgpu_sim_wrapper.h b/src/gpuwattch/gpgpu_sim_wrapper.h index 9d06092..a3356b7 100644 --- a/src/gpuwattch/gpgpu_sim_wrapper.h +++ b/src/gpuwattch/gpgpu_sim_wrapper.h @@ -7,14 +7,16 @@ // // 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 +// 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 +// 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 @@ -28,120 +30,140 @@ #ifndef GPGPU_SIM_WRAPPER_H_ #define GPGPU_SIM_WRAPPER_H_ -#include "processor.h" +#include <assert.h> #include <stdio.h> #include <stdlib.h> -#include <assert.h> -#include <string> -#include <iostream> -#include <fstream> -#include <zlib.h> #include <string.h> - +#include <zlib.h> +#include <fstream> +#include <iostream> +#include <string> +#include "processor.h" using namespace std; template <typename T> -struct avg_max_min_counters{ - T avg; - T max; - T min; +struct avg_max_min_counters { + T avg; + T max; + T min; - avg_max_min_counters(){avg=0; max=0; min=0;} + avg_max_min_counters() { + avg = 0; + max = 0; + min = 0; + } }; class gpgpu_sim_wrapper { -public: - gpgpu_sim_wrapper(bool power_simulation_enabled, char* xmlfile); - ~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 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); - 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); + public: + gpgpu_sim_wrapper(bool power_simulation_enabled, char* xmlfile); + ~gpgpu_sim_wrapper(); -private: + 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 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); + 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); - void print_steady_state(int position, double init_val); + private: + void print_steady_state(int position, double init_val); - Processor* proc; - ParseXML * p; - // power parameters - double const_dynamic_power; - double proc_power; + Processor* proc; + ParseXML* p; + // power parameters + double const_dynamic_power; + double proc_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 + 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 + 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) + 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; + bool has_written_avg; - 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; + 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; + // 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; + 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; + std::ofstream powerfile; + gzFile power_trace_file; + gzFile metric_trace_file; + gzFile steady_state_tacking_file; }; #endif /* GPGPU_SIM_WRAPPER_H_ */ |
