summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpgpu-sim')
-rw-r--r--src/gpgpu-sim/shader.cc13
-rw-r--r--src/gpgpu-sim/shader.h7
2 files changed, 20 insertions, 0 deletions
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc
index db6a532..905139c 100644
--- a/src/gpgpu-sim/shader.cc
+++ b/src/gpgpu-sim/shader.cc
@@ -447,6 +447,12 @@ void shader_core_stats::print( FILE* fout ) const
fprintf(fout,"gpgpu_gmem_st_divergence_hist ");
gpgpu_gmem_st_divergence_hist->fprint(fout);
fprintf(fout,"\n");
+ fprintf(fout,"gpgpu_shmem_divergence_hist ");
+ gpgpu_shmem_divergence_hist->fprint(fout);
+ fprintf(fout,"\n");
+ fprintf(fout,"warp_inst_classification ");
+ warp_inst_classification->fprint(fout);
+ fprintf(fout,"\n");
fprintf(fout, "gpgpu_n_load_insn = %d\n", gpgpu_n_load_insn);
fprintf(fout, "gpgpu_n_store_insn = %d\n", gpgpu_n_store_insn);
@@ -752,6 +758,9 @@ void shader_core_ctx::func_exec_inst( warp_inst_t &inst )
{
unsigned starting_queue_size;
execute_warp_inst_t(inst);
+ if (inst.op_classification) {
+ m_stats->warp_inst_classification->add2bin(inst.op_classification);
+ }
if( inst.is_load() || inst.is_store() ) {
starting_queue_size = inst.accessq_count();
inst.generate_mem_accesses();
@@ -761,6 +770,10 @@ void shader_core_ctx::func_exec_inst( warp_inst_t &inst )
else if (inst.is_store())
m_stats->gpgpu_gmem_st_divergence_hist->add2bin(inst.accessq_count() - starting_queue_size);
}
+ else if ( inst.space.get_type() == shared_space ) {
+ m_stats->gpgpu_shmem_divergence_hist->add2bin(inst.get_cycles());
+ }
+
m_stats->gpgpu_mem_divergence_hist->add2bin(inst.accessq_count() - starting_queue_size);
}
}
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h
index da7eb32..9fd1ecb 100644
--- a/src/gpgpu-sim/shader.h
+++ b/src/gpgpu-sim/shader.h
@@ -1477,6 +1477,9 @@ struct shader_core_stats_pod {
linear_histogram* gpgpu_mem_divergence_hist;
linear_histogram* gpgpu_gmem_ld_divergence_hist;
linear_histogram* gpgpu_gmem_st_divergence_hist;
+ linear_histogram* gpgpu_shmem_divergence_hist;
+
+ linear_histogram* warp_inst_classification;
int gpgpu_n_mem_l2_writeback;
int gpgpu_n_mem_l1_write_allocate;
@@ -1549,6 +1552,9 @@ public:
gpgpu_mem_divergence_hist = new linear_histogram(1, "", config->warp_size+1);
gpgpu_gmem_ld_divergence_hist = new linear_histogram(1, "", config->warp_size+1);
gpgpu_gmem_st_divergence_hist = new linear_histogram(1, "", config->warp_size+1);
+ gpgpu_shmem_divergence_hist = new linear_histogram(1, "", config->warp_size+1);
+
+ warp_inst_classification = new linear_histogram(1, "", 12);
m_shader_dynamic_warp_issue_distro.resize( config->num_shader() );
m_shader_warp_slot_issue_distro.resize( config->num_shader() );
@@ -1566,6 +1572,7 @@ public:
free(gpgpu_mem_divergence_hist);
free(gpgpu_gmem_ld_divergence_hist);
free(gpgpu_gmem_st_divergence_hist);
+ free(warp_inst_classification);
}
void new_grid()