计算机体系结构 35:独立性能研究
计算机体系结构 35:独立性能研究
核心问题
矩阵行遍历比列遍历快,能否直接归因为“连续访问更适合缓存”?一个可证伪的性能研究需要保留输入、正确性、编译路径、原始重复样本和替代解释。改变行跨度的 padding 对照尤其重要:逻辑元素数几乎不变,列遍历时间却可能大幅变化。
附件:归档验收摘要、原始样本复核结果、只读验证器和历史实验记录。原始 CSV、源码、命令与环境保存在仓库的 examples/computer-architecture/performance/。
范围与证据等级
证据来自 2026-09-22 的 arm64 macOS 原生测量归档,编译器为 Apple Clang 21.0.0。2026-10-01 在本地只读复核两个 CSV 的 192 个正式样本、96 组交替配对、每条校验和及全部 16 行统计,均与归档汇总一致;没有重新计时。四项源码和本机保存的两份历史二进制也与历史 SHA-256 清单一致。二进制位于忽略的 build/,其他克隆缺少它们时验证器会单独标记缺口。
CSV 与汇总的 SHA-256 是当前文件指纹。历史清单只覆盖源码和二进制,因此这些新指纹不能证明 CSV 自采样时起没有改变。
历史实验没有 PMU、固定频率、核心绑定或频率与温度数据,宿主是否裸机也未确认。结果不能定位 cache、TLB、预取器或 DRAM 各自贡献。
核心案例:padding 推翻单变量解释
原始样本复算得到:O3 的 2048×2048 矩阵中,stride 2048 的列/行配对耗时比中位数为 35.6196;每行增加一个 padding 元素后,stride 变为 2049,比值降到 8.5251。实验设计保持逻辑求和目标不变,改变了物理行跨度。
这个对照否定“总工作集字节数足以解释全部差异”的说法,却没有单独证明 cache set conflict。padding 同时改变地址映射、页内偏移以及预取器看到的模式,需要硬件计数器或更细的控制实验才能拆分机制。
禁止向量化时,小矩阵 64×64 的列/行配对比中位数只有 1.2175。大矩阵结果不能外推为所有尺寸上的固定倍率。O3 的向量化报告还需结合运行分支阅读:行内核进入 SIMD 路径,四个列遍历输入走标量步长加载。
模式:用最小扰动挑战瓶颈假设
1 | |
padding、对齐和分块实验都能采用这个结构。对照若同时改变多个机制,只能排除旧解释,不能自动确认某个新解释。
验收结果
从仓库根目录运行 python3 examples/computer-architecture/run_batch.py 34-35,先检查第 34 篇提交差分,再调用归档验证器核对样本数、输入、配对顺序、校验和、统计值和可用历史哈希。错误时非零退出,成功时记录 raw_samples_verified_now=true。
python3 examples/computer-architecture/performance/verify_archive.py --self-test 还修改临时副本中的样本、配对、校验和、汇总及哈希。九类错误在普通 Python 和 -O 下共 18 次均被真实命令拒绝;原归档不受修改。统计复核通过支持历史样本的内部一致性,没有新增硬件机制或跨机器性能结论。
练习
设计一个只改变起始对齐、不改变行跨度的对照,它能排除哪些解释?
为什么编译器报告“循环可向量化”不足以证明某组运行输入进入了向量路径?
模式速查
| 观察 | 最小后续证据 | 暂时不能声称 |
|---|---|---|
| padding 改变耗时 | 地址映射与硬件事件 | 已确认 cache conflict |
| O3 更快 | 实际分支和反汇编 | 所有路径都向量化 |
| 192 个墙钟样本 | 原始分布与顺序 | 跨机器普遍倍率 |






