summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gpgpu-sim/shader.cc15
-rw-r--r--src/gpgpu-sim/shader.h8
2 files changed, 20 insertions, 3 deletions
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc
index e7204c8..db6a532 100644
--- a/src/gpgpu-sim/shader.cc
+++ b/src/gpgpu-sim/shader.cc
@@ -441,6 +441,12 @@ void shader_core_stats::print( FILE* fout ) const
fprintf(fout,"gpgpu_mem_divergence_hist ");
gpgpu_mem_divergence_hist->fprint(fout);
fprintf(fout,"\n");
+ fprintf(fout,"gpgpu_gmem_ld_divergence_hist ");
+ gpgpu_gmem_ld_divergence_hist->fprint(fout);
+ fprintf(fout,"\n");
+ fprintf(fout,"gpgpu_gmem_st_divergence_hist ");
+ gpgpu_gmem_st_divergence_hist->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);
@@ -746,12 +752,17 @@ void shader_core_ctx::func_exec_inst( warp_inst_t &inst )
{
unsigned starting_queue_size;
execute_warp_inst_t(inst);
- if( inst.is_load() || inst.is_store() )
+ if( inst.is_load() || inst.is_store() ) {
starting_queue_size = inst.accessq_count();
inst.generate_mem_accesses();
if ( inst.space.get_type() == global_space ) {
- m_stats->gpgpu_mem_divergence_hist->add2bin(inst.accessq_count() - starting_queue_size);
+ if (inst.is_load())
+ m_stats->gpgpu_gmem_ld_divergence_hist->add2bin(inst.accessq_count() - starting_queue_size);
+ else if (inst.is_store())
+ m_stats->gpgpu_gmem_st_divergence_hist->add2bin(inst.accessq_count() - starting_queue_size);
}
+ m_stats->gpgpu_mem_divergence_hist->add2bin(inst.accessq_count() - starting_queue_size);
+ }
}
void shader_core_ctx::issue_warp( register_set& pipe_reg_set, const warp_inst_t* next_inst, const active_mask_t &active_mask, unsigned warp_id )
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h
index 45658ac..da7eb32 100644
--- a/src/gpgpu-sim/shader.h
+++ b/src/gpgpu-sim/shader.h
@@ -1475,7 +1475,9 @@ struct shader_core_stats_pod {
//warps combined memory divergence histogram
linear_histogram* gpgpu_mem_divergence_hist;
-
+ linear_histogram* gpgpu_gmem_ld_divergence_hist;
+ linear_histogram* gpgpu_gmem_st_divergence_hist;
+
int gpgpu_n_mem_l2_writeback;
int gpgpu_n_mem_l1_write_allocate;
int gpgpu_n_mem_l2_write_allocate;
@@ -1545,6 +1547,8 @@ public:
gpgpu_n_shmem_bank_access = (unsigned *)calloc(config->num_shader(), sizeof(unsigned));
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);
m_shader_dynamic_warp_issue_distro.resize( config->num_shader() );
m_shader_warp_slot_issue_distro.resize( config->num_shader() );
@@ -1560,6 +1564,8 @@ public:
free(shader_cycle_distro);
free(last_shader_cycle_distro);
free(gpgpu_mem_divergence_hist);
+ free(gpgpu_gmem_ld_divergence_hist);
+ free(gpgpu_gmem_st_divergence_hist);
}
void new_grid()