diff options
| author | Tayler Hetherington <[email protected]> | 2013-01-28 13:56:32 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:49:25 -0700 |
| commit | f94343c8768af0fe5571c965e306c387b812b767 (patch) | |
| tree | 4563453c3e233cb0657ac5296bd41dd9558de7cc | |
| parent | 711fa55eb98f6abee76a135c7319f31c843f2efc (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.cc | 87 | ||||
| -rw-r--r-- | src/gpuwattch/gpgpu_sim_wrapper.h | 3 |
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 |
