summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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;
}