本期检索说明
先读取 content/collections/deep-radar 截至 2026-10-08 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时找到一项同时具备实测、源码证据与原理剖析的一手材料:OpenJDK Curve448 的 8×56-bit limb 重构;回溯至最近 7 天后,再纳入 rustc 新 trait solver 针对 Diesel 热路径的六项组合优化。Kotlin、Zig 与 Linux 的新候选没有同时达到三条证据红线,本期不凑数。
两项改动截稿时都仍在开放评审:Curve448 PR 还是 draft,四个百分比没有给出绝对值、重复次数和误差区间;rustc 的定向 Diesel 指令数明显下降,但官方全局 rustc-perf 同时出现回退和改善,并被标为 perf-regression。本文评价可追溯的公开 patch 与数字,不把定向样本外推成所有架构、所有曲线运算或所有 Rust 项目的普遍加速。
| 主题 | 原始发布日期 | 一手来源与交叉验证 | 截稿状态 | 推荐强度 |
|---|---|---|---|---|
| OpenJDK Curve448 8×56-bit limb | 2026-10-09 07:17(中原标准时间) | OpenJDK PR #33277 / JBS JDK-8393160 / 两文件源码 diff / AArch64 四项结果 | Draft,待正式评审 | 强烈推荐,重点看 64 位高半乘法与伪梅森素数归约 |
| rustc 新 trait solver 的 Diesel 热路径 | 2026-10-08 18:27(中原标准时间) | Rust PR #163981 / 六个独立 commit / 本地 icount / 官方 rustc-perf | 开放评审,带 perf-regression 标签 |
推荐,重点看定向收益与全局指标为何可以同时成立 |
01 · OpenJDK:把 Curve448 的 limb 数量减半,代价是显式管理 112 位乘积
原文与日期: Sean M. Emery(smemery),2026-10-09 07:17(中原标准时间);OpenJDK PR #33277、完整源码 diff 与 JBS JDK-8393160。
为什么值得读: Curve448 的域元素是 448 位整数。旧实现把它切成 16 个 28-bit limb,方便让中间乘积留在 64 位范围内,但每次乘法、平方、进位与归约都要处理更多数组槽和交叉项。这个 patch 改成 8 个 56-bit limb,直接把表示层的循环宽度减半;为了不让 56×56-bit 乘积溢出 long,又把每项乘积显式拆成低 56 位和高位。它是一个很干净的案例:数据布局优化只有和机器整数宽度、模数结构及正确归约一起看,才有意义。
核心技术结论: 新的 IntegerPolynomial448 固定 BITS_PER_LIMB = 56、NUM_LIMBS = 8,乘法和平方都以 Math.multiplyHigh 取得 128 位乘积的高半部,再与普通乘法结果的右移部分拼成高位 digit。低位用 56-bit mask 截断:
long d0 = aa0 * bb0;
long dd0 = Math.multiplyHigh(aa0, bb0) << 8 | (d0 >>> 56);
d0 &= LIMB_MASK;Curve448 的素数是 p = 2^448 - 2^224 - 1,因此 2^448 ≡ 2^224 + 1 (mod p)。16 个乘积列不必做通用大整数除法:高半列可同时折回低 224 位和高 224 位。源码中的 r[0] = c0 + c8 + c12、r[4] = c4 + c8 + (c12 << 1) 正是在展开这一同余关系,之后再统一传播 carry。原先由 FieldGen 生成的 16×28-bit 特例被移除,新的 928 行实现把乘法、平方、整数乘法和归约路径放在同一类中,便于逐项审查边界。
最有价值的实验、源码与 benchmark 细节: 作者报告 AArch64、纯 Java 路径下,密钥对生成提升 45%、密钥协商提升 46%、Ed448 签名提升 45%、Ed448 验证提升 47%。改动只涉及两个文件:生成器删除 37 行旧 Curve448 参数与 carry/reduce 序列;IntegerPolynomial448.java 新增 928 行手写 8-limb 算术。乘法不依赖 BigInteger,也没有 JNI 往返,因此四项收益能直接指向域算术热路径,而不是 provider 切换。
证据边界同样重要:PR 文本只给相对百分比,没有 JMH 命令、绝对吞吐、方差、CPU 型号或 x86_64 数据;而且尚无正式 Reviewer。Math.multiplyHigh 在不同后端能否稳定落成高半乘指令、手写展开是否增加 code cache 压力,都应在合入前用目标架构的汇编与完整加密基准复测。这里足以确认“源码机制与 AArch64 定向收益一致”,不足以声称所有平台都快 45%。
适合的工程师背景: 熟悉 Java 密码学 provider、有限域、HotSpot 整数 intrinsic 或多精度算术,想理解 64 位 limb 如何借伪梅森素数完成快速归约的工程师。
预计阅读收益: 约 40–55 分钟;能掌握 limb 宽度与交叉乘积数量的权衡、如何用 multiplyHigh 表示 56×56-bit 结果,以及怎样把 2^448 ≡ 2^224 + 1 落成固定索引的 carry/reduce 代码。
02 · rustc:六个小早退把 Diesel 的新求解器开销从 1.49×压到 1.31×,但全局均值接近零
原文与日期: Nicholas Nethercote(nnethercote),2026-10-08 18:27(中原标准时间);Rust PR #163981、完整源码 diff 与 官方 rustc-perf 比较。
为什么值得读: 这不是一次“换算法就全面变快”的故事,而是 profile 指向的六个小浪费:空结构用 extend 重建、相同 query value 仍进入关系求解、失败候选仍创建空 usage、循环内重复解析 lang item,以及常见类型没有预驻留。它展示了 trait solver 这类高度递归、分配密集系统中,怎样把不可见的固定开销逐层移出热路径;更难得的是官方 perf 结果没有被定向 Diesel 大幅收益掩盖。
核心技术结论: 最直接的早退发生在 unify_query_var_values:原值与响应值相等时,不再构造 ResponseRelating 并沿调用链重复做等价检查。
for (&orig, response) in iter::zip(original_values, var_values.var_values.iter()) {
if orig == response {
continue;
}
ResponseRelating::new(&**delegate, span).relate(orig, response).unwrap();
}其余提交把 canonicalizer 的三个集合从逐项 extend 改成 clone_from,将 goal_lang_item 从 fast_reject_assumption 的循环元素级调用外提到循环级,令 Err(NoSolution) 跳过 CandidateHeadUsages::default() 与无效 merge_usages,并增加 type var、匿名 bound type 与 root-universe placeholder 的预驻留。共同原则不是特殊处理 Diesel,而是减少新求解器在高重复度 goal/candidate 上的构造、哈希与递归入口。
最有价值的实验、源码与 benchmark 细节: 作者的本地 instruction-count 对照为:旧求解器 37.9B,原始新求解器 56.4B(旧版的 1.49×),应用本 PR 后 49.5B(1.31×)。也就是相对原始新求解器减少 6.9B 指令、约 12.2%,与旧求解器的差距从约 48.8% 收窄到 30.6%。
官方 rustc-perf 的全局视角明显更克制:primary instruction-count 的 15 个显著样本合计均值为 0.0%,其中 6 个回退平均 +0.4%、9 个改善平均 -0.2%;secondary 有 55 个改善,平均 -1.1%、最佳 -11.1%,同时 3 个回退平均 +0.3%。Max RSS 汇总为 primary -2.7%、secondary +2.6%;cycles 则是 primary +2.4%、secondary -1.1%。bootstrap 484.956 → 485.101 s、artifact 406.45 → 406.59 MiB,都回退 0.03%。
作者把极短的 helloworld 等回退归因于启动时预驻留更多值,并认为可换取 Diesel 与若干新求解器样本的绿色结果;项目仍正确保留 perf-regression 标签。可迁移的结论是:热路径优化应同时报告定向 workload、全局 instruction count、cycles、RSS 与启动成本,不能只拿最大改善作标题。
适合的工程师背景: 熟悉 Rust trait solving、rustc query/canonicalization、profile-guided compiler optimization,或正在为分配密集型递归算法寻找早退与循环不变量的工程师。
预计阅读收益: 约 35–50 分钟;能看到六类微优化如何叠加成 6.9B 指令差异,并学会用 rustc-perf 的 primary/secondary、instructions/cycles/RSS 多口径反驳“单一大样本等于全局收益”。
中国大陆 ToC 硬件价格观察
数据口径
窗口为 2026-09-10 至 2026-10-09,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页的实时渲染结果复核到 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍明确显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”。SSD 只采用当前 2TB 规格的全网比价栏,不采用跨容量聚合的“¥819 起”。
| 类别 | 10 月 9 日可复核价 | 30 日窗口内真实走势 | 建议 |
|---|---|---|---|
| CPU | Ryzen 7 9800X3D,京东 ¥2,609 | 9/14 ¥2,639 → 9/23 ¥2,579 → 10/1–8 ¥2,694–2,699 → 10/9 ¥2,609 | 可关注但不追价;单日下降 ¥90,仍高于 9/23 低点 ¥30 |
| GPU | MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 | 9/10–10/9 多次实时复核均为 ¥4,464.34 | 刚需可比价后入手;单一渠道横盘不等于全市场没有促销 |
| 主板 | ASUS TUF B850M-PLUS WIFI7,天猫 ¥1,299 | 9/10–10/9 多次复核均为 ¥1,299 | 刚需可入;公开最低价稳定,但下单前核对店铺与售后 |
| DRAM | 暂无报价;最后可复核 9/9 ¥3,900 | 本窗口没有可比报价 | 观望;固定 SKU 缺价,不用其他容量、颗粒或时序替代 |
| HDD | IronWolf Pro 8TB ST8000NE001,i百联 ¥1,849 | 9/10–10/9 多次复核均为 ¥1,849 | 容量刚需可买;先核对型号、五年保修与数据恢复服务 |
| SSD | ZHITAI Ti600 2TB,京东 ¥1,799 | 9/23–10/9 多次复核均为 ¥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 回落到 ¥2,609,单日下降 ¥90、约 3.3%,但仍比 9 月 23 日窗口低点 ¥2,579 高 ¥30;一个价格点不足以确认下跌趋势,适合关注而非追价。GPU、主板、HDD 与 SSD 只是同一公开渠道再次复核到相同最低价,不能外推为整个中国零售市场稳定。DRAM 固定 SKU 继续缺价,走势图保留真实空白尾段。SSD 页面头部的“¥819 起”是跨容量聚合口径,当前 2TB 规格全网比价仍为 ¥1,799,不能混用。本期购买建议只依据可复核价格序列,不引用未核实的新品或产能传闻。
本期结论
两篇材料共同说明,“减少工作量”必须落到实际热路径而不是抽象复杂度。Curve448 把 limb 数量减半,再用高半乘法和模数同余关系守住正确性,得到四项 45%–47% 的 AArch64 定向收益;rustc 则用六个早退、复用与预驻留把 Diesel 的新求解器指令数减少约 12.2%,但全局 primary 指令均值仍是 0.0%,cycles 还有回退。最值得迁移的方法是:源码机制、定向实验与全局反证必须同时出现,任何一层缺失都不应写成普遍结论。