diff options
Diffstat (limited to 'src/abstract_hardware_model.h')
| -rw-r--r-- | src/abstract_hardware_model.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h index d3f0797..4a655b3 100644 --- a/src/abstract_hardware_model.h +++ b/src/abstract_hardware_model.h @@ -1527,6 +1527,18 @@ class simt_splits_table { bool blocked(); unsigned address_to_entry(warp_inst_t inst); + unsigned get_active_split_id() const { return m_active_split; } + + // SIMD lane partitioning: secondary split access and targeted operations + bool has_secondary_split() const { return m_fifo_queue.size() >= 2; } + bool get_secondary_split_info(unsigned *pc, unsigned *rpc, unsigned *split_id, + simt_mask_t *mask) const; + bool is_split_valid(unsigned split_id) const; + void get_split_info(unsigned split_id, unsigned *pc, + simt_mask_t *mask) const; + void update_pc_for_split(unsigned split_id, address_type new_pc); + bool move_split_to_front(unsigned split_id); + protected: unsigned m_warp_size; unsigned m_warp_id; @@ -1664,6 +1676,29 @@ class simt_tables { tmp_active_mask, type, recvged); } + unsigned get_active_split_id() const { + return m_simt_splits_table->get_active_split_id(); + } + // SIMD lane partitioning: secondary split access and targeted operations + bool has_secondary_split() const { + return m_simt_splits_table->has_secondary_split(); + } + bool get_secondary_split_info(unsigned *pc, unsigned *rpc, unsigned *split_id, + simt_mask_t *mask) const { + return m_simt_splits_table->get_secondary_split_info(pc, rpc, split_id, + mask); + } + bool is_split_valid(unsigned split_id) const { + return m_simt_splits_table->is_split_valid(split_id); + } + void get_split_info(unsigned split_id, unsigned *pc, + simt_mask_t *mask) const { + m_simt_splits_table->get_split_info(split_id, pc, mask); + } + bool move_split_to_front(unsigned split_id) { + return m_simt_splits_table->move_split_to_front(split_id); + } + private: unsigned m_warp_id; unsigned m_warp_size; |
