本期检索说明

先读取 content/collections/deep-radar 截至 2026-10-12 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时内,只有 OpenJDK AArch64 浮点归约优化同时满足实测数据、源码/汇编证据、原理剖析与工程迁移价值四项要求;因此按规则回溯最近 7 天,再收录 rustc trait impl 候选分桶实验。本期共 2 篇,均未在既往报告中出现。

Kotlin/Native 的 isnan/isinf Linux codegen 修复解释了 GCC 8.3 <cmath> overload 如何让 Double 走外部调用,但没有量化 benchmark,未越过数据红线。Zig 与 Linux 本周期也没有找到三类证据同时齐备的新材料,不凑数。两篇入选 PR 截稿时都仍开放:OpenJDK 数据覆盖 4 款 Arm 核心,rustc 数据来自官方 rustc-perf,但后者是明确标注的 perf experiment,bootstrap、cycles 与 RSS 都有负向样本,不能把 instruction count 的改善等同为所有工程的 wall-clock 加速。

主题 原始发布日期 一手来源与交叉验证 截稿状态 推荐强度
AArch64 NEON 浮点加法归约移除零恒等元的冗余 FADD 2026-10-12 21:04(中原标准时间) OpenJDK PR #33319 / JBS JDK-8392077 / 完整源码 diff / JMH 与汇编 开放 强烈推荐,重点看 IR 语义怎样落到 matcher 约束与依赖链延迟
rustc 按 self type 首个泛型参数分桶 trait impl 2026-10-10 10:30(中原标准时间) Rust PR #164065 / 完整源码 diff / 官方 rustc-perf / 定向回归测试 开放的性能实验 强烈推荐,重点看不相交候选的保守裁剪与多指标反证

01 · OpenJDK:把“标量加向量”的零恒等元写进 AArch64 matcher

原文与日期: zifeihan,2026-10-12 21:04(中原标准时间);OpenJDK PR #33319、完整源码 diff 与 JBS JDK-8392077。

为什么值得读: C2 的 AddReductionV 同时服务 Vector API 与自动向量化,IR 语义是“标量初值 + 向量各 lane 的归约”。Vector API 的 reduceLanes() 没有显式标量输入,intrinsic 会补一个 0.0 恒等元。旧的 AArch64 NEON 非严格浮点归约规则虽然已用两次 pairwise add 把向量压成标量,最后仍无条件把这个已知为零的标量源再加一次。这个案例把 Java API 语义、C2 IR、AD matcher 与最终汇编串成了一条完整证据链,适合迁移到其他“恒等元在上层已知、后端却仍保留依赖”的代码生成问题。

核心技术结论: 补丁不做高层 canonicalization,而是在 AArch64 matcher 中把标量输入收紧为零立即数约束。只有能证明 source 是浮点加法恒等元时,规则才省略最后的 scalar fadd;带非零初值的归约仍走原路径。它还把 reduce_non_strict_order_add2D_neon 的 predicate 限制到 128-bit,避免更宽向量误走 NEON 规则,让 SVE 规则继续负责对应宽度。这个边界很重要:删除指令的正确性来自 operand constraint,而不是碰巧观察到某次编译中的寄存器值。

最有价值的实验、源码、benchmark 与汇编细节: 旧代码在 4 个 float lane 归约后仍生成第三条加法:

ASM
faddp v26.4s, v18.4s, v18.4s
faddp s19, v26.2s
fadd  s19, s19, s17   // s17 = 0.0

新规则将它缩为两条:

ASM
faddp v26.4s, v18.4s, v18.4s
faddp s19, v26.2s

JMH-derived reduction microbenchmark 覆盖 Cortex-A725、Cortex-X925、Neoverse N1、Neoverse V2,数组长度为 128、512、2048、4096。吞吐测试中,double naive reduction 基本无变化,最高约 1.01×;float 在 Neoverse N1 上分别达到 1.21×、1.16×、1.14×、1.14×,其他核心多在 1.00×–1.06×。更能说明机制的是依赖式 latency benchmark:double 新旧比为 0.64–0.75,即延迟下降约 25%–36%;float 为 0.76–0.82,下降约 18%–24%。吞吐收益有限而依赖链收益显著,正符合“减少一条串行标量依赖、但未增加 lane 并行度”的微架构预期。

适合的工程师背景: 熟悉 C2 Ideal/Matcher、AArch64 NEON/SVE、Vector API,或正在审计编译器后端恒等元与 peephole 规则的 JVM 工程师。

预计阅读收益: 约 35–50 分钟;能学会从 Java intrinsic 追到 AD rule 与汇编,并用 throughput/latency 的差异验证真实瓶颈,而不是只数静态指令。

02 · rustc:用首个非 region 泛型参数裁剪 trait impl 候选

原文与日期: lcnr,2026-10-10 10:30(中原标准时间);Rust PR #164065、完整源码 diff 与 官方 rustc-perf 结果。

为什么值得读: rustc 已按 self type 的 SimplifiedType 把非 blanket impl 分桶,但像 Container<Foo>、Container<Bar> 仍落在同一 Container 桶;trait selection 随后要逐个测试大量本不可能 unify 的 impl。这个实验再利用一层可证明的不相交信息:ADT self type 的第一个非 region 泛型参数。如果它是具体类型或已求值的常量,不同 key 的 impl 不可能匹配,可以在昂贵的候选构造前直接排除。它展示了编译器优化里非常可迁移的一类方法:先找便宜、保守且能证明“不可能”的索引键,再保留完整 fallback 处理所有不确定项。

