本期检索说明

先读取 content/collections/deep-radar 截至 2026-09-18 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时内,OpenJDK x86 C2 的 FP16 广播补丁给出了明确的旧、新指令序列和带误差的 JMH 结果;Rust VecDeque 克隆补丁同时给出通用类型的资源复用、TrivialClone 特化、环形缓冲区源码实现和 8 组主 benchmark。两项均满足实测数据、源码/指令级证据、原理剖析与工程迁移价值四项要求。

Kotlin 当日候选主要是正确性修复或 IR API 重构,没有性能实测;Zig 公开仓库迁移后没有形成三项证据闭环的新材料;Linux 新提交也没有找到同时提供可复现实测与源码级机制说明的候选,因此不凑数。两篇入选补丁截至截稿均仍处于开放评审状态,结果来自单一硬件,正文保留这一限制。

主题 原始发布日期 一手来源与交叉验证 截稿状态 推荐强度
HotSpot x86 ReplHF_reg 单指令广播 2026-09-18 12:29(中原标准时间) OpenJDK PR #32938 / x86 AD 规则与 assembler / 随补丁 JMH Open,等待 2 位 reviewer 必读
Rust VecDeque::clone(_from) 优化 2026-09-19 06:00(中原标准时间) rust-lang/rust PR #162991 / alloc 源码与测试 / 8 组 benchmark Open,等待 libs team 评审 必读

01 · HotSpot:让 FP16 广播直接从 XMM 进入向量寄存器

原文与日期: Jatin Bhateja,2026-09-18 12:29(中原标准时间);OpenJDK PR #32938JDK-8392548。截稿时补丁修改 3 个文件,增加 95 行、删除 7 行,仍在等待 HotSpot reviewer。

为什么值得读: 这不是“换一条更快的指令”这么简单,而是一个典型的 C2 指令选择问题:Java Vector API 的 FP16 replicate 已经把源值放在 XMM 寄存器,旧 AD 规则却先用 evmovw 把 16 位值搬到通用寄存器,再调用整数源版本的 evpbroadcastw。在支持 AVX512-FP16 的机器上,这次跨寄存器文件搬运约有 3 周期延迟,而且还占用一个临时 GPR。

核心技术结论: AVX512BW 的 vpbroadcastw 可以直接接受 XMM 源操作数。补丁因此从 ReplHF_reg 删除 rRegI rtmpTEMP effect,让 matcher 生成一条 XMM→向量广播;assembler 的能力断言也细化为:512 位向量要求 AVX512BW,较短向量沿用 AVX2。

C++
// 旧路径
__ evmovw($rtmp$$Register, $src$$XMMRegister);
__ evpbroadcastw($dst$$XMMRegister, $rtmp$$Register, vlen_enc);

// 新路径
__ vpbroadcastw($dst$$XMMRegister, $src$$XMMRegister, vlen_enc);

这类改动的迁移价值在于:机器描述规则不应只验证“指令可用”,还要核对源操作数已经位于哪个寄存器文件。若 ISA 有直接的 reg-reg 形式,额外 move 同时增加延迟、寄存器压力和调度依赖;删除临时 operand 也会给全局寄存器分配留下更多空间。

最有价值的实验、源码、benchmark 与指令细节: 随补丁新增的 ReplHFRegBenchmark.manyBroadcasts 每轮处理 512 组数据,每个内层元素执行 16 次 FP16 加法,强制产生大量 replicate。JMH 采用吞吐模式、5 次测量:

版本 吞吐 误差 变化
基线 16.587 ops/ms ±0.041
单指令广播 16.978 ops/ms ±0.033 +2.36%

2.36% 与作者概括的 2–3% 一致,而且误差区间没有重叠。源码证据也闭环:x86.ad 删除 XMM→GPR 的 evmovwassembler_x86.cpp 放宽 XMM 源 vpbroadcastw 的 AVX512BW 断言,JMH 则专门构造高密度广播。边界同样明确:收益只适用于支持 AVX512-FP16 与 AVX512BW 的 x86 目标;benchmark 是人为放大 broadcast 密度的微基准,不能外推为任意 Java 工作负载都快 2.36%。PR 尚未给出具体 CPU 型号、反汇编全文或应用级结果。

适合的工程师背景: 熟悉 C2 Ideal/ADLC、Vector API、x86 EVEX 编码或寄存器分配,希望理解一条机器描述规则如何把 Java FP16 操作映射到实际指令的 JVM 工程师。

预计阅读收益: 约 35–55 分钟;可以掌握从 matcher operand、temporary effect、assembler feature gate 到 JMH 的完整排查链,并学会优先寻找不必要的跨寄存器文件搬运。

02 · Rust:VecDeque 克隆不再丢掉可复用的元素分配

原文与日期: François Bernier,2026-09-19 06:00(中原标准时间);rust-lang/rust PR #162991。补丁修改 4 个文件,增加 479 行、删除 10 行;主要新增量是环形布局、panic、ZST 与 drop 语义测试,截稿时仍在等待 libs team 评审。

为什么值得读: VecDeque::clone_from 文档承诺尽量避免重新分配容器缓冲区,但 2022 年一次重写后,当前实现先 clear(),再对源元素逐个 clone()。这会把目标端已有 StringVec 等元素的内部 allocation 全部丢掉,错过 T::clone_from 本来提供的资源复用。与此同时,对 u64 这类按位复制即可完成克隆的类型,迭代器逐元素路径又比直接拷贝两个底层 slice 更重。

核心技术结论: 新实现通过内部 SpecCloneFrom 分成两条路径。通用 T: Clone 先把目标截断到源长度,再同时遍历源、目标各自最多两个 slice;重叠部分调用 clone_from_slice,剩余源元素才 clone() 追加。T: TrivialClone 则清空目标、一次 reserve,然后对源的 front/back slice 执行两次 ptr::copy_nonoverlapping,最后把 head 归零并设置长度。

Rust
self.truncate(source.len());
// 重叠区:复用 String/Vec 等元素自己的 allocation
dst.clone_from_slice(src);
// 只有源的尾部需要新建元素
self.extend(src_front.iter().chain(src_back).cloned());

环形缓冲区的难点不是复制本身,而是源和目标可能在不同位置 wrap。补丁用两个 slice 的小型状态机逐段对齐,避免先 make_contiguous() 搬动数据。TrivialClone 特化则把环形源的两个物理片段压到目标缓冲区起点;unsafe 前置条件由独立 allocation、reserve 后容量、ZST 的零字节 copy 和最终长度更新共同保证。

最有价值的实验、源码与 benchmark 细节: 作者在 AMD Ryzen 9 5950X 上测量 ns/iteration:

Benchmark main 补丁 变化
clone_u64_contiguous 136.32 ns 85.06 ns -37.6%
clone_u64_wrapped 134.67 ns 85.02 ns -36.9%
clone_from_u64_contiguous 112.64 ns 58.04 ns -48.5%
clone_from_u64_wrapped 112.59 ns 59.32 ns -47.3%
clone_from_string_contiguous 20,432.14 ns 4,479.83 ns -78.1%
clone_from_string_wrapped 20,408.74 ns 4,310.88 ns -78.9%

负向结果很重要:普通 clone_string_contiguous 从 20,141.18 ns 变成 20,706.59 ns,慢 2.8%,因为全新 clone 没有目标元素可复用,却仍承担新的分派/布局成本。clone_u64_small_wrapped 在整套 benchmark 中看似慢 19.8%,单独运行却是 15.73 → 15.52 ns(快 1.3%);作者据此判断可能是代码布局或 glibc 干扰。这个反差提醒我们:十几纳秒的小样本必须做隔离复测,不能只看一次套件结果。

测试覆盖比性能数字更有工程价值:补丁验证目标容量复用、源/目标不同 wrap 点、扩容后追加、目标截断、32 字节对齐元素、ZST、自定义 Clone、带 DropTrivialClone,以及克隆中途 panic 后不泄漏、不 double-drop。限制也很清楚:数据来自单台 5950X,没有 allocator 计数或多平台置信区间,且 TrivialClone 仍是内部不稳定能力;因此最可靠的结论是“资源复用路径显著受益,普通 clone 和小容器仍需继续调优”。

适合的工程师背景: 熟悉 Rust alloc、环形缓冲区、specialization、unsafe 初始化状态或容器异常安全,希望优化集合复制而不破坏 drop/panic 语义的库工程师。

预计阅读收益: 约 60–90 分钟;可以掌握环形布局的分段 clone、元素内部 allocation 复用、平凡复制特化,以及如何为 unsafe 快路径设计覆盖 panic 与析构的测试矩阵。

中国大陆 ToC 硬件价格观察

数据口径

窗口为 2026-08-21 至 2026-09-19,单位人民币,六类硬件继续固定同一 SKU。9 月 19 日重新读取 9800X3D 固定样本页时,页面显示京东最低 ¥2,619,与 9 月 17 日相同,因此新增一个真实横盘点。GPU、主板、DRAM、HDD、SSD 固定页面均未能在本次采集稳定返回可核验报价,不复制旧值冒充今日数据;折线尾部空白表示证据缺失,不代表价格横盘。

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

类别 固定样本与最后可复核价 30 日窗口内真实走势 建议
CPU Ryzen 7 9800X3D,9/19 ¥2,619 8/21 ¥2,609 → 9/9 ¥2,449 → 9/14 ¥2,639 → 9/15、9/17、9/19 ¥2,619 观望;较 9/9 低点仍高 6.94%,但最近三个真实点横盘
GPU MSI RTX 5070 VENTUS 3X 12G,最后可核验 9/13 ¥4,464.34 8/29–9/13 六个真实点均为 ¥4,464.34,之后无新点 继续观望;样本已延迟 6 天,下单前重核渠道价
主板 ASUS TUF B850M-PLUS WIFI7,最后可核验 9/8 ¥1,299 8/31 ¥1,449 → 9/2–9/8 ¥1,299 刚需可关注 ¥1,299;当前样本过期,不据此外推
DRAM Kingston FURY Beast DDR5-6000 32GB,最后可核验 9/9 ¥3,900 9/2 ¥3,900 → 9/5 ¥3,860 → 9/6–9/9 ¥3,900 观望;缺少 10 天内的新点,不能确认零售趋势
HDD IronWolf Pro 8TB ST8000NE001,最后可核验 9/10 ¥1,849 9/1–9/10 五个真实点均为 ¥1,849 按容量刚需购买;优先比较五年保修与数据恢复服务
SSD ZHITAI Ti600 2TB,最后可核验 9/10 页面最低 ¥749 9/2 ¥1,919 → 9/5–9/10 ¥749;同页渠道价差异常大 仅在确认 2TB 规格、颗粒、商家与保修后考虑

价格来源: 9800X3DMSI RTX 5070 VENTUS 3XASUS TUF B850M-PLUS WIFI7Kingston FURY DDR5-6000 32GBIronWolf Pro 8TBZHITAI Ti600 2TB

判断依据

CPU 的同渠道最低报价连续三次为 ¥2,619,短期可以称为样本横盘,但它仍比 9 月 9 日的窗口低点高 ¥170;非刚需不必追价。其余五类末点延迟 6–11 天,只作为历史参照。SSD 的 ¥749 继续视为需要核验规格和渠道的异常事件,不能外推为 2TB SSD 全市场价格。

其它你可能关心的

本期结论

两项优化都说明,容器或编译器热路径中的“多余中间态”值得优先消除:C2 删除 XMM→GPR 的寄存器中转,VecDeque 删除“先销毁再重建”的元素生命周期中转。前者减少指令和临时寄存器,后者保留对象内部 allocation,并对可按位复制的类型降为两个 slice copy。真正可迁移的方法不是只追主结果,而是同时检查适用 ISA、环形布局、panic/drop 语义和负向小样本。