summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Aamodt <[email protected]>2010-10-05 22:58:15 -0800
committerTor Aamodt <[email protected]>2010-10-05 22:58:15 -0800
commit474e6d99c8efa9e3b8518eecb059546364370fd9 (patch)
tree4cd74a453048ea8cdcca10169b3fe18cd13ed1a9
parent6cd75fefce592e193ddb2cdc90842664682ff281 (diff)
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]
-rw-r--r--configs/QuadroFX5800/gpgpusim.config1
-rw-r--r--src/abstract_hardware_model.h1
-rw-r--r--src/gpgpu-sim/gpu-sim.cc16
-rw-r--r--src/gpgpu-sim/gpu-sim.h14
-rw-r--r--src/gpgpu-sim/shader.cc3
-rw-r--r--src/gpgpusim_entrypoint.cc2
6 files changed, 23 insertions, 14 deletions
diff --git a/configs/QuadroFX5800/gpgpusim.config b/configs/QuadroFX5800/gpgpusim.config
index 560796d..c0fb71b 100644
--- a/configs/QuadroFX5800/gpgpusim.config
+++ b/configs/QuadroFX5800/gpgpusim.config
@@ -13,7 +13,6 @@
-gpgpu_shader_registers 16384
-gpgpu_shader_core_pipeline 1024:32:32
-gpgpu_shader_cta 8
--gpgpu_pre_mem_stages 0
-gpgpu_pdom_sched_type 8
-gpgpu_simd_model 1
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);
}