From 07b1e93f19bef20a9e35fcfc48b091fa36d56d1b Mon Sep 17 00:00:00 2001 From: Tayler Hetherington Date: Fri, 5 Jun 2015 14:49:14 -0700 Subject: Fixing bug with max cycle/instruction/cta + bug with C++ name de-mangling with spaces (e.g., using templates) --- src/gpgpu-sim/gpu-sim.cc | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'src/gpgpu-sim/gpu-sim.cc') diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc index 8b47c28..32de005 100644 --- a/src/gpgpu-sim/gpu-sim.cc +++ b/src/gpgpu-sim/gpu-sim.cc @@ -486,12 +486,29 @@ bool gpgpu_sim::can_start_kernel() return false; } -bool gpgpu_sim::get_more_cta_left() const -{ +bool gpgpu_sim::hit_max_cta_count() const { if (m_config.gpu_max_cta_opt != 0) { - if( m_total_cta_launched >= m_config.gpu_max_cta_opt ) - return false; + if( (gpu_tot_issued_cta + m_total_cta_launched) >= m_config.gpu_max_cta_opt ) + return true; } + return false; +} + +bool gpgpu_sim::kernel_more_cta_left(kernel_info_t *kernel) const { + if(hit_max_cta_count()) + return false; + + if(kernel && !kernel->no_more_ctas_to_run()) + return true; + + return false; +} + +bool gpgpu_sim::get_more_cta_left() const +{ + if(hit_max_cta_count()) + return false; + for(unsigned n=0; n < m_running_kernels.size(); n++ ) { if( m_running_kernels[n] && !m_running_kernels[n]->no_more_ctas_to_run() ) return true; @@ -503,7 +520,7 @@ kernel_info_t *gpgpu_sim::select_kernel() { for(unsigned n=0; n < m_running_kernels.size(); n++ ) { unsigned idx = (n+m_last_issued_kernel+1)%m_config.max_concurrent_kernel; - if( m_running_kernels[idx] && !m_running_kernels[idx]->no_more_ctas_to_run() ) { + if( kernel_more_cta_left(m_running_kernels[idx] ){ m_last_issued_kernel=idx; // record this kernel for stat print if it is the first time this kernel is selected for execution unsigned launch_uid = m_running_kernels[idx]->get_uid(); @@ -541,6 +558,16 @@ void gpgpu_sim::set_kernel_done( kernel_info_t *kernel ) assert( k != m_running_kernels.end() ); } +void gpgpu_sim::stop_all_running_kernels(){ + std::vector::iterator k; + for(k = m_running_kernels.begin(); k != m_running_kernels.end(); ++k){ + if(*k != NULL){ // If a kernel is active + set_kernel_done(*k); // Stop the kernel + assert(*k==NULL); + } + } +} + void set_ptx_warp_size(const struct core_config * warp_size); gpgpu_sim::gpgpu_sim( const gpgpu_sim_config &config ) @@ -564,6 +591,7 @@ gpgpu_sim::gpgpu_sim( const gpgpu_sim_config &config ) gpu_sim_insn = 0; gpu_tot_sim_insn = 0; gpu_tot_issued_cta = 0; + m_total_cta_launched = 0; gpu_deadlock = false; @@ -720,6 +748,7 @@ void gpgpu_sim::update_stats() { m_memory_stats->memlatstat_lat_pw(); gpu_tot_sim_cycle += gpu_sim_cycle; gpu_tot_sim_insn += gpu_sim_insn; + gpu_tot_issued_cta += m_total_cta_launched; } void gpgpu_sim::print_stats() @@ -892,7 +921,7 @@ void gpgpu_sim::gpu_print_stat() printf("gpu_tot_sim_cycle = %lld\n", gpu_tot_sim_cycle+gpu_sim_cycle); printf("gpu_tot_sim_insn = %lld\n", gpu_tot_sim_insn+gpu_sim_insn); printf("gpu_tot_ipc = %12.4f\n", (float)(gpu_tot_sim_insn+gpu_sim_insn) / (gpu_tot_sim_cycle+gpu_sim_cycle)); - printf("gpu_tot_issued_cta = %lld\n", gpu_tot_issued_cta); + printf("gpu_tot_issued_cta = %lld\n", gpu_tot_issued_cta + m_total_cta_launched); -- cgit v1.3 From d3a28ecd166dbbb46804b1c73de139a0512b0d64 Mon Sep 17 00:00:00 2001 From: Tayler Hetherington Date: Fri, 5 Jun 2015 15:46:35 -0700 Subject: Fixing bug with local stats not being reset on call to update_stats. Added code to remove the trailing newline character from the C++ name de-mangling fix. Also, fixed small bug with previous commit --- src/cuda-sim/ptx_ir.cc | 5 ++++- src/gpgpu-sim/gpu-sim.cc | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src/gpgpu-sim/gpu-sim.cc') diff --git a/src/cuda-sim/ptx_ir.cc b/src/cuda-sim/ptx_ir.cc index fa37cc4..751b3f4 100644 --- a/src/cuda-sim/ptx_ir.cc +++ b/src/cuda-sim/ptx_ir.cc @@ -1258,10 +1258,13 @@ unsigned function_info::print_insn( unsigned pc, FILE * fp ) const char buffer[1024]; memset(command, 0, 1024); memset(buffer, 0, 1024); - snprintf(command,1024,"c++filt -p %s\n",m_name.c_str()); + snprintf(command,1024,"c++filt -p %s",m_name.c_str()); FILE *p = popen(command,"r"); buffer[0]=0; fgets(buffer, 1023, p); + // Remove trailing "\n" in buffer + char *c; + if ((c=strchr(buffer, '\n')) != NULL) *c = '\0'; fprintf(fp,"%s",buffer); if ( index >= m_instr_mem_size ) { fprintf(fp, "", m_start_PC + m_instr_mem_size - 1 ); diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc index 32de005..eafb909 100644 --- a/src/gpgpu-sim/gpu-sim.cc +++ b/src/gpgpu-sim/gpu-sim.cc @@ -520,7 +520,7 @@ kernel_info_t *gpgpu_sim::select_kernel() { for(unsigned n=0; n < m_running_kernels.size(); n++ ) { unsigned idx = (n+m_last_issued_kernel+1)%m_config.max_concurrent_kernel; - if( kernel_more_cta_left(m_running_kernels[idx] ){ + if( kernel_more_cta_left(m_running_kernels[idx]) ){ m_last_issued_kernel=idx; // record this kernel for stat print if it is the first time this kernel is selected for execution unsigned launch_uid = m_running_kernels[idx]->get_uid(); @@ -749,6 +749,10 @@ void gpgpu_sim::update_stats() { gpu_tot_sim_cycle += gpu_sim_cycle; gpu_tot_sim_insn += gpu_sim_insn; gpu_tot_issued_cta += m_total_cta_launched; + + gpu_sim_cycle = 0; + gpu_sim_insn = 0; + m_total_cta_launched = 0; } void gpgpu_sim::print_stats() -- cgit v1.3