summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.h
diff options
context:
space:
mode:
authorDavit Grigoryan <[email protected]>2026-04-11 03:49:00 +0000
committerDavit Grigoryan <[email protected]>2026-04-11 03:49:00 +0000
commit8b3b5bbf710302ad3a835626477dc1bf2d317952 (patch)
tree3584f8937b4bb67a8b5bda3262e872a5e04c467a /src/abstract_hardware_model.h
parent6fe5349343b27a8919734fb4900dd2324cdf6c60 (diff)
initial impl of mimd timing model
Diffstat (limited to 'src/abstract_hardware_model.h')
-rw-r--r--src/abstract_hardware_model.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h
index 948e226..f191ab9 100644
--- a/src/abstract_hardware_model.h
+++ b/src/abstract_hardware_model.h
@@ -1118,9 +1118,11 @@ struct simd_set_info {
unsigned thread_ids[MAX_WARP_SIZE]; // Original thread IDs for each lane (max set_width used)
unsigned num_active_threads; // popcount of set_active_mask
bool valid; // Whether this set has any active threads
+ const inst_t *source_inst; // Pointer to static decoded instruction (for MIMD)
simd_set_info()
- : set_id(0), warp_id(0), num_active_threads(0), valid(false) {
+ : set_id(0), warp_id(0), num_active_threads(0), valid(false),
+ source_inst(NULL) {
set_active_mask.reset();
active_mask_in_warp.reset();
for (unsigned i = 0; i < MAX_WARP_SIZE; i++) thread_ids[i] = 0;
@@ -1186,6 +1188,10 @@ class warp_inst_t : public inst_t {
}
unsigned num_active_simd_sets() const;
bool has_simd_sets() const { return !m_simd_sets.empty(); }
+ void merge_simd_sets(const std::vector<simd_set_info> &other_sets);
+ void set_source_inst_on_sets(const inst_t *src);
+ static bool simd_sets_overlap(const std::vector<simd_set_info> &a,
+ const std::vector<simd_set_info> &b);
const active_mask_t &get_active_mask() const { return m_warp_active_mask; }
void completed(unsigned long long cycle)