summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/shader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpgpu-sim/shader.h')
-rw-r--r--src/gpgpu-sim/shader.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/gpgpu-sim/shader.h b/src/gpgpu-sim/shader.h
index 42d807c..2800b81 100644
--- a/src/gpgpu-sim/shader.h
+++ b/src/gpgpu-sim/shader.h
@@ -2096,6 +2096,22 @@ struct shader_core_stats_pod {
unsigned long long *coissue_total_active_lanes;
unsigned long long *coissue_composite_cycles;
unsigned long long *simd_sets_used_histogram;
+
+ // --- Temporary diagnostic counters for inter-warp candidate filters ---
+ // These quantify the "silent" rejections before the existing
+ // coissue_denied_by_* counters. Used to diagnose why inter-warp
+ // co-issue never fires on stall-bound workloads like `nw` and `lud`.
+ unsigned long long *coissue_cand_seen;
+ unsigned long long *coissue_skipped_null;
+ unsigned long long *coissue_skipped_done_exit;
+ unsigned long long *coissue_skipped_is_primary;
+ unsigned long long *coissue_skipped_picked_earlier;
+ unsigned long long *coissue_skipped_ibuffer_empty;
+ unsigned long long *coissue_skipped_waiting;
+ unsigned long long *coissue_skipped_simt_blocked;
+ unsigned long long *coissue_skipped_no_inst;
+ unsigned long long *coissue_skipped_pc_mismatch;
+ unsigned long long *coissue_skipped_samepc_pass0;
};
class shader_core_stats : public shader_core_stats_pod {
@@ -2229,6 +2245,30 @@ class shader_core_stats : public shader_core_stats_pod {
unsigned nbins = config->gpgpu_num_simd_sets + 1;
simd_sets_used_histogram = (unsigned long long *)calloc(
(size_t)config->num_shader() * nbins, sizeof(unsigned long long));
+
+ // Diagnostic counters
+ coissue_cand_seen = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_null = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_done_exit = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_is_primary = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_picked_earlier = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_ibuffer_empty = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_waiting = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_simt_blocked = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_no_inst = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_pc_mismatch = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
+ coissue_skipped_samepc_pass0 = (unsigned long long *)calloc(
+ config->num_shader(), sizeof(unsigned long long));
}
~shader_core_stats() {
@@ -2290,6 +2330,17 @@ class shader_core_stats : public shader_core_stats_pod {
free(coissue_total_active_lanes);
free(coissue_composite_cycles);
free(simd_sets_used_histogram);
+ free(coissue_cand_seen);
+ free(coissue_skipped_null);
+ free(coissue_skipped_done_exit);
+ free(coissue_skipped_is_primary);
+ free(coissue_skipped_picked_earlier);
+ free(coissue_skipped_ibuffer_empty);
+ free(coissue_skipped_waiting);
+ free(coissue_skipped_simt_blocked);
+ free(coissue_skipped_no_inst);
+ free(coissue_skipped_pc_mismatch);
+ free(coissue_skipped_samepc_pass0);
}
void new_grid() {}