summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/abstract_hardware_model.h')
-rw-r--r--src/abstract_hardware_model.h35
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;