用 Rust 的新代数运算符加速浮点数学
来源:pythonspeed.com — 2026-08-02
📋 概述
Itamar Turner-Trauring 介绍了 Rust 1.98 新增的“代数运算符”(algebraic operators):由于浮点运算不满足结合律,编译器默认不敢重排指令,导致求和比整数慢得多且无法用上 SIMD。新 API 允许在不在乎运算顺序的代码段显式授权编译器用代数性质重排。作者用成对求和与平方差和两个例子验证,代数运算符可让代码跑出两倍速度,同时保持算法精度。
🔑 核心要点
- 浮点不满足结合律,编译器默认不重排操作,导致无法向量化
- 求和一百万元素:整数 152 微秒,浮点 595 微秒,编译器没用 SIMD 浮点指令
- Rust 1.98 新增 algebraic_add/sub/mul 等代数运算符
- 成对求和用代数运算符后比 NumPy 还快(144 vs 190 微秒),精度相近
- 平方差和用代数运算提速两倍(371 vs 629 微秒)
- 精确实用的做法:关键处用严格顺序运算,不敏感处用代数运算
💡 金句
如果你的数值代码想跑得更快,代数运算符让你告诉编译器:在这里,重排顺序没关系,尽管往死里优化。
👍 0
👎 0
← 返回 Lobsters 首页