本期检索说明
先读取 content/collections/deep-radar 截至 2026-10-04 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时没有新的材料同时满足实测、源码/汇编证据和原理剖析,因此回溯最近 7 天。本期找到两项合格的一手工程材料:HotSpot C2 用 GFNI 仿射矩阵实现 uniform vector byte shift;rustc 把压缩 Span 可内联的 hygiene context / parent 边界从约 15 位恢复到约 16 位。Kotlin、Zig 与 Linux 的新候选没有同时满足三条证据红线,本期不凑数。
OpenJDK PR 截稿时仍处于开放评审;Rust 改动已随 rollup 关闭,但 rustc-perf 两轮结果均含次级样本回退。本文评价的是公开 patch、评审记录与 benchmark,不把单机吞吐或噪声边缘的全局数据写成跨平台保证。
| 主题 | 原始发布日期 | 一手来源与交叉验证 | 截稿状态 | 推荐强度 |
|---|---|---|---|---|
| HotSpot GFNI uniform byte shift | 2026-09-29 13:07(中原标准时间) | OpenJDK PR #33113 / 完整 C2 与 stub patch / JBS / 新增 JMH | 开放评审,尚未合入 | 强烈推荐,重点看位矩阵如何替代 widen/pack |
rustc 压缩 Span 的 context 边界 |
2026-10-01 14:34(中原标准时间) | Rust PR #163587 / span_encoding.rs patch / uom 定向数据 / 两轮 rustc-perf |
已随 rollup 关闭;仍带 perf-regression 标签 | 推荐,重点看局部收益与全局噪声冲突 |
01 · HotSpot:把“每个 byte 都没有 shift 指令”改写成 GF(2) 仿射变换
原文与日期: Jatin Bhateja,2026-09-29 13:07(中原标准时间);OpenJDK PR #33113、完整源码 patch 与 JDK-8393068。
为什么值得读: AVX-512 有 16、32、64 位 lane 的 packed shift,却没有 byte lane 版本。C2 过去只能把 byte widen 成 word、移位、mask,再 pack 回 byte;操作本身简单,数据宽化和收窄却占了热路径。这个 patch 展示了一种很少见但高度可迁移的 SIMD 思路:不要等 ISA 提供目标操作,先问现有指令能否表达同一个位变换。
核心技术结论: vgf2p8affineqb 对每个 byte 应用同一个 8×8 GF(2) 矩阵。单位矩阵 I = 0x0102040810204080 的每个 matrix byte 只选中一个 source bit;把 I 按整 byte 移动,就能让输出 bit k 读取输入 bit k±n。因此逻辑右移、逻辑左移分别是 I << (8*n) 与 I >> (8*n),算术右移再把 source bit 7 的 0x80 mask 填到高位。shift count 先 & 7,再从三组各 8 个 qword 的 stub table 取矩阵。
movdl(rtmp, shift);
andl(rtmp, 7);
lea(rbase, ExternalAddress(
StubRoutines::x86::vector_byte_shift_gfni_matrix() + kind * 8 * 8));
vpbroadcastq(dst, Address(rbase, rtmp, Address::times_8), vlen_enc);
vgf2p8affineqb(dst, src, dst, 0, vlen_enc);patch 只在 supports_gfni() 时选择新 lowering,128/256/512 位向量共用矩阵表;无 GFNI 的机器保留原来的 widen/shift/pack 路径。这比全局改写 IR 更稳妥:优化与硬件 capability 紧密绑定,fallback 行为不变。
最有价值的实验、源码与 benchmark 细节: 作者在固定 2.5 GHz 的 AMD EPYC 9755 上测试 shift=3。算术右移 128/256/512 位吞吐从 24,787.795 / 29,184.019 / 42,397.653 提升到 30,674.163 / 43,275.297 / 72,744.344 ops/us,分别约 +23.7%、+48.3%、+71.6%;逻辑左移约 +14.1%、+44.3%、+73.6%;逻辑右移约 +20.4%、+55.1%、+71.7%。收益随向量宽度扩大,正符合旧路径宽化、pack 指令数量随 lane 数增长,而新路径核心仍是一条 GFNI 仿射指令的机制解释。
源码注释还手算了逻辑右移 2 位:I << 16 = 0x0408102040800000,矩阵依次选 source bit 2..7,末尾两个零 matrix byte 生成两个 0;输入 0b10110000 得到 0b00101100。这段逐 bit 证明比“GFNI 更快”更重要,因为它让 reviewer 能验证矩阵方向、bit 序和算术右移的符号扩展。
证据边界同样要保留:JMH 只有 Cnt=2,没有误差列数据,也只覆盖一颗支持 GFNI 的 AMD 服务器 CPU 和 shift=3。14.1%–73.6% 是作者样机吞吐,不足以证明所有 shift count、Intel 微架构或短向量循环都同比提升。
适合的工程师背景: 熟悉 HotSpot C2、Vector API、x86 SIMD 或 Compiler Explorer 汇编,想学习如何把缺失的 packed operation 映射到 GFNI/bit-matrix 指令的编译器工程师。
预计阅读收益: 约 40–55 分钟;能学到 GF(2) 仿射指令的位级建模、C2 feature-gated lowering、stub matrix table 设计,以及如何用宽度扩展趋势反证瓶颈解释。
02 · rustc:一个被误缩小的 bit 边界,让 39k hygiene contexts 频繁掉进 interner
原文与日期: Nicholas Nethercote,2026-10-01 14:34(中原标准时间);Rust PR #163587、完整源码 patch 与 rustc-perf 对比。
为什么值得读: rustc 的 SpanData 是 16 bytes,但高频存储的 Span 只有 8 bytes。它用 marker bit 在四种表示之间切换:inline context、inline parent、partially interned 和 fully interned。一个常量从约 16 位误降到约 15 位后,普通 crate 几乎无感,但拥有约 39,000 个 contexts 的 uom 会频繁越界进入 interner。这里的性能问题不是算法复杂度,而是 tagged representation 的一个边界值。
核心技术结论: len_with_tag_or_marker 的最高位确实被 PARENT_TAG 占用,所以 MAX_LEN 只能到 0b0111_1111_1111_1110;但 ctxt_or_parent_or_marker 不共享这个 tag,只需避开全 1 的 CTXT_INTERNED_MARKER。旧代码错误地让两者共用约 15 位上限。patch 把 context/parent 上限独立为:
const MAX_LEN: u32 = 0b0111_1111_1111_1110;
const PARENT_TAG: u16 = 0b1000_0000_0000_0000;
const LEN_INTERNED_MARKER: u16 = 0b1111_1111_1111_1111;
const MAX_CTXT_OR_PARENT: u32 = 0b1111_1111_1111_1110;
const CTXT_INTERNED_MARKER: u16 = 0b1111_1111_1111_1111;随后所有构造、with_ctxt、eq_ctxt 和 inline-parent 判定统一改用新上限。这样 32767 以上、65535 以下的 context/parent 不再被迫 intern;8-byte Span 布局和 marker 编码均不变。
最有价值的实验、源码与 benchmark 细节: 作者报告 uom 的约 39k contexts 场景指令数下降 1–2%。但官方 rustc-perf 更值得细读:第一轮 primary 只有 1 个 -0.1% 改善,secondary 有 6 个 +0.1% 回退;cycles 的两个 secondary 样本反而回退 6.2%–7.3%,bootstrap 从 490.746 s 增至 497.016 s(+1.28%)。随 rollup 的第二轮仍只有 1 个 primary -0.1% 改善,9 个 secondary 回退 +0.1%–0.4%,但 cycles 又出现一个 secondary -3.0% 改善。
作者明确表示 tiny tt-muncher 回退主要落在与改动无直接关系的 parse_token_tree,更像随机波动;然而标签仍保留 perf-regression。工程结论因此必须分层:uom 跨过旧 15-bit 阈值后少走 interner,方向和机制可信;对没有超过阈值的 rustc-perf 主样本,补丁几乎不该改变执行路径,0.1% 级指令变化和相互翻转的 cycles 不足以宣称普遍加速。
patch 大部分 diff 是同步修正文档:明确四种 Span 形式、marker 如何区分 inline/interned、context 为什么会单独内联,以及“取消压缩会因内存与 cache miss 增加而更慢”的历史实验。这是值得迁移的 review 习惯:修复 tagged layout 常量时,把 bit budget 和判别式写进同一处,否则下一次“整理常量”仍可能重现同类错误。
适合的工程师背景: 熟悉 rustc hygiene、arena/interner、tagged encoding 或编译器内存布局,并希望学习如何处理局部强收益与全局基准噪声冲突的工程师。
预计阅读收益: 约 30–45 分钟;能掌握压缩 Span 的四态编码、bit marker 不变量,以及为什么阈值型优化必须用越界 workload 与全局基准分别验证。
中国大陆 ToC 硬件价格观察
数据口径
窗口为 2026-09-06 至 2026-10-05,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页的实时渲染结果复核到 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍明确显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”。SSD 只采用当前 2TB 规格的全网比价栏,不采用跨容量聚合的“¥819 起”。
| 类别 | 10 月 5 日可复核价 | 30 日窗口内真实走势 | 建议 |
|---|---|---|---|
| CPU | Ryzen 7 9800X3D,京东 ¥2,699 | 9/6 ¥2,599 → 9/9 ¥2,449 → 9/30 ¥2,679 → 10/1 ¥2,699 → 10/2–3 ¥2,694 → 10/4–5 ¥2,699 | 观望;处于窗口高位,较 9/9 低点高约 10.2% |
| GPU | MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 | 9/7–10/5 多次实时复核均为 ¥4,464.34 | 刚需可比价后入手;单一渠道横盘不等于全市场没有促销 |
| 主板 | ASUS TUF B850M-PLUS WIFI7,天猫 ¥1,299 | 9/6–10/5 多次复核均为 ¥1,299 | 刚需可入;公开最低价稳定,但下单前核对店铺与售后 |
| DRAM | 暂无报价;最后可复核 9/9 ¥3,900 | 9/6–9/9 ¥3,900 | 观望;固定 SKU 缺价,不用其他容量、颗粒或时序替代 |
| HDD | IronWolf Pro 8TB ST8000NE001,i百联 ¥1,849 | 9/6–10/5 多次复核均为 ¥1,849 | 容量刚需可买;先核对型号、五年保修与数据恢复服务 |
| SSD | ZHITAI Ti600 2TB,京东 ¥1,799 | 9/23–10/5 多次复核均为 ¥1,799 | 观望或确认结算价后入手;2TB 比价横盘,聚合栏可能滞后 |
价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。
判断依据
CPU 连续两天为 ¥2,699,仍处本窗口高位;相对 9 月 9 日低点 ¥2,449 已反弹 ¥250、约 10.2%,没有形成继续下跌信号。GPU、主板、HDD 与 SSD 只是同一公开渠道再次复核到相同最低价,不能外推为整个中国零售市场稳定。DRAM 固定 SKU 继续缺价,走势图保留真实空白尾段。SSD 页面头部的“¥819 起”是跨容量聚合口径,当前 2TB 规格全网比价仍为 ¥1,799,不能混用。本期购买建议只依据可复核价格序列,不引用未核实的新品或产能传闻。
其它你可能关心的
本期结论
两篇材料都在消除“表示层缺口”。HotSpot 把 byte lane 缺失的 shift 指令映射为一条 GFNI 仿射变换,9 组 JMH 吞吐提升 14.1%–73.6%,但仍需更多 CPU、shift count 和误差数据;rustc 则修正压缩 Span 的 bit budget,让 39k contexts 的 uom 少走 interner并降低 1–2% 指令数,同时全量基准仍提醒我们不要把阈值 workload 的收益外推为普遍加速。可迁移的方法是先写清表示的不变量,再用恰好跨过边界的样本证明机制,最后用全局基准寻找副作用。