计算机体系结构 35:独立性能研究

核心问题

矩阵行遍历比列遍历快,能否直接归因为“连续访问更适合缓存”?一个可证伪的性能研究需要保留输入、正确性、编译路径、原始重复样本和替代解释。改变行跨度的 padding 对照尤其重要:逻辑元素数几乎不变,列遍历时间却可能大幅变化。

附件:35-performance-archive.json和原始验收记录。

范围与证据等级

证据等级为真机测量,但只指 2026-09-22 已归档的 arm64 macOS 原生墙钟样本。记录使用 Apple Clang 21.0.0,包含 192 个正式样本。当前 Linux x86-64 clone 缺少原始样本目录,只能校验已提交记录的 SHA-256 和关键字段,不能把本轮检查称为重新测量。

历史实验没有 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 退出 0,校验归档记录中 192 样本、三个中位比值和未采 PMU 的边界,并保存来源哈希。当前 clone 没有重跑 arm64 二进制,也没有生成新的 x86 性能结论。

练习

设计一个只改变起始对齐、不改变行跨度的对照,它能排除哪些解释?

为什么编译器报告“循环可向量化”不足以证明某组运行输入进入了向量路径?

模式速查

观察 最小后续证据 暂时不能声称
padding 改变耗时 地址映射与硬件事件 已确认 cache conflict
O3 更快 实际分支和反汇编 所有路径都向量化
192 个墙钟样本 原始分布与顺序 跨机器普遍倍率

一手参考资料