From 474e6d99c8efa9e3b8518eecb059546364370fd9 Mon Sep 17 00:00:00 2001 From: Tor Aamodt Date: Tue, 5 Oct 2010 22:58:15 -0800 Subject: simulator "working" on ptxplus, simulated IPC "too low" by about a factor of up to 50% [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7816] --- src/abstract_hardware_model.h | 1 + src/gpgpu-sim/gpu-sim.cc | 16 ++++++---------- src/gpgpu-sim/gpu-sim.h | 14 ++++++++++++-- src/gpgpu-sim/shader.cc | 3 +++ src/gpgpusim_entrypoint.cc | 2 +- 5 files changed, 23 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h index 02d58c2..15a7296 100644 --- a/src/abstract_hardware_model.h +++ b/src/abstract_hardware_model.h @@ -315,6 +315,7 @@ public: fprintf(fp, "%c", ((warp_active_mask[i])?'1':'0') ); } bool active( unsigned thread ) const { return warp_active_mask.test(thread); } + unsigned active_count() const { return warp_active_mask.count(); } bool empty() const { return m_empty; } unsigned warp_id() const { diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc index 7fff9fd..96d5c62 100644 --- a/src/gpgpu-sim/gpu-sim.cc +++ b/src/gpgpu-sim/gpu-sim.cc @@ -113,13 +113,7 @@ unsigned freed_L1write_mfs = 0; unsigned freed_L2write_mfs = 0; unsigned freed_dummy_read_mfs = 0; unsigned long long gpu_sim_cycle = 0; -unsigned long long gpu_sim_insn = 0; -unsigned long long gpu_sim_prev_insn = 0; unsigned long long gpu_tot_sim_cycle = 0; -unsigned long long gpu_tot_sim_insn = 0; -unsigned long long gpu_last_sim_cycle = 0; -unsigned long long gpu_tot_issued_cta = 0; -unsigned long long gpu_tot_completed_thread = 0; unsigned int **concurrent_row_access; //concurrent_row_access[dram chip id][bank id] unsigned int **num_activates; //num_activates[dram chip id][bank id] @@ -143,16 +137,13 @@ int gpu_runtime_stat_flag = 0; unsigned long long gpu_max_cycle = 0; unsigned long long gpu_max_insn = 0; -int gpu_deadlock = 0; unsigned g_next_mf_request_uid = 1; -static unsigned long long last_gpu_sim_insn = 0; int g_total_cta_left; // GPGPU-Sim timing model options int gpu_max_cycle_opt; int gpu_max_insn_opt; int gpu_max_cta_opt; -bool gpu_deadlock_detect; char *gpgpu_shader_core_pipeline_opt; int gpgpu_dram_sched_queue_size; bool gpgpu_flush_cache; @@ -466,6 +457,11 @@ gpgpu_sim::gpgpu_sim() m_shader_stats = (shader_core_stats*)calloc(1,sizeof(shader_core_stats)); m_memory_config = (memory_config*)calloc(1,sizeof(memory_config)); m_memory_stats = NULL; + gpu_sim_insn = 0; + gpu_tot_sim_insn = 0; + gpu_tot_issued_cta = 0; + gpu_tot_completed_thread = 0; + gpu_deadlock = false; } void set_ptx_warp_size(unsigned warp_size); @@ -1397,7 +1393,7 @@ void gpgpu_sim::cycle() if (!(gpu_sim_cycle % 20000)) { // deadlock detection if (gpu_deadlock_detect && gpu_sim_insn == last_gpu_sim_insn) { - gpu_deadlock = 1; + gpu_deadlock = true; } else { last_gpu_sim_insn = gpu_sim_insn; } diff --git a/src/gpgpu-sim/gpu-sim.h b/src/gpgpu-sim/gpu-sim.h index fab1ab8..ac03cbc 100644 --- a/src/gpgpu-sim/gpu-sim.h +++ b/src/gpgpu-sim/gpu-sim.h @@ -269,9 +269,21 @@ private: int m_pdom_sched_type; + // options + bool gpu_deadlock_detect; + + // stats struct shader_core_stats *m_shader_stats; class memory_stats_t *m_memory_stats; + unsigned long long gpu_tot_issued_cta; + unsigned long long gpu_tot_completed_thread; + unsigned long long last_gpu_sim_insn; + + // debug + bool gpu_deadlock; public: + unsigned long long gpu_sim_insn; + unsigned long long gpu_tot_sim_insn; unsigned long long gpu_sim_insn_last_update; unsigned gpu_sim_insn_last_update_sid; }; @@ -280,8 +292,6 @@ public: extern unsigned long long gpu_sim_cycle; extern unsigned long long gpu_tot_sim_cycle; -extern unsigned long long gpu_sim_insn; -extern unsigned long long gpu_tot_sim_insn; extern unsigned g_next_mf_request_uid; // stats diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc index 0d17be4..061952a 100644 --- a/src/gpgpu-sim/shader.cc +++ b/src/gpgpu-sim/shader.cc @@ -1194,6 +1194,9 @@ void shader_core_ctx::writeback() if( !m_pipeline_reg[MM_WB]->empty() ) { m_scoreboard->releaseRegisters( m_pipeline_reg[MM_WB] ); m_warp[m_pipeline_reg[MM_WB]->warp_id()].dec_inst_in_pipeline(); + m_gpu->gpu_sim_insn_last_update_sid = m_sid; + m_gpu->gpu_sim_insn_last_update = gpu_sim_cycle; + m_gpu->gpu_sim_insn += m_pipeline_reg[MM_WB]->active_count(); } move_warp(m_pipeline_reg[WB_RT],m_pipeline_reg[MM_WB]); } diff --git a/src/gpgpusim_entrypoint.cc b/src/gpgpusim_entrypoint.cc index 4f5cffe..7947a8f 100644 --- a/src/gpgpusim_entrypoint.cc +++ b/src/gpgpusim_entrypoint.cc @@ -151,7 +151,7 @@ void print_simulation_time() fflush(stderr); printf("\n\ngpgpu_simulation_time = %u days, %u hrs, %u min, %u sec (%u sec)\n", (unsigned)d, (unsigned)h, (unsigned)m, (unsigned)s, (unsigned)difference ); - printf("gpgpu_simulation_rate = %u (inst/sec)\n", (unsigned)(gpu_tot_sim_insn / difference) ); + printf("gpgpu_simulation_rate = %u (inst/sec)\n", (unsigned)(g_the_gpu.gpu_tot_sim_insn / difference) ); printf("gpgpu_simulation_rate = %u (cycle/sec)\n", (unsigned)(gpu_tot_sim_cycle / difference) ); fflush(stdout); } -- cgit v1.3