# 第 35 篇性能研究预备记录 状态:2026-09-22 已完成本机实验与复核,正式正文未写、页面未检查、本模块未独立提交、未发布。属于全系列计划第 35 篇的实验准备,不代替文章验收。 ## 问题与可证伪假设 同一矩阵和同一求和结果,行连续遍历比列步长遍历快多少?初始假设是较大工作集时连续遍历占优,但这个比值不能直接推广到较小工作集。进一步检验“仅由工作集总字节数决定性能”的解释:保持逻辑矩阵和值不变,将每行物理跨度由 2048 增为 2049。如果列遍历性能明显变化,单靠总字节数的解释便不充分。 控制实验还禁止循环与 SLP 向量化,用于识别自动向量化对比较的影响。这里只比较固定遍历算法,没有用预设硬件数据生成趋势。 ## 实际交付与复跑 入口:`PYTHONDONTWRITEBYTECODE=1 python3 examples/computer-architecture/performance/run_all.py`。 - [实验说明与完整边界](../../examples/computer-architecture/performance/README.md) - [固定内核](../../examples/computer-architecture/performance/src/kernels.c)、[计时与校验](../../examples/computer-architecture/performance/src/bench.c)、[编译采样分析入口](../../examples/computer-architecture/performance/run_all.py) - [O3 原始 96 样本](../../examples/computer-architecture/performance/outputs/o3-raw.csv)、[禁向量化原始 96 样本](../../examples/computer-architecture/performance/outputs/scalar-raw.csv)、[汇总](../../examples/computer-architecture/performance/outputs/summary.json) - [环境](../../examples/computer-architecture/performance/outputs/host.txt)、[命令](../../examples/computer-architecture/performance/outputs/commands.txt)、[二进制与源文件 SHA-256](../../examples/computer-architecture/performance/outputs/sha256.txt) - [已链接 O3 反汇编](../../examples/computer-architecture/performance/outputs/o3-disassembly.txt)、[错误结果拒绝](../../examples/computer-architecture/performance/outputs/negative-check.txt) 实际执行记录为 2026-09-22 09:42 UTC,macOS 27.0 / arm64 / Apple Clang 21.0.0 / Python 3.14.4。程序是直接运行的原生 Mach-O,不经过本系列教学模拟器;CPU 型号和宿主是否虚拟机的 sysctl 请求被拒,不能称“已确认裸机”。证据等级写作可用“本机测量(原生 arm64 二进制,宿主虚拟化状态未确认)”。 ## 已通过的验收 固定整数输入、两种正确遍历、逐样本校验和;每工作集 2 个预热对和 12 个交替测量对;8,388,608 元素/样本;192 个正式样本正确。故意让行内核多返回 1,预热门槛退出 3,错误结果未进入性能汇总。 两种编译模式均完成真实运行;`-Wall -Wextra -Werror` 编译通过。实际链接反汇编证明计时循环内保留函数调用和回跳,求和内核保留加载/累加。Python no-excuse 扫描通过;basedpyright 未安装且用户此前拒绝安装,未声称类型检查通过。 O3 对列循环的向量化报告必须结合分支阅读:`stride == 1` 才选 SIMD 路径,而四组输入全部选择标量步长加载。O3 行循环是 SIMD,禁向量化两内核均是标量。文章不得只引用 remark 宣称“两边都向量化,已排除 SIMD”。 ## 可写入正文的结论 本次 2048/2048 的 O3 行/列中位耗时为 0.0424/1.5705 ns/元素,列/行配对比中位为 35.6196;同输入增加一列 padding 后为 0.0411/0.3517,比值 8.5251。禁向量化下,padding 前后列中位分别为 1.6468 与 0.4033,比值分别为 6.1586 与 1.5085。小矩阵 64/64 的禁向量化配对比只有 1.2175。 这些结果是“固定大矩阵快多少”的具体样本,不是一般 CPU 性能常数。padding 同时改变行跨度和地址映射,不能从现有数据拆出 cache/TLB/预取器各自贡献。它对“只有字节总量重要”的解释构成反例;没有形成“列遍历总比行遍历快”的反例,文章不可混淆二者。 2048/2048 有显著范围与顺序差异,未删除样本。完整 min/median/max、先/后位置中位值见汇总。只报告描述性统计,不用 12 次重复冒充独立跨机器实验或总体置信区间。 ## 必须保留的缺口 未采硬件计数器、能耗、频率与温度,未绑定核心,未排除其他进程干扰;未确认裸机或 CPU/cache 型号。没有 DRAM 流量证据,不能从逻辑输入字节/时间推出真实 DRAM 带宽。未做跨 CPU、不同编译器或不同输入分布的复验。 布局以固定顺序依次运行;O3 和 scalar 也非跨模式交替。交替仅在每个工作集/模式中的 rows 与 columns 间进行。预热是明确执行的两对遍历,不是已验证的稳态保证。本批没有全站构建或页面检查。 ## 引用核查 2026-09-22 实际读取 [Clang 优化报告文档](https://clang.llvm.org/docs/UsersManual.html#options-to-emit-optimization-reports) 与 [LLVM Loop/SLP Vectorizers](https://llvm.org/docs/Vectorizers.html),用于解释编译选项和诊断范围。在线文档为开发版本;本机工具版本独立记录。N1570 原站访问超时,不把它列为已核查标准依据。硬件速度结论只来自本次保存的原始记录。 ## 后续写作接口 正文沿用问题→固定算法→计时边界→编译路径→原始范围→padding 反例→失效条件。两道练习可分别要求读者识别“remark 有 SIMD 即当前输入用 SIMD”的错误,以及解释为何 padding 实验无法单独证明缓存组冲突。最终正文落盘前仍需 blog-editor/tech-writer 与 anti-ai-tone→anti-persona-fabrication 扫描;当前只交实验材料。