From cfed96a0d4f20ea8132d60e028893fed130220a5 Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Thu, 7 Feb 2013 12:45:37 -0800 Subject: Adding in a dynamic warp_id field [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 15198] --- src/gpgpu-sim/shader.cc | 6 ++++-- 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 &active ) + void init( address_type start_pc, + unsigned cta_id, + unsigned wid, + const std::bitset &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 { -- cgit v1.3