name: tage-trace-workflow description: 用于编译 XiangShan RTL trace 版 emu、运行 RTL/gem5 的 TAGE trace、并对 gem5 stats/bp.db 与 RTL CondTrace 做共口径聚合比较。适用于 coremark、SPEC checkpoint slice、sjeng_22213 等单切片对拍与首轮分叉定位。
TAGE Trace Workflow
这个 skill 只做三件事:
- 编译能落
CondTrace_*/microTageTrace的 RTLemu - 运行 gem5 / RTL 的 trace,并固定到相同 instruction window
- 用脚本把 gem5
stats.txt/bp.db和 RTL sqlite db 聚成同口径摘要
1. RTL 编译
在 XiangShan 目录下使用:
make clean
make emu \
EMU_THREADS=8 \
EMU_TRACE=fst \
WITH_DRAMSIM3=1 \
WITH_CONSTANTIN=1 \
WITH_CHISELDB=1 \
WITH_ROLLINGDB=1 \
CONFIG=CHIFrontendDebugConfig \
-j64
编完先做两个 sanity check:
rg -n "CHIFrontendDebugConfig" build/time.log
rg -n "CondTrace_0_write|BpuPredictionTrace_write|microTageTrace_write" build/chisel_db.cpp
如果 CondTrace_0_write() 仍然是空桩,就不要继续跑 trace。
2. RTL 运行
关键点:
--dump-select-db必须是空格分隔的精确表名- 优先只打
CondTrace_0..7,需要更细再加microTageTrace - 尽量先用
-I把窗口限制住
示例:
./build/emu \
--no-diff \
-I 200000 \
-i /nfs/home/share/gem5_ci/checkpoints/coremark-riscv64-xs.bin \
--dump-db \
--dump-select-db "CondTrace_0 CondTrace_1 CondTrace_2 CondTrace_3 CondTrace_4 CondTrace_5 CondTrace_6 CondTrace_7 microTageTrace" \
> /tmp/coremark_tage.out 2>&1
对 .zstd GCPT slice,直接把路径传给 -i 即可。
3. gem5 运行
kmhv3.py 需要 diff 环境变量:
export GCBV_REF_SO=/nfs/home/yanyue/tools/gem5-tools/ref-h/riscv64-nemu-interpreter-so
示例:
./build/RISCV/gem5.opt \
--outdir /tmp/debug/coremark_200k_basic \
./configs/example/kmhv3.py \
-I 200000 \
--generic-rv-cpt /nfs/home/share/gem5_ci/checkpoints/coremark-riscv64-xs.bin \
--raw-cpt \
--enable-bp-db tage basic
说明:
tage会生成TAGEMISSTRACEbasic会额外生成BPTRACE- 先保证 gem5 和 RTL 用同一个
-I
4. 分析顺序
先看计数器,再看 trace:
- gem5
stats.txt中的allocateNeeded / allocateSkipHighestProvider / resolveBranchHasProvider / resolveBranchUseProvider / resolveBranchHasAlt / resolveBranchUseAltTable / resolveBranchUseBaseTable / mispredictBranch* - RTL
CondTrace_*聚出来的同口径总量 - 再看热点 branch 的
provider/alt/useAlt/alloc
注意两个口径坑:
TAGEMISSTRACE.useAlt表示pred.useAlt,不等于 stats 里的resolveBranchUseAltTable- 要和 stats 对齐时,应该优先看
useAlt && altFound
5. 脚本
- RTL 聚合:
[scripts/aggregate_rtl_condtrace.py](scripts/aggregate_rtl_condtrace.py) - gem5/RTL 对拍:
[scripts/compare_gem5_rtl_tage.py](scripts/compare_gem5_rtl_tage.py) - 热点 branch 画像对拍:
[scripts/compare_branch_profiles.py](scripts/compare_branch_profiles.py) - 单个 branch 的顶层事件序列粗对拍:
[scripts/compare_branch_event_sequences.py](scripts/compare_branch_event_sequences.py) - 高表 alloc 生命周期分析:
[scripts/analyze_alloc_lifecycle.py](scripts/analyze_alloc_lifecycle.py) - prediction-time PHR contributor 归类:
[scripts/analyze_phist_contributor.py](scripts/analyze_phist_contributor.py) - RTL
BpuTrainTrace的self / sibling / noneblock-level 贡献者归类:[scripts/analyze_rtl_train_contributor.py](scripts/analyze_rtl_train_contributor.py)
常用命令:
python3 docs/codex-skills/tage-trace-workflow/scripts/aggregate_rtl_condtrace.py \
--rtl-db /path/to/rtl.db --top 12
python3 docs/codex-skills/tage-trace-workflow/scripts/compare_gem5_rtl_tage.py \
--gem5-stats /tmp/debug/coremark_200k_basic/stats.txt \
--gem5-bpdb /tmp/debug/coremark_200k_basic/bp.db \
--gem5-top-branch-csv /tmp/debug/coremark_200k_basic/topMispredictsByBranch.csv \
--rtl-db /nfs/home/yanyue/workspace/xs-env/XiangShan/build/2026-03-25-13-31-09.db \
--top 12