summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gpgpu-sim/shader.cc10
-rw-r--r--src/gpgpu-sim/shader.h11
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;