diff options
| author | Davit Grigoryan <[email protected]> | 2026-04-11 03:49:00 +0000 |
|---|---|---|
| committer | Davit Grigoryan <[email protected]> | 2026-04-11 03:49:00 +0000 |
| commit | 8b3b5bbf710302ad3a835626477dc1bf2d317952 (patch) | |
| tree | 3584f8937b4bb67a8b5bda3262e872a5e04c467a /src/abstract_hardware_model.h | |
| parent | 6fe5349343b27a8919734fb4900dd2324cdf6c60 (diff) | |
initial impl of mimd timing model
Diffstat (limited to 'src/abstract_hardware_model.h')
| -rw-r--r-- | src/abstract_hardware_model.h | 8 |
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) |
