本期检索说明
先读取 content/collections/deep-radar 截至 2026-09-21 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时内找到两项同时具备源码差异、公开实测和可解释机制的一手改动,因此本期收录 2 篇。两项都处于开放评审阶段,数字应理解为补丁作者及官方性能基础设施在指定环境中的结果,而非已进入正式版本后的跨平台定论。
Kotlin 的 coroutine intrinsic 重构确实移除了包装对象,但 PR 没有 allocation 或运行时间测量;Rust 的整数平方根反平方根算法有完整 benchmark 与论文依据,但因项目 LLM 政策被直接关闭,放入“其它你可能关心的”而不作为正式推荐;Zig、Linux 最近 7 天内没有找到同时满足三项证据红线且未被历史报告收录的材料。
| 主题 | 原始发布日期 | 一手来源与交叉验证 | 截稿状态 | 推荐强度 |
|---|---|---|---|---|
RISC-V RVV String.indexOf |
2026-09-21 11:25(中原标准时间) | OpenJDK PR #32973 / JDK-8392333 / 8 文件 patch / 33 组 JMH / 原始 SIMD 算法说明 | 开放评审,尚缺 2 名 reviewer | 必读,但先看回退样本 |
| rustc coroutine storage-conflict 剪枝 | 2026-09-22 02:23(中原标准时间) | Rust PR #163126 / 7 行 MIR patch / 4 个工程 profile / 官方 rustc-perf | 开放评审,CI 与 perf 已完成 | 推荐 |
01 · JVM:用 RVV 首尾双锚点筛选 String.indexOf 候选
原文与日期: Wei Kui,2026-09-21 11:25(中原标准时间);OpenJDK PR #32973、JDK-8392333、完整源码 patch 与 算法原始说明。补丁修改 8 个文件,增加 373 行、删除 4 行,目标硬件为 SOPHGO SG2044。
为什么值得读: 这是一份很完整的 SIMD substring search 工程案例:向量并不直接验证整条 needle,而是先用首字符和尾字符形成候选位图,再只对候选位置做完整比较。它把“扫描每个起点并逐字节失败”改写为“向量批量排除绝大多数起点”,同时把 Latin1/UTF-16 三种组合、RVV 可变向量长度、mask 到 GPR 的转换和 C2 AD 规则串成了一条可追踪链路。
核心技术结论: 对长度至少为 8 的 needle,新 stub 取 needle[0] 和 needle[k-1]。每轮以 RVV 分别加载 haystack[i..] 与偏移 k-1 的向量,用 vmseq.vx 得到两张 mask,再以 vmand.mm 相交。只有首尾字符在正确相对位置同时命中的 bit 才进入完整 needle 比较。
__ vlex_v(v2, hs, haystack_sew);
__ vmseq_vx(mask0, v2, ch_first);
__ vlex_v(v4, hs_last, haystack_sew);
__ vmseq_vx(mask1, v4, ch_last);
__ vmand_mm(mask0, mask0, mask1);
// mask 搬到 GPR;ctz 取最低候选,cand & (cand - 1) 清除该 bit
__ vmv_x_s(cand, mask0);
__ ctz(mpos, cand);
__ addi(tmp, cand, -1);
__ andr(cand, tmp, cand);RISC-V 的 vmseq.vx 可直接让向量元素与标量字符比较,所以无需先 broadcast。实现还特意将 mask 搬到整数寄存器:作者实测用 vfirst.m / vmsif.m / vmandn.mm 逐个消费候选更慢,而 ctz 加 cand &= cand - 1 的标量位图循环成本更低。完整比较仍用 RVV;UL 路径通过 vle8.v 加 vzext.vf2 把 Latin1 needle 扩为 UTF-16 再比较。
C2 侧新增 UU、LL、UL 三条 vstring_indexof* AD 指令,并以 UseVectorizedStringIndexOf 在新旧实现之间切换;VM 只有同时检测到 RVV 与 Zbb 时才默认开启。stub 固定使用 256-bit 扫描宽度,并要求调用者先确认 8 <= needle_len <= haystack_len,因此短 needle 保留既有路径。
最有价值的实验、源码与 benchmark 细节: SG2044 上共给出 33 组 JMH。收益随“可被向量首尾锚点排除的起点数量”显著变化:
| 场景 | 旧实现 | RVV stub | 倍率 |
|---|---|---|---|
| Latin1,大 haystack、大 needle、无匹配 | 23,685.313 ns/op | 331.296 ns/op | 71.49× |
| UTF-16,大 haystack、大 needle、无匹配 | 30,275.789 ns/op | 559.217 ns/op | 54.14× |
| Latin1,大 haystack、早匹配 | 105.203 ns/op | 35.046 ns/op | 3.00× |
| Latin1,大 haystack、中段匹配 | 7,756.961 ns/op | 2,586.134 ns/op | 3.00× |
| UTF-16,大 haystack、最坏分布 | 1,792.227 ns/op | 978.394 ns/op | 1.83× |
| UTF-16,大 haystack、晚匹配 | 1,966.056 ns/op | 2,682.944 ns/op | 0.73× |
| UTF-16,小 haystack、中段匹配 | 21.561 ns/op | 23.546 ns/op | 0.92× |
71.49× 不是普遍加速:无匹配且大 needle 时,双锚点几乎消灭了昂贵的完整比较;相反,UTF-16 late-match 会不断产生或验证候选,新 stub 反而慢约 36.5%。33 组中还有 0.92×、0.94×、0.97× 等小幅回退。评审重点应放在触发阈值是否能避开这些分布,而不是只看峰值。PR 也未给方差、JMH fork 配置或不同 VLEN/微架构结果;落地前应按 needle 长度、字符集、匹配位置和候选密度建立分层基准。
适合的工程师背景: 熟悉 HotSpot C2、AD 文件或 RISC-V RVV,希望理解如何从 SIMD mask 设计一直追到 substring workload 分布的 JVM/编译器工程师。
预计阅读收益: 约 70–100 分钟;能掌握双锚点 SIMD 搜索、RVV mask/GPR 交界、Compact Strings 三种编码组合,以及为什么同一 intrinsic 会出现 71.49× 加速与 0.73× 回退。
02 · Rust 编译器:用上一轮 live set 跳过重复冲突矩阵更新
原文与日期: Charlie Marsh,2026-09-22 02:23(中原标准时间);Rust PR #163126、7 行源码 patch 与 官方 rustc-perf 对比。
为什么值得读: coroutine layout 必须判断哪些 local 在 suspend point 之间同时需要 storage;既有实现每看到一个 live set,就为集合中每个 local 把整组 bit 并入冲突矩阵。数据流沿控制流传播时,相邻状态经常只是上一个集合的子集,这些 pair 已经全部写入,重复更新只有成本没有新信息。补丁只增加一个缓存 bitset 和一次集合包含判断,却展示了如何利用单调事实给编译器分析热路径剪枝。
核心技术结论: visitor 先把当前状态复制到复用的 eligible_storage_live,与 saved_locals 求交;如果上一次真正记录的集合是当前集合的超集,则当前所有 pair 都已存在,可以直接返回。只有出现新成员时才逐行 union_row_with,随后交换两个 bitset,避免额外分配。
self.eligible_storage_live.clone_from(state);
self.eligible_storage_live.intersect(&**self.saved_locals);
if self.last_recorded_storage_live.superset(&self.eligible_storage_live) {
return;
}
for local in self.eligible_storage_live.iter() {
self.local_conflicts.union_row_with(&self.eligible_storage_live, local);
}
std::mem::swap(&mut self.last_recorded_storage_live, &mut self.eligible_storage_live);正确性来自冲突矩阵只增不减:记录过 {a,b,c} 后,{a,b} 不可能引入新的 pair;若当前集合含有任何新成员,superset 检查失败,仍会把整套当前 pair 写入。它并不尝试保存所有历史集合,只缓存最近一次实际更新;因此是保守剪枝,可能漏掉优化机会,但不会漏记冲突。
最有价值的实验、源码与 benchmark 细节: 作者对四个 async-heavy 工程做编译器 CPU profile,报告 Codex -2.69%、Ruff -2.84%、uv -5.28%、ty -3.28%。不过 PR 没给运行次数、方差和输入版本,且说明 profile 流程使用了 LLM,因此这些数字只能作为“热路径确实存在”的定向证据。
官方 rustc-perf 给出了更保守的全局结果:可靠性最高的 instructions 指标没有 primary 显著样本,仅 1 个 secondary 样本改善 0.2%;bootstrap 从 493.092 秒降到 490.131 秒,改善 0.60%。Max RSS 的 3 个 primary 显著样本均值改善 0.9%,但分布从 -2.8% 到 +2.0%,secondary 还平均回退 1.3%;cycles 则有 1 个 primary 样本回退 2.2%。这说明改动对特定大型 async 工程有明确 profile 信号,却还不能推导为 rustc 全局 3%–5% 提速。
工程上的可迁移点是测量集合关系,而不是盲目缓存:当分析结果是单调累积矩阵时,若当前输入被上次输入包含,整段更新可以消掉;同时必须用稳定的 instruction count、RSS 与 cycles 一起检查,以免局部 CPU profile 掩盖全局噪声或回退。
适合的工程师背景: 熟悉 MIR、generator/coroutine layout、bitset 数据流分析,或正在优化“集合到关系矩阵”型静态分析的编译器工程师。
预计阅读收益: 约 35–55 分钟;能把 7 行补丁还原成集合包含、冲突矩阵单调性与 buffer reuse 的完整证明,并学会正确解读项目 profile 与 rustc-perf 的口径差异。
中国大陆 ToC 硬件价格观察
数据口径
窗口为 2026-08-24 至 2026-09-22,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页实时复核到 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍明确显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”;SSD 页面虽然同时显示 2TB 与 ¥749 起价,但天猫、京东价差仍异常大,继续按渠道与规格选择风险处理。
| 类别 | 9 月 22 日可复核价 | 30 日窗口内真实走势 | 建议 |
|---|---|---|---|
| CPU | Ryzen 7 9800X3D,京东 ¥2,619 | 9/3 ¥2,599 → 9/9 ¥2,449 → 9/14 ¥2,639 → 9/21 ¥2,609 → 9/22 ¥2,619 | 观望;单日反弹 ¥10,较窗口低点仍高 6.94% |
| GPU | MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 | 8/29–9/22 八个真实点均为 ¥4,464.34 | 刚需可比价后入手;该渠道稳定,但京东同页报价明显更高 |
| 主板 | ASUS TUF B850M-PLUS WIFI7,天猫 ¥1,299 | 8/31 ¥1,449 → 9/2–9/22 ¥1,299 | 刚需可入;较窗口首点低 10.35%,连续复核仍横盘 |
| DRAM | 暂无报价;最后可复核 9/9 ¥3,900 | 9/2 ¥3,900 → 9/5 ¥3,860 → 9/6–9/9 ¥3,900 | 观望;固定 SKU 当前缺价,不能用其他容量或时序替代 |
| HDD | IronWolf Pro 8TB ST8000NE001,i百联 ¥1,849 | 9/1–9/22 七个真实点均为 ¥1,849 | 容量刚需可买;先核对型号、五年保修与数据恢复服务 |
| SSD | ZHITAI Ti600 2TB,天猫页面最低 ¥749 | 9/2 ¥1,919 → 9/5–9/22 ¥749;同页京东 ¥1,889 | 谨慎入手;结算页再次核对 2TB、商家、QLC 与五年保修 |
价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。
判断依据
CPU 从昨日 ¥2,609 回到 ¥2,619,连续两天的小波动不足以形成趋势,非刚需仍可等接近 ¥2,449 的窗口低点。GPU、主板与 HDD 今天再次确认横盘;其中主板已经消化 ¥150 的窗口降幅。DRAM 无报价,不用相似套条补点。SSD 的 ¥749 与同页京东 ¥1,889 相差 60.3%,远大于正常日波动,不能直接解释为全市场下跌,购买前必须确认结算规格与售后。
其它你可能关心的
- Rust:用反平方根近似重写整数平方根——
u16/u32/u64/u128benchmark 改善 30.82%–76.46%,但 PR 因项目 LLM 政策被关闭,暂不列为正式推荐。 - Kotlin:移除 stack-switching coroutine 的不必要包装——源码机制清晰,但没有 allocation 或运行时间实测。
- OpenJDK:为 long counted loop 实现 parallel IV——C2 源码与测试完整,未公开性能数据。
本期结论
RVV indexOf 最值得迁移的并非 71.49× 峰值,而是“廉价向量过滤 + 稀疏候选验证”的分层结构,以及必须用 late-match、短输入和高候选密度反证触发阈值。rustc 的 7 行剪枝则说明,单调矩阵分析中一次 superset 判断足以消掉大量重复 pair 更新;但官方全局结果远弱于项目定向 profile,RSS 与 cycles 还有回退,不能把局部 2.69%–5.28% 直接当成编译器普遍收益。硬件五类取得当日真实点,CPU 小幅反弹,其余横盘,DRAM 继续留白。