summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTayler Hetherington <[email protected]>2013-01-28 13:56:32 -0800
committerAndrew Boktor <[email protected]>2014-08-14 13:49:25 -0700
commitf94343c8768af0fe5571c965e306c387b812b767 (patch)
tree4563453c3e233cb0657ac5296bd41dd9558de7cc
parent711fa55eb98f6abee76a135c7319f31c843f2efc (diff)
Cleaning up steady state printing function
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 15124]
-rw-r--r--src/gpuwattch/gpgpu_sim_wrapper.cc87
-rw-r--r--src/gpuwattch/gpgpu_sim_wrapper.h3
2 files changed, 37 insertions, 53 deletions
diff --git a/src/gpuwattch/gpgpu_sim_wrapper.cc b/src/gpuwattch/gpgpu_sim_wrapper.cc
index 3bee7b0..1316e55 100644
--- a/src/gpuwattch/gpgpu_sim_wrapper.cc
+++ b/src/gpuwattch/gpgpu_sim_wrapper.cc
@@ -634,16 +634,38 @@ void gpgpu_sim_wrapper::dump()
proc->displayEnergy(2,5);
}
+void gpgpu_sim_wrapper::print_steady_state(int position, double init_val){
+ double temp_avg = sample_val / (double)samples.size() ;
+ double temp_ipc = (init_val-init_inst_val)/ (double) (samples.size()*gpu_stat_sample_freq);
+
+ if((samples.size() > gpu_steady_min_period)){ // If steady state occurred for some time, print to file
+ has_written_avg=true;
+ gzprintf(steady_state_tacking_file,"%u,%d,%f,%f,",sample_start,gcount,temp_avg,temp_ipc);
+ for(unsigned i=0; i<num_per_counts; ++i){
+ gzprintf(steady_state_tacking_file,"%f,", samples_counter.at(i)/((double)samples.size()));
+ }
+ gzprintf(steady_state_tacking_file,"\n");
+ }else{
+ if(!has_written_avg && position)
+ gzprintf(steady_state_tacking_file,"ERROR! Not enough steady state points to generate average\n");
+ }
+
+ sample_start = 0;
+ sample_val = 0;
+ init_inst_val=init_val;//gpu_tot_sim_insn+gpu_sim_insn;
+ samples.clear();
+ samples_counter.clear();
+ pwr_counter.clear();
+ assert(samples.size() == 0);
+}
+
void gpgpu_sim_wrapper::detect_print_steady_state(int position, double init_val)
{
- if(g_steady_power_levels_enabled)
- steady_state_tacking_file = gzopen(g_steady_state_tracking_filename,"a");
-
// Calculating Average
- if(position==0){
- if(g_steady_power_levels_enabled){
-
- if(samples.size() == 0){
+ if(g_power_simulation_enabled && g_steady_power_levels_enabled){
+ steady_state_tacking_file = gzopen(g_steady_state_tracking_filename,"a");
+ if(position==0){
+ if(samples.size() == 0){
// First sample
sample_start = gcount;
sample_val = proc->rt_power.readOp.dynamic;
@@ -678,55 +700,14 @@ void gpgpu_sim_wrapper::detect_print_steady_state(int position, double init_val)
}
}else{ // Value exceeds threshold, not considered steady state
-
- if(samples.size() > gpu_steady_min_period){ // If steady state occurred for some time, print to file
- has_written_avg = true;
- gzprintf(steady_state_tacking_file,"%u,%d,%f,%f,",sample_start,gcount,temp_avg,temp_ipc);
- for(unsigned i=0; i<num_per_counts; ++i){
- gzprintf(steady_state_tacking_file,"%f,", samples_counter.at(i)/((double)samples.size()));
- }
- gzprintf(steady_state_tacking_file,"\n");
- }
-
- // Clear state
- sample_start = 0;
- sample_val = 0;
- init_inst_val=init_val;//gpu_tot_sim_insn+gpu_sim_insn;
- samples.clear();
- samples_counter.clear();
- pwr_counter.clear();
- assert(samples.size() == 0);
+ print_steady_state(position, init_val);
}
}
+ }else{
+ print_steady_state(position, init_val);
}
- }else{
- if(g_power_simulation_enabled && g_steady_power_levels_enabled){
- double temp_avg = sample_val / (double)samples.size() ;
- double temp_ipc = (init_val-init_inst_val)/ (double) (samples.size()*gpu_stat_sample_freq);
- if((samples.size() > gpu_steady_min_period)){ // If steady state occurred for some time, print to file
- gzprintf(steady_state_tacking_file,"%u,%d,%f,%f,",sample_start,gcount,temp_avg,temp_ipc);
- for(unsigned i=0; i<num_per_counts; ++i){
- gzprintf(steady_state_tacking_file,"%f,", samples_counter.at(i)/((double)samples.size()));
- }
- gzprintf(steady_state_tacking_file,"\n");
- }else{
- if(!has_written_avg)
- gzprintf(steady_state_tacking_file,"ERROR! Not enough steady state points to generate averag\n");
- }
- sample_start = 0;
- sample_val = 0;
- init_inst_val=init_val;//gpu_tot_sim_insn+gpu_sim_insn;
- samples.clear();
- samples_counter.clear();
- pwr_counter.clear();
- assert(samples.size() == 0);
- }
-
- }
-
- if(g_steady_power_levels_enabled)
- gzclose(steady_state_tacking_file);
-
+ gzclose(steady_state_tacking_file);
+ }
}
void gpgpu_sim_wrapper::open_files()
diff --git a/src/gpuwattch/gpgpu_sim_wrapper.h b/src/gpuwattch/gpgpu_sim_wrapper.h
index 0d9d546..eed308f 100644
--- a/src/gpuwattch/gpgpu_sim_wrapper.h
+++ b/src/gpuwattch/gpgpu_sim_wrapper.h
@@ -80,6 +80,9 @@ public:
bool sanity_check(double a, double b);
private:
+
+ void print_steady_state(int position, double init_val);
+
Processor* proc;
ParseXML * p;
// power parameters