一条没删。 报告里的每一个数字都来自这里,没有跨批次拼接。
一次 run_p0.sh 的全部产物。同一次开机、同一份二进制、同一块卡。
| 文件 | 是什么 | 大小 |
|---|---|---|
all_20260924_180114.txt |
计时主表:8 kernel × 4 尺寸 × 3 轮,含编译日志、正确性、边界(4097/4100)、racecheck | 1555 行 |
all_20260924_180114_clocks.csv |
1 Hz 采样:SM 时钟 / 显存时钟 / 温度 / 功耗 / 利用率 | — |
shapes_20260924_180619.txt |
形状扫描:方阵 / prefill / decode-b32 / decode-b1 | — |
sass_20260924_180113.txt |
按 kernel 分类的静态指令计数 | — |
sass_20260924_180113_raw.txt |
cuobjdump -sass 完整反汇编 |
8981 行 |
ncu_20260924_180816.log |
权限失败的现场(ERR_NVGPUCTRPERM),原样保留 |
— |
fingerprint.txt |
环境指纹:驱动、时钟、每个 kernel 的寄存器数、峰值口径 | — |
csv/bench_*.csv |
解析后的表 | — |
第 10 章归约(报告 03)的全部产物。不是同一批机器 —— 它比 Round1 早三天、另一台 4090,所以绝对耗时不能和 Round1 混着比。
| 文件 | 是什么 |
|---|---|
reduce_20260921.txt |
原样终端输出:设备信息 + 两个实验 + ptxas -v + racecheck |
这份没有 CSV。报告 03 的构建脚本直接解析这份纯文本 —— 每个测量块的表头是
=== R4 分段 · N = … · block = … ===, 下面几行是耗时 / 下限 / 有效带宽 / 原子加,按行抽就行。 报告里没有一个数字是手抄的。
融合算子(报告 04)的全部产物。又是另一台 4090(driver 595.91.07), 所以绝对耗时同样不能和 Round1、Reduction 混着比 —— 报告 04 只用同一份日志里的比值和 MBU。
| 文件 | 是什么 | 大小 |
|---|---|---|
fused_20261001_005225.txt |
run_fused.sh 一次完整运行的原样日志:编译 + 11 个 kernel 的 spill 检查、正确性与边界、主阶梯 3 轮、形状扫描(decode-b1 / b32 / prefill / 大批)、长行拒绝、racecheck × 3 |
787 行 |
这份也没有 CSV。脚本末尾提示的
parse_fused.py没有写 —— 报告 04 的原始测量值(耗时、GB/s、MBU、寄存器数)都直接取自这份日志,关键处标了行号;比值和反推量由这些数算出。读日志时注意两处预期内的异常:
s3 32 152064那一条按设计会被拒绝并以返回码 3 退出; racecheck 段的耗时和 MBU 是插桩后的数字,没有意义,只看RACECHECK SUMMARY那一行。
| 内容 | 用途 | |
|---|---|---|
bench_<stamp>.csv |
每一轮每个 kernel 一行,不做任何聚合 | 证据。”你这 3 轮抖了多少”的答案只在这里 |
bench_<stamp>_median.csv |
跨轮中位数,多一列 ms_spread_pct |
结论。报告里所有表和图都引这一份 |
逐轮表只做搬运 ——
bench_<stamp>.csv里每个数都能在原文里逐字找到。中位表有算出来的列,分两类:聚合(
ms的中位数、ms_spread_pct), 以及由中位耗时重算的派生列(gflops/pct_peak/beat/cyc_per_load/roofline_pct)。 后者必须重算而不能照抄第 1 轮 —— 中位数不一定来自第 1 轮,照抄会让 “ms和由ms推出来的数”自相矛盾。 这个坑真踩过:k1 的ms取自第 3 轮,节拍却留着第 1 轮的 31.76, 而用中位耗时算出来是 31.83,报告里印出的算式自己和自己不符。结构性的列(
dist/bcast/ldg/ai/regs/occ)各轮完全相同,照抄第 1 轮。
sass_20260924_180113.txt 里的统计表是当天在本地用修正后的脚本重算的 ——
当场跑出来那版因为一个贪婪正则,整张表都是 0(完整反汇编不受影响)。
文件开头有标注。