本期检索说明

先读取 content/collections/deep-radar 截至 2026-09-07 的全部原文链接,并按 URL、标题与技术问题语义去重。最近 24 小时内,Rust 与 Java/JVM 领域出现三项同时具备实测、源码或汇编证据、原理剖析和工程迁移价值的一手修改:Polonius Alpha 的稠密 region 索引、x86 StringUTF16.compress 的 AVX2 路径,以及 RISC-V C2 的 CompressBitsV/ExpandBitsV 向量后端。

Rust 修改已经合入主线;两个 OpenJDK 修改仍未合入,其中 RISC-V 位压缩 PR 截稿时仍为 Draft。本文只报告公开 patch、JMH、PrintAssembly 与 rustc-perf 数据,不把评审中的实现写成稳定能力。Kotlin、Zig 与 Linux 在本窗口没有发现同时满足全部红线且未被历史报告收录的新材料,因此不以发布说明或无数据教程补位。

主题 原始发布日期 一手来源与交叉验证 截稿状态 推荐强度
Polonius Alpha 的 region variance 稠密索引 2026-09-07 20:08(中原标准时间) rustc PR #162422 / 源码 diff / rustc-perf / 合入 CI 已合入 必读
StringUTF16.compress 的 AVX2 intrinsic 2026-09-07 21:26(中原标准时间) OpenJDK PR #32736 / JBS JDK-8391914 / Webrev / JMH 与汇编器源码 Open,未合入 必读
RISC-V CompressBitsV/ExpandBitsV 2026-09-08 00:05(中原标准时间) OpenJDK PR #32739 / JBS JDK-8391921 / JMH 附件 / C2 AD 与 MacroAssembler patch Draft,未合入 推荐

01 · Rust:用 IndexVec 把 Polonius 的 region variance 变成稠密索引

原文与日期: Jack Huey,2026-09-07 20:08(中原标准时间);rust-lang/rust PR #162422。性能数据来自 PR 触发的 rustc-perf 对比,最终合入提交为 cea272fa

为什么值得读: Polonius Alpha 在生成 localized constraint graph 时,需要为每个 RegionVid 查询协变、逆变或双向传播方向。旧实现使用 BTreeMap<RegionVid, ConstraintDirection>;但 RegionVid 本来就是从零开始的稠密编译器索引,为每次查询支付树遍历、节点指针追踪和分支成本没有必要。修改把数据结构替换为 IndexVec<RegionVid, Option<ConstraintDirection>>,让访问从 O(log n) 树查找变为直接下标读取。

核心技术结论: 这不是“数组一定比树快”的泛化结论,而是索引域决定数据结构:当 key 是编译器分配的稠密 newtype index,且缺失状态可由 Option 表达时,IndexVec 同时保留类型安全和连续内存布局。写入侧用 ensure_contains_elem(region, || None) 延长向量,读取侧则通过 get(region).copied().flatten() 保留旧实现“缺失即 Bidirectional”的语义。

核心写入从树节点修改变成槽位合并:

Rust
pub(crate) type LiveRegionVariances =
    IndexVec<RegionVid, Option<ConstraintDirection>>;

let entry = self.directions.ensure_contains_elem(region, || None);
*entry = match *entry {
    Some(existing) if existing != direction =>
        Some(ConstraintDirection::Bidirectional),
    _ => Some(direction),
};

最有价值的实验、源码与 benchmark 细节: 合入后的 rustc-perf 显示,41 个主样本指令数平均改善 0.9%,范围 0.2%–4.3%;31 个次样本同样平均改善 0.9%,范围 0.1%–2.4%,没有指令数显著回退。改善集中在启用 Polonius Alpha 的路径,符合替换热查询结构的因果预期。

负指标同样重要:Max RSS 的 7 个主样本正负相抵后均值约 0%,其中三个回退 0.5%–4.2%、四个改善 0.6%–2.3%;一个次样本 RSS 回退 6.3%。cycles 主样本总体改善 1.1%,但仍有一个主样本回退 0.5%、一个次样本回退 5.1%。bootstrap 从 479.300 秒降至 477.826 秒(-0.31%),产物却从 403.45 MiB 增至 403.60 MiB(+0.04%)。数据说明收益来自查询局部性与更低的指令成本,并不等于所有内存指标同步改善。

适合的工程师背景: 熟悉 rustc MIR、借用检查或 typed-index 容器,正在为编译器图算法选择稠密/稀疏数据结构的工程师。

预计阅读收益: 约 35–50 分钟;可以迁移一套明确判断:先证明 key 空间稠密且上界受控,再把树/哈希表替换为 typed vector,并用指令数与 RSS 的反向信号验证是否只是拿空间换时间。

02 · HotSpot:用 AVX2 补上 UTF-16 到 Latin-1 压缩的中间档

原文与日期: OpenJDK 贡献者 0382,2026-09-07 21:26(中原标准时间);openjdk/jdk PR #32736JBS JDK-8391914Webrev

为什么值得读: StringUTF16.compress 是 Java compact strings 的关键入口:把所有字符都能表示为 Latin-1 的 char[] 压缩成单字节存储。x86 HotSpot 原先只有 AVX-512 路径与 SSE4.2 的 16 字符路径;没有 AVX-512、或因 AVX3Threshold 不使用 AVX-512 的机器,即使支持 AVX2 也只能退回 SSE4.2。这份 patch 补上 256-bit、每轮 32 个字符的中间档,并用 AMD EPYC 9754 的完整长度扫描揭示它何时值得启用。

核心技术结论: 新循环用两次 vmovdqu 读入两组 16 个 UTF-16 code unit,以 vpor + vptest 一次检查 32 个字符是否包含高字节;全为 Latin-1 时,用 vpackuswb 压成字节,再用 vpermq 0xD8 修正 AVX2 lane 内打包造成的顺序。遇到非 Latin-1 字符时恢复源/目标指针,回到现有标量尾部处理,因此不能只比较理想 ASCII 长串,也必须测边界长度与失败路径。

关键汇编器序列是:

C++
vmovdqu(tmp2Reg, Address(src, len, Address::times_2));
vmovdqu(tmp3Reg, Address(src, len, Address::times_2, 32));
vpor(tmp4Reg, tmp2Reg, tmp3Reg, Assembler::AVX_256bit);
vptest(tmp4Reg, tmp1Reg, Assembler::AVX_256bit);
vpackuswb(tmp4Reg, tmp2Reg, tmp3Reg, Assembler::AVX_256bit);
vpermq(tmp4Reg, tmp4Reg, 0xD8, Assembler::AVX_256bit);

最有价值的实验、源码与 benchmark 细节: JMH 使用 AMD EPYC 9754 3.1GHz,每次 invocation 压缩 1,000 个随机 Latin-1 char[]。长度 16、17、31 的吞吐分别提升 4.5%、7.2%、11.2%;64、65、100 提升 13.9%、25.1%、30.7%;长度 1,000 从 9.437 增至 16.126 ops/μs,提升 70.9%;3,000 和 10,000 字符仍提升 34.1% 与 28.8%。

短输入不是单向收益:长度 1–15 回退 0.2%–5.4%,长度 32 也回退 1.5%。这揭示实现的工程边界:设置 256-bit mask、分支和尾部处理存在固定成本,正式合入前需要认真讨论长度阈值,而不能被长串的 70.9% 峰值覆盖。

适合的工程师背景: 熟悉 HotSpot MacroAssembler、compact strings、x86 SIMD,或需要为 intrinsic 设计长度阈值和回退路径的 JVM 性能工程师。

预计阅读收益: 约 45–60 分钟;能完整看到一个字符串 intrinsic 从数据合法性检查、lane 重排、尾部处理到长度分层 benchmark 的设计过程,并学会保留短输入回退作为合入条件。

03 · C2/RISC-V:在向量 lane 内实现 CompressBitsVExpandBitsV

原文与日期: OpenJDK 贡献者 zifeihan,2026-09-08 00:05(中原标准时间);openjdk/jdk PR #32739JBS JDK-8391921JMH 测试附件。截稿时为 Draft,尚未取得所需评审。

为什么值得读: C2 已有 CompressBitsV/ExpandBitsV 中间节点,但 RISC-V 后端没有 int/long 向量匹配规则,Vector API 或 SuperWord 生成这些节点后无法得到有效的 RVV lane-parallel 实现。RVV 没有直接等价于每个 lane 的标量 bit compress/expand 指令,因此 patch 不只是增加一条 AD rule,而是在 C2_MacroAssembler 中实现并行前缀网络。

核心技术结论: compress_bits_v 先做 src & mask,随后以 1、2、4、8、16(long 再加 32)为位移步长,反复计算 mask 的 parallel suffix,逐轮把被选择的 bit 向低位聚拢;expand_bits_v 先保存每一轮的移动 mask,再逆序应用 XOR/shift 网络,把紧凑输入散回目标 mask 指定的位置。int 需要 5 轮、long 需要 6 轮;32 位立即数移位超出 RVV vi 编码时,辅助函数显式切换到 vsll_vx/vsrl_vx

核心轮次结构如下:

C++
const int rounds = is_int ? 5 : 6;
for (int j = 0; j < rounds; j++) {
    const int shift = 1 << j;
    parallel_suffix_v(this, tmp2, tmp1, src_tmp, tmp, is_int);
    vand_vv(src_tmp, tmp2, mask_tmp);
    vxor_vv(mask_tmp, mask_tmp, src_tmp);
    vshift_right(this, tmp2, src_tmp, shift, tmp);
    vor_vv(mask_tmp, mask_tmp, tmp2);
}

最有价值的实验、源码与 benchmark 细节: JMH 每项 5 次测量。int vector compress 从 195.669 ± 1.495 降至 53.248 ± 0.197 μs/op,减少 72.8%;int vector expand 从 217.269 ± 8.046 降至 55.824 ± 0.193 μs/op,减少 74.3%。long vector compress 从 316.451 ± 36.286 降至 140.685 ± 0.118 μs/op,减少 55.5%;long vector expand 从 287.693 ± 8.183 降至 146.945 ± 0.374 μs/op,减少 48.9%。同一测试中的四个 scalar 对照基本不变,说明提升来自 C2 新向量路径,而不是整机频率或测试框架漂移。

patch 同时暴露代价:vexpandBits 声明 10 个临时向量寄存器,vcompressBits 也需要 4 个临时向量和一个整数寄存器,AD 规则标记为 pipe_slow。因此 JMH 大幅改善并不意味着最终实现已经收敛;寄存器压力、向量长度覆盖以及与 future Zvbb 能力的组合仍是评审重点。

适合的工程师背景: 熟悉 C2 Ideal/Matcher、RISC-V RVV,或希望理解“后端无单指令时如何用位网络实现 lane-parallel intrinsic”的编译器工程师。

预计阅读收益: 约 60–80 分钟;可以获得一个从 IR 节点、AD 匹配、MacroAssembler 算法、寄存器约束到 JMH 对照的完整后端实现样本。

中国大陆 ToC 硬件价格观察

数据口径

窗口为 2026-08-10 至 2026-09-08,单位人民币。本期在实际渲染后的六个固定 SKU 页面上逐一读取当前最低报价,六类均新增 9 月 8 日采集点;CPU 出现真实变价,其余五类用新采样确认横盘。折线只连接真实观测,不插值,也不把采集时间写成商家实际调价时间。

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

类别 固定样本与 9 月 8 日可复核价 30 日窗口内真实走势 建议
CPU Ryzen 7 9800X3D,¥2,589 9/6–9/7 ¥2,639 → 9/8 ¥2,589,单日 -1.89%,也略低于 9/4 的 ¥2,597.15 可关注入手;已回到本窗口低位,但不同京东入口同时显示 ¥2,969/¥3,179,购买前核对店铺与规格
GPU MSI RTX 5070 VENTUS 3X 12G,¥4,464.34 8/29、9/7、9/8 均 ¥4,464.34;京东仍为 ¥7,299 继续观望;横盘但渠道价差达 ¥2,834.66,聚合最低价不能代表主流自营成交价
主板 ASUS TUF B850M-PLUS WIFI7,¥1,299 8/31 ¥1,449 → 9/2–9/8 多次采集均 ¥1,299;页面另有 20 小时内京东 ¥1,449 爆料 可入手;最低价横盘一周,但应确认 ¥1,299 是否对应同一 WIFI7 规格和店铺
DRAM Kingston FURY Beast DDR5-6000 32GB,¥3,900 9/5 ¥3,860 → 9/6、9/8 ¥3,900 刚需小量买;新采样确认高位窄幅震荡,没有继续下跌信号
HDD IronWolf Pro 8TB ST8000NE001,¥1,849 9/1、9/6、9/7、9/8 均 ¥1,849 可按容量需求购买;连续四个真实点横盘,重点核对渠道保修
SSD ZHITAI Ti600 2TB,页面最低 ¥749 9/5–9/8 均 ¥749;京东从 9/1 的 ¥1,889 变为页面当前 ¥1,799 谨慎核对后入手;聚合最低价仍异常低,但京东可比口径已下降 4.76%,需确认 Ti600/Ti600s、容量和保修

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

判断依据

9 月 8 日页面实际显示:9800X3D 最低 ¥2,589;RTX 5070 最低 ¥4,464.34、京东 ¥7,299;B850M-PLUS WIFI7 最低 ¥1,299;Kingston 32GB DDR5-6000 最低 ¥3,900;IronWolf Pro 8TB 最低 ¥1,849;Ti600 2TB 页面最低 ¥749、京东 ¥1,799。与昨日相比,CPU 最低价下降 ¥50;GPU、主板、DRAM、HDD、SSD 的聚合最低价未变,但都新增了真实采样点。

CPU 页面同一时刻存在多个京东报价,GPU 与 SSD 的聚合最低价和京东价差也很大,因此建议不把单一最低价外推为全市场成交价。SSD 的同页好价记录还混有 Ti600s,报告只把当前 2TB 规格页的 ¥749 画进固定样本折线,将京东 ¥1,799 作为渠道交叉验证文字记录,避免把不同 SKU 混成一条曲线。

本期结论

三篇材料对应三个可迁移的性能工程判断:稠密 compiler index 应优先考虑 typed vector,但必须同时审视 RSS;SIMD intrinsic 的阈值要由完整长度分布决定,不能只看长串峰值;目标 ISA 缺少单条指令时,可以用并行位网络补齐 C2 节点,但寄存器压力必须进入评审。硬件部分六类均新增 9 月 8 日真实采样,CPU 出现 -1.89% 的日变价,其余五类由新点确认横盘。