核心技术结论: TraitImpls 在原有 non_blanket_impls: FxIndexMap<SimplifiedType, Vec<DefId>> 旁增加二级索引:

Rust
by_first_arg: FxIndexMap<SimplifiedType, FxIndexMap<ArgKey, Vec<DefId>>>,

enum ArgKey {
    Ty(SimplifiedType),
    Const(u128),
}

first_arg_key 跳过 lifetime,选择首个 type 或 const 参数。只有可稳定简化的具体类型与已求值常量进入窄桶;generic、alias、infer、bound、placeholder 和 unevaluated const 都不给 key,继续走原来的宽候选集合。这样优化不会把“暂时不知道能否 unify”误判为“不可能 unify”。定向测试同时覆盖 type family、const family、alias、inference variable、ambiguity 与增量修改,证明裁剪没有改变这些保守边界。

最有价值的实验、源码与 benchmark 细节: 官方 rustc-perf 的 instruction count 中,33 个 primary 改善样本平均 -11.1%,范围 -26.1% 到 -0.1%,没有 primary instruction 回退;37 个 secondary 改善样本平均 -3.4%,范围 -30.1% 到 -0.2%,另有 1 个 secondary 样本回退 +0.2%。这说明在 impl family 密集的工程里,二级 key 能跳过相当大比例的无效候选。

负向数据决定了结论边界。primary cycles 整体改善 5.6%,但其中仍有 2 个显著回退样本,平均约 +5.9%;primary max-RSS 整体 -1.6%,同时有 1 个样本回退 +2.5%。secondary 侧也各有 RSS 回退样本,最高约 +2.4%。bootstrap 从 487.989 增至 489.053 秒,回退 0.22%;artifact 从 406.54 增至 406.77 MiB,回退 0.06%。因此目前最稳妥的表述是“显著减少特定候选密集场景的动态指令”,还不能宣称编译器整体 wall-clock、内存与产物体积全面改善。

适合的工程师背景: 熟悉 rustc trait solver、coherence/candidate assembly、类型简化索引,或正在优化泛型与规则匹配系统的大型编译器工程师。

预计阅读收益: 约 45–60 分钟;能理解怎样设计一个只负责证明“不相交”的二级索引,并学会用 instruction、cycles、RSS、bootstrap 与 artifact size 共同审计优化。

中国大陆 ToC 硬件价格观察

数据口径

窗口为 2026-09-14 至 2026-10-13,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页的实时渲染结果复核到 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍明确显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”。SSD 商品页顶部的 ¥819 是跨容量系列起价;固定 2TB 规格的全网比价仍为 ¥1,739,本序列只记录后者。

中国大陆六类 PC 硬件公开价格事件

类别 10 月 13 日可复核价 30 日窗口内真实走势 建议
CPU Ryzen 7 9800X3D,京东 ¥2,609 9/14 ¥2,639 → 9/23 ¥2,579 → 10/1–8 ¥2,694–2,699 → 10/9–13 ¥2,609 可关注但不追价;回落后连续五日横盘,仍比窗口低点高 ¥30
GPU MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 9/14–10/13 多次实时复核均为 ¥4,464.34 刚需可比价后入手;单一渠道横盘不等于全市场无促销
主板 ASUS TUF B850M-PLUS WIFI7,天猫 ¥1,169 9/14–10/11 ¥1,299 → 10/12–13 ¥1,169,下降 ¥130(10.0%) 可入手;新低已维持两日,下单前核对店铺、版本与售后
DRAM 暂无报价;最后可复核 9/9 ¥3,900 本窗口没有可比报价 观望;固定 SKU 缺价,不用其他容量、颗粒或时序替代
HDD IronWolf Pro 8TB ST8000NE001,i百联 ¥1,849 9/14–10/13 多次复核均为 ¥1,849 容量刚需可买;先核对型号、五年保修与数据恢复服务
SSD ZHITAI Ti600 2TB,京东 ¥1,739 9/23–10/11 ¥1,799 → 10/12–13 ¥1,739,下降 ¥60(3.3%) 可入手但先核对结算价;固定 2TB 口径的新低已维持两日

价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。

判断依据

今天五个可比 SKU 均与昨日持平。主板相对 10 月 11 日仍低 ¥130,实算下降 10.01%;Ti600 2TB 相对 10 月 11 日低 ¥60,下降 3.34%。两者的新低连续两日可复核,但样本仍不足以推断还会继续下跌。CPU 已从国庆期间的 ¥2,699 档回落至 ¥2,609,仍未触及 9 月 23 日的 ¥2,579。GPU 与 HDD 在本窗口持续横盘;DRAM 固定 SKU 继续缺价,走势图保留真实空白尾段。本期建议只依据可核验序列,不用未经核实的新品或产能消息补充方向判断。

本期结论

两篇材料都在利用“更强但可证明”的输入约束删掉无效工作。OpenJDK 把 Vector API 的零恒等元落实为 matcher operand constraint,从依赖链上去掉一条必然无效的 FADD;rustc 把 concrete first generic argument 变成二级索引,只跳过确定不可能 unify 的 impl family。迁移到自己的编译器或运行时时,关键不是大胆猜测,而是把证明条件写进规则或数据结构,并保留所有不确定输入的保守回退;性能结论也要同时接受吞吐/延迟、instruction/cycles/RSS 等互相反证。