summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gpgpu-sim/gpu-sim.cc4
-rw-r--r--src/gpgpu-sim/shader.cc10
-rw-r--r--src/gpgpu-sim/stat-tool.cc5
3 files changed, 18 insertions, 1 deletions
diff --git a/src/gpgpu-sim/gpu-sim.cc b/src/gpgpu-sim/gpu-sim.cc
index cc47da9..ddee6eb 100644
--- a/src/gpgpu-sim/gpu-sim.cc
+++ b/src/gpgpu-sim/gpu-sim.cc
@@ -514,7 +514,9 @@ void gpgpu_sim::init()
m_cluster[i]->reinit();
m_shader_stats->new_grid();
// initialize the control-flow, memory access, memory latency logger
- create_thread_CFlogger( m_config.num_shader(), m_shader_config->n_thread_per_shader, 0, m_config.gpgpu_cflog_interval );
+ if (m_config.g_visualizer_enabled) {
+ create_thread_CFlogger( m_config.num_shader(), m_shader_config->n_thread_per_shader, 0, m_config.gpgpu_cflog_interval );
+ }
shader_CTA_count_create( m_config.num_shader(), m_config.gpgpu_cflog_interval);
if (m_config.gpgpu_cflog_interval != 0) {
insn_warp_occ_create( m_config.num_shader(), m_shader_config->warp_size );
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc
index 3d37688..0275757 100644
--- a/src/gpgpu-sim/shader.cc
+++ b/src/gpgpu-sim/shader.cc
@@ -2204,4 +2204,14 @@ void shader_core_ctx::checkExecutionStatusAndUpdate(warp_inst_t &inst, unsigned
m_warp[inst.warp_id()].set_completed(t);
m_warp[inst.warp_id()].ibuffer_flush();
}
+
+ // PC-Histogram Update
+ unsigned warp_id = inst.warp_id();
+ unsigned pc = inst.pc;
+ for (unsigned t = 0; t < m_config->warp_size; t++) {
+ if (inst.active(t)) {
+ int tid = warp_id * m_config->warp_size + t;
+ cflog_update_thread_pc(m_sid, tid, pc);
+ }
+ }
}
diff --git a/src/gpgpu-sim/stat-tool.cc b/src/gpgpu-sim/stat-tool.cc
index 77e4aca..94998f2 100644
--- a/src/gpgpu-sim/stat-tool.cc
+++ b/src/gpgpu-sim/stat-tool.cc
@@ -149,10 +149,12 @@ void destroy_thread_CFlogger( )
void cflog_update_thread_pc( int logger_id, int thread_id, address_type pc )
{
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
if (thread_id < 0) return;
thread_CFlogger[logger_id]->update_thread_pc(thread_id, pc);
}
+// deprecated
void cflog_snapshot( int logger_id, unsigned long long cycle )
{
thread_CFlogger[logger_id]->snap_shot(cycle);
@@ -160,6 +162,7 @@ void cflog_snapshot( int logger_id, unsigned long long cycle )
void cflog_print(FILE *fout)
{
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
for (int i = 0; i < n_thread_CFloggers; i++) {
thread_CFlogger[i]->print_histo(fout);
}
@@ -167,6 +170,7 @@ void cflog_print(FILE *fout)
void cflog_visualizer_print(FILE *fout)
{
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
for (int i = 0; i < n_thread_CFloggers; i++) {
thread_CFlogger[i]->print_visualizer(fout);
}
@@ -174,6 +178,7 @@ void cflog_visualizer_print(FILE *fout)
void cflog_visualizer_gzprint(gzFile fout)
{
+ if (thread_CFlogger == NULL) return; // this means no visualizer output
for (int i = 0; i < n_thread_CFloggers; i++) {
thread_CFlogger[i]->print_visualizer(fout);
}