diff options
| -rw-r--r-- | src/gpgpu-sim/shader.cc | 10 | ||||
| -rw-r--r-- | src/gpgpu-sim/shader.h | 11 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc index 1ede609..72a1936 100644 --- a/src/gpgpu-sim/shader.cc +++ b/src/gpgpu-sim/shader.cc @@ -426,6 +426,16 @@ void shader_core_stats::print( FILE* fout ) const fprintf(fout, "\n"); } +void shader_core_stats::event_warp_issued( unsigned s_id, unsigned warp_id, unsigned num_issued, unsigned dynamic_warp_id ) { + assert( warp_id <= m_config->max_warps_per_shader ); + for ( unsigned i = 0; i < num_issued; ++i ) { + if ( m_shader_dynamic_warp_issue_distro[ s_id ].size() <= dynamic_warp_id ) { + m_shader_dynamic_warp_issue_distro[ s_id ].resize(dynamic_warp_id + 1); + } + ++m_shader_dynamic_warp_issue_distro[ s_id ][ dynamic_warp_id ]; + } +} + void shader_core_stats::visualizer_print( gzFile visualizer_file ) { // warp divergence breakdown diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h index c5a2ab2..5699115 100644 --- a/src/gpgpu-sim/shader.h +++ b/src/gpgpu-sim/shader.h @@ -210,6 +210,7 @@ public: unsigned get_cta_id() const { return m_cta_id; } unsigned get_dynamic_warp_id() const { return m_dynamic_warp_id; } + unsigned get_warp_id() const { return m_warp_id; } private: static const unsigned IBUFFER_SIZE=2; @@ -1147,6 +1148,7 @@ struct shader_core_config : public core_config struct shader_core_stats_pod { + void* shader_core_stats_pod_start[]; // DO NOT MOVE FROM THE TOP - spaceless pointer to the start of this structure unsigned long long *shader_cycles; unsigned *m_num_sim_insn; // number of scalar thread instructions committed by this shader core unsigned *m_num_sim_winsn; // number of warp instructions committed by this shader core @@ -1236,7 +1238,7 @@ public: shader_core_stats( const shader_core_config *config ) { m_config = config; - shader_core_stats_pod *pod = this; + shader_core_stats_pod *pod = reinterpret_cast< shader_core_stats_pod * > ( this->shader_core_stats_pod_start ); memset(pod,0,sizeof(shader_core_stats_pod)); shader_cycles=(unsigned long long *) calloc(config->num_shader(),sizeof(unsigned long long )); m_num_sim_insn = (unsigned*) calloc(config->num_shader(),sizeof(unsigned)); @@ -1292,17 +1294,24 @@ public: gpgpu_n_shmem_bank_access = (unsigned *)calloc(config->num_shader(), sizeof(unsigned)); + m_shader_dynamic_warp_issue_distro.resize( config->num_shader() ); + } + void new_grid() { } + void event_warp_issued( unsigned s_id, unsigned warp_id, unsigned num_issued, unsigned dynamic_warp_id ); + void visualizer_print( gzFile visualizer_file ); void print( FILE *fout ) const; private: const shader_core_config *m_config; + // Counts the instructions issued for each dynamic warp. + std::vector< std::vector<unsigned> > m_shader_dynamic_warp_issue_distro; friend class power_stat_t; friend class shader_core_ctx; |
