diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gpgpu-sim/shader.cc | 6 | ||||
| -rw-r--r-- | src/gpgpu-sim/shader.h | 15 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc index f57cae0..1ede609 100644 --- a/src/gpgpu-sim/shader.cc +++ b/src/gpgpu-sim/shader.cc @@ -69,7 +69,8 @@ shader_core_ctx::shader_core_ctx( class gpgpu_sim *gpu, const struct shader_core_config *config, const struct memory_config *mem_config, shader_core_stats *stats ) - : m_barriers( config->max_warps_per_shader, config->max_cta_per_core ) + : m_barriers( config->max_warps_per_shader, config->max_cta_per_core ), + m_dynamic_warp_id(0) { m_kernel = NULL; m_gpu = gpu; @@ -272,7 +273,8 @@ void shader_core_ctx::init_warps( unsigned cta_id, unsigned start_thread, unsign } } m_simt_stack[i]->launch(start_pc,active_threads); - m_warp[i].init(start_pc,cta_id,i,active_threads); + m_warp[i].init(start_pc,cta_id,i,active_threads, m_dynamic_warp_id); + ++m_dynamic_warp_id; m_not_completed += n_active; } } diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h index 0efb659..c5a2ab2 100644 --- a/src/gpgpu-sim/shader.h +++ b/src/gpgpu-sim/shader.h @@ -108,10 +108,15 @@ public: m_last_fetch=0; m_next=0; } - void init( address_type start_pc, unsigned cta_id, unsigned wid, const std::bitset<MAX_WARP_SIZE> &active ) + void init( address_type start_pc, + unsigned cta_id, + unsigned wid, + const std::bitset<MAX_WARP_SIZE> &active, + unsigned dynamic_warp_id ) { m_cta_id=cta_id; m_warp_id=wid; + m_dynamic_warp_id=dynamic_warp_id; m_next_pc=start_pc; assert( n_completed >= active.count() ); assert( n_completed <= m_warp_size); @@ -204,12 +209,15 @@ public: unsigned get_cta_id() const { return m_cta_id; } + unsigned get_dynamic_warp_id() const { return m_dynamic_warp_id; } + private: static const unsigned IBUFFER_SIZE=2; class shader_core_ctx *m_shader; unsigned m_cta_id; unsigned m_warp_id; unsigned m_warp_size; + unsigned m_dynamic_warp_id; address_type m_next_pc; unsigned n_completed; // number of threads in warp completed @@ -1603,6 +1611,11 @@ private: // used for local address mapping with single kernel launch unsigned kernel_max_cta_per_shader; unsigned kernel_padded_threads_per_cta; + // Used for handing out dynamic warp_ids to new warps. + // the differnece between a warp_id and a dynamic_warp_id + // is that the dynamic_warp_id is a running number unique to every warp + // run on this shader, where the warp_id is the static warp slot. + unsigned m_dynamic_warp_id; }; class simt_core_cluster { |
