---
name: mgsc-table-probe
description: 运行或分析 MGSC 微测试的 SC 子表 A/B 实验，用分支与 MGSCTRACE 统计归因并改进测试。
---

# MGSC 表探测

## 概览
运行标准化的 SC 表 A/B 实验，并产出分支级别的归因结果：
- `summary.csv`：case 级别的 `off` 与各 profile 的 delta 汇总。
- `branch_delta.csv`：分支级别的误预测 delta，以及 SC 修复/伤害与表贡献比例。
- `report.md`：便于人工快速阅读的排序报告。

这个 skill 的目标是快速迭代 SC 测试质量，而不是做完整的性能调优。

## 快速开始

1) 对所有 `mgsc_test` 二进制执行 probe：
```bash
python3 .agents/skills/mgsc-table-probe/scripts/mgsc_table_probe.py \
  --outdir debug/sc_table_probe \
  --profiles off,l_only,g_only,i_only,full \
  --max-workers 4
```

2) 快速检查单个 case：
```bash
python3 .agents/skills/mgsc-table-probe/scripts/mgsc_table_probe.py \
  --outdir debug/sc_table_probe_smoke \
  --tests fp_sc_alias_pair \
  --profiles off,g_only,i_only \
  --max-workers 1
```

3) 仅重建报告（不重新运行 gem5）：
```bash
python3 .agents/skills/mgsc-table-probe/scripts/mgsc_table_probe.py \
  --outdir debug/sc_table_probe \
  --profiles off,l_only,g_only,i_only,full \
  --skip-run
```

## 路径解析

- GEM5 仓库：优先使用 `GEM5_HOME`，其次从当前目录和脚本位置向上查找 `SConstruct` 与 `configs/example/kmhv3.py`。
- MGSC 测试：优先使用 `AM_HOME`；未设置时才采用本机默认 `/nfs/home/yanyue/tools/nexus-am`。
- 所有路径都可用 `--gem5-bin`、`--config`、`--cpt-dir` 和 `--src-dir` 显式覆盖。

个人 home 路径只是方便本机使用的 fallback，不是跨机器前提。脚本会在创建运行任务前检查 checkpoint 目录、gem5 binary 和配置文件。

## 工作流

1) **基线 + 单表隔离 profile**
- 始终包含 `off`。
- 在检查 `full` 之前，先加入单表 profile（如 `g_only`、`i_only`）。

2) **快速筛选有价值的测试**
- 在 `summary.csv` 中，优先关注满足 `condMiss_delta < 0` 且 `mgsc_net_use > 0` 的 case。

3) **筛选有价值的分支**
- 在 `branch_delta.csv` 中，优先关注满足以下条件的行：
  - `delta_misp < 0`
  - `focus_decisive_ratio` 较高
  - `focus_agree_fix_ratio` 较高

4) **决定下一步微测试方向**
- 如果 `g_only` 很少带来改善，且 `focus_decisive_ratio(g)` 很低，说明 global-history 模式较弱。
- 如果 `i_only` 从未带来帮助，说明循环/迭代相位信号暴露得还不够。
- 可以参考 `references/test-patterns.md` 里的模式来编写下一个测试。

## 输出

- `debug/sc_table_probe/summary.csv`
- `debug/sc_table_probe/branch_delta.csv`
- `debug/sc_table_probe/report.md`
- `debug/sc_table_probe/report.json`

## 关键参数

- `--profiles`：从 `off,l_only,g_only,i_only,full` 中选择。
- `--tests`：逗号分隔的测试名（不带后缀），例如 `fp_sc_alias_pair,imli_iter`。
- `--extra-param`：透传额外的 gem5 `--param`。
- `--copy-cpt-to-tmp`：避免路径访问问题。
- `--skip-run`：仅生成报告，不执行运行。

## 注意事项

- 除非你明确要评估交互效应，否则在做 SC 子表归因时应保持 `microtage` 关闭。
- 不同 profile 之间必须使用同一组 checkpoint，否则 delta 无效。
- 做 branch PC 映射时，使用 mgsc_test 构建目录下的 `*-riscv64-xs.txt` 反汇编文件。

## 参考资料

- 关于面向 G/IMLI 的微测试模式，参见 `references/test-patterns.md`。
- `scripts/mgsc_trace_report.py` 可用于对已有 `bp.db` 做更细的 branch/run 级门限与表贡献报告；它不负责重跑 gem5。
