summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/abstract_hardware_model.h7
-rw-r--r--src/cuda-sim/cuda-sim.cc4
-rw-r--r--src/gpgpu-sim/shader.cc13
-rw-r--r--src/gpgpu-sim/shader.h7
4 files changed, 30 insertions, 1 deletions
diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h
index cec75f9..9ba31d9 100644
--- a/src/abstract_hardware_model.h
+++ b/src/abstract_hardware_model.h
@@ -798,6 +798,7 @@ public:
arch_reg.dst[i] = -1;
}
isize=0;
+ op_classification = 0;
}
bool valid() const { return m_decoded; }
virtual void print_insn( FILE *fp ) const
@@ -816,6 +817,7 @@ public:
address_type pc; // program counter address of instruction
unsigned isize; // size of instruction in bytes
op_type op; // opcode (uarch visible)
+ int op_classification; // classification of opcode for statistics purpopses
barrier_type bar_type;
reduction_type red_type;
@@ -1023,6 +1025,11 @@ public:
return cycles > 0;
}
+ unsigned get_cycles()
+ {
+ return cycles;
+ }
+
void print( FILE *fout ) const;
unsigned get_uid() const { return m_uid; }
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index 17a7798..169c491 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -1331,8 +1331,10 @@ void ptx_thread_info::ptx_exec_inst( warp_inst_t &inst, unsigned lane_id)
if ( gpgpu_ptx_instruction_classification ) {
init_inst_classification_stat();
- if (op_classification)
+ if (op_classification) {
StatAddSample( g_inst_classification_stat[g_ptx_kernel_count], op_classification);
+ inst.op_classification = op_classification;
+ }
if (pI->get_space().get_type())
StatAddSample( g_inst_mem_classification_stat[g_ptx_kernel_count], ( int )pI->get_space().get_type());
StatAddSample( g_inst_op_classification_stat[g_ptx_kernel_count], (int) pI->get_opcode() );
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()