summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/scoreboard.cc
diff options
context:
space:
mode:
authorDavit Grigoryan <[email protected]>2026-04-28 09:50:44 +0000
committerDavit Grigoryan <[email protected]>2026-04-28 09:50:44 +0000
commit3d4d274eb3a6a23a5924b557d010590e219c5256 (patch)
tree451bc70a5292e9cc055645f2d7365c3332df8385 /src/gpgpu-sim/scoreboard.cc
parent2e2f1c89a6b296c9cb28c8e8b0fabb670b4ba3f7 (diff)
fix atomic counters; add more dbg prints
Diffstat (limited to 'src/gpgpu-sim/scoreboard.cc')
-rw-r--r--src/gpgpu-sim/scoreboard.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/gpgpu-sim/scoreboard.cc b/src/gpgpu-sim/scoreboard.cc
index bcaea56..6cdcaf5 100644
--- a/src/gpgpu-sim/scoreboard.cc
+++ b/src/gpgpu-sim/scoreboard.cc
@@ -269,3 +269,25 @@ void Scoreboard::dumpAccounting(FILE* out) const {
sec_avg_dur, m_sec_max_duration_cycles, m_sec_clear_calls,
m_sec_clear_regs_dropped);
}
+
+// Read-only diagnostic. Prints the primary and secondary scoreboard
+// register sets for one warp. Called from deadlock_check() under
+// MEMCO_DBG_DEADLOCK to help localize a stuck warp.
+void Scoreboard::dump_warp_state(FILE *out, unsigned wid) const {
+ if (wid >= reg_table.size()) return;
+ fprintf(out, " primary_reg_table[%u] (size=%zu):", wid,
+ reg_table[wid].size());
+ for (auto r : reg_table[wid]) fprintf(out, " r%u", r);
+ fprintf(out, "\n");
+ fprintf(out, " sec_reg_table[%u] (size=%zu):", wid,
+ sec_reg_table[wid].size());
+ for (auto r : sec_reg_table[wid]) fprintf(out, " r%u", r);
+ fprintf(out, "\n");
+ // Long-op registers — relevant for stuck loads
+ if (wid < longopregs.size() && !longopregs[wid].empty()) {
+ fprintf(out, " longopregs[%u] (size=%zu):", wid,
+ longopregs[wid].size());
+ for (auto r : longopregs[wid]) fprintf(out, " r%u", r);
+ fprintf(out, "\n");
+ }
+}