aboutsummaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/shader.h
diff options
context:
space:
mode:
authorTor Aamodt <[email protected]>2010-11-29 09:20:00 -0800
committerTor Aamodt <[email protected]>2010-11-29 09:20:00 -0800
commit5a52fa70980d905f1117250d0508c529293c9049 (patch)
tree8fb0ec11465ef4779ec8a1fb63bcdba551794cf0 /src/gpgpu-sim/shader.h
parent1effdbcc0f33f2b73288802d18d3f842978d7004 (diff)
integrate mask changes
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 8170]
Diffstat (limited to 'src/gpgpu-sim/shader.h')
-rw-r--r--src/gpgpu-sim/shader.h24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h
index 17dbd9e..e015b11 100644
--- a/src/gpgpu-sim/shader.h
+++ b/src/gpgpu-sim/shader.h
@@ -278,28 +278,32 @@ inline unsigned hw_tid_from_wid(unsigned wid, unsigned warp_size, unsigned i){re
inline unsigned wid_from_hw_tid(unsigned tid, unsigned warp_size){return tid/warp_size;};
-// bounded stack that implements pdom reconvergence (see MICRO'07 paper)
-class pdom_warp_ctx_t {
+// bounded stack that implements simt reconvergence using pdom mechanism from MICRO'07 paper
+
+#define MAX_WARP_SIZE_SIMT_STACK MAX_WARP_SIZE
+typedef std::bitset<MAX_WARP_SIZE_SIMT_STACK> simt_mask_t;
+
+class simt_stack {
public:
- pdom_warp_ctx_t( unsigned wid, class shader_core_ctx *shdr );
+ simt_stack( unsigned wid, class shader_core_ctx *shdr );
void reset();
- void launch( address_type start_pc, unsigned active_mask );
- void pdom_update_warp_mask();
+ void launch( address_type start_pc, const simt_mask_t &active_mask );
+ void update();
- unsigned get_active_mask() const;
+ const simt_mask_t &get_active_mask() const;
void get_pdom_stack_top_info( unsigned *pc, unsigned *rpc ) const;
unsigned get_rp() const;
void print(FILE*fp) const;
-private:
+protected:
unsigned m_warp_id;
class shader_core_ctx *m_shader;
unsigned m_stack_top;
unsigned m_warp_size;
address_type *m_pc;
- unsigned int *m_active_mask;
+ simt_mask_t *m_active_mask;
address_type *m_recvg_pc;
unsigned int *m_calldepth;
@@ -1161,7 +1165,7 @@ private:
void register_cta_thread_exit(int cta_num );
void decode();
- void issue_warp( warp_inst_t *&warp, const warp_inst_t *pI, unsigned active_mask, unsigned warp_id );
+ void issue_warp( warp_inst_t *&warp, const warp_inst_t *pI, const active_mask_t &active_mask, unsigned warp_id );
void func_exec_inst( warp_inst_t &inst );
address_type translate_local_memaddr(address_type localaddr, unsigned tid, unsigned num_shader );
@@ -1208,7 +1212,7 @@ private:
std::vector<shd_warp_t> m_warp; // per warp information array
barrier_set_t m_barriers;
ifetch_buffer_t m_inst_fetch_buffer;
- pdom_warp_ctx_t **m_pdom_warp; // pdom reconvergence context for each warp
+ simt_stack **m_pdom_warp; // pdom reconvergence context for each warp
warp_inst_t** m_pipeline_reg;
Scoreboard *m_scoreboard;
opndcoll_rfu_t m_operand_collector;