From 6fe5349343b27a8919734fb4900dd2324cdf6c60 Mon Sep 17 00:00:00 2001 From: Davit Grigoryan Date: Wed, 8 Apr 2026 07:14:50 +0000 Subject: add simple simd lane set partitioning --- src/abstract_hardware_model.cc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/abstract_hardware_model.cc') diff --git a/src/abstract_hardware_model.cc b/src/abstract_hardware_model.cc index dde9d28..316b02b 100644 --- a/src/abstract_hardware_model.cc +++ b/src/abstract_hardware_model.cc @@ -66,6 +66,36 @@ void warp_inst_t::issue(const active_mask_t &mask, unsigned warp_id, m_scheduler_id = sch_id; } +void warp_inst_t::compute_simd_sets(unsigned num_sets, unsigned set_width) { + m_simd_sets.resize(num_sets); + for (unsigned s = 0; s < num_sets; s++) { + simd_set_info &info = m_simd_sets[s]; + info.set_id = s; + info.warp_id = m_warp_id; + info.set_active_mask.reset(); + info.active_mask_in_warp.reset(); + info.num_active_threads = 0; + for (unsigned lane = 0; lane < set_width; lane++) { + unsigned tid = s * set_width + lane; + info.thread_ids[lane] = tid; + if (m_warp_active_mask.test(tid)) { + info.set_active_mask.set(lane); + info.active_mask_in_warp.set(tid); + info.num_active_threads++; + } + } + info.valid = (info.num_active_threads > 0); + } +} + +unsigned warp_inst_t::num_active_simd_sets() const { + unsigned count = 0; + for (unsigned i = 0; i < m_simd_sets.size(); i++) { + if (m_simd_sets[i].valid) count++; + } + return count; +} + checkpoint::checkpoint() { struct stat st = {0}; -- cgit v1.3