summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim
diff options
context:
space:
mode:
authorDavit Grigoryan <[email protected]>2026-05-04 01:22:57 +0000
committerDavit Grigoryan <[email protected]>2026-05-04 01:22:57 +0000
commitd55b8286855c949bae0e019dfe020c20799c6770 (patch)
tree709038615972a390465a87561e031175880040c9 /src/gpgpu-sim
parent2e35f844aac74403fc3021682fab0231195a69d3 (diff)
fix sb release bug for static xor shuffleHEADmain
Diffstat (limited to 'src/gpgpu-sim')
-rw-r--r--src/gpgpu-sim/shader.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc
index ac5cd09..7209a82 100644
--- a/src/gpgpu-sim/shader.cc
+++ b/src/gpgpu-sim/shader.cc
@@ -2251,9 +2251,17 @@ void scheduler_unit::try_intra_warp_coissue(
m_stats->coissue_denied_by_scoreboard[get_sid()]++;
continue;
}
- unsigned sec_active = sec_mask_eff.count();
- unsigned sec_sets_needed = (sec_active + set_width - 1) / set_width;
- if (sec_sets_needed > available_sets) {
+ // Use the same feasibility test as inter coissue. Under compaction != 2
+ // partitions are fixed by thread_id, so the coissuer's set positions
+ // can overlap the composite's even when (active/set_width) <=
+ // available_sets. merge_simd_sets silently drops overlapping coissuer
+ // sets while the access was already injected, leaving
+ // m_pending_writes_secondary unincremented but later decremented at
+ // writeback (underflow on sb0/sb2, deadlock on sb1).
+ unsigned sec_sets_needed = 0;
+ if (!check_coissue_feasibility(co_issue_composite, sec_inst, sec_mask_eff,
+ primary_warp_id, available_sets,
+ &sec_sets_needed)) {
m_stats->coissue_denied_by_no_sets[get_sid()]++;
continue;
}