diff options
Diffstat (limited to 'src/gpgpu-sim/shader.cc')
| -rw-r--r-- | src/gpgpu-sim/shader.cc | 14 |
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; } |
