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