< 返回版块

Mike Tang 发表于 2026-11-06 20:50

Nexus 50.5万刚体一帧 14ms

Dimforge 的 Q3 技术报告汇总 2026 年第三季度开源物理库的改动。作者 sebcrozet 2026 年 10 月 25 日把链接发到 r/rust,采集时 27 分、3 条评论。

Nexus 是跨平台 GPU 多物理引擎。着色器用 Rust 写,经 rust-gpu、rust-cuda 或 cuda-oxide 编译,后端是 Metal、WebGPU 或 CUDA。WebGPU 可以在浏览器里跑,Safari 除外。

v0.7.0 改了刚体模拟的内存布局,求解器访问改成接近 AoSoA,并加上 Rapier 的 Twist-friction,用更少的摩擦约束近似库仑摩擦。报告写,RTX 5080 上可以实时模拟 50.5 万个刚体组成的金字塔,大约 14ms/帧。这一组还没有 sleeping islands。求解器仍是 Rapier 同款 Soft-TGS。同一台 RTX 5080、Linux 上,CUDA 后端比 WebGPU 后端大约快 10%。CUDA 不支持间接 dispatch,Khal 会把这类调用转成着色器内部循环。

Nexus 开始加物质点法(MPM)。实现覆盖 2D 和 3D,显式求解器基于 MPM-MLS,模型包括弹性、沙子、雪、液体,打开 CPIC 后可以切割。网格是稀疏的。目前刚体对 MPM 粒子是单向耦合。同一台机器上重复跑同一场景结果一致。跨平台、跨 GPU API 不保证一致。大场景打开确定性大约慢 10%。

Rapier 是 CPU 刚体引擎。过去三个月重做了并行:岛内并行、持久图着色、并行 broad-phase。报告写,相对改动前,单线程最多快到 2 倍,8 个 worker 的 M4 Max 上多线程最多快到 4 倍。对照图来自 2026 年 8 月初的 PR。Box2D、Jolt、Avian 之后有没有再变快,报告没有更新。

Rapier 加上软体,包括弹性、塑性和撕裂。细节在 2026 年 9 月 25 日的单独文章。C 绑定在仓库 bindings/c,带 C 写的 testbed。3D 的 Python 绑定发到 PyPI 的 rapier3d。

Physmark 用来对比物理引擎。目前跑 Nexus、Genesis、Newton、MJX、Isaac Sim 的 GPU 后端,以及 Rapier 和 MuJoCo 的 CPU。没有 CUDA 设备时会跳过 Newton、MJX、Isaac Sim。报告写,MuJoCo、MJX、Newton、Genesis 在刚体数量过几百之后容易超时。Rapier、Nexus、Isaac Sim 没有这个超时。

评论里 sebcrozet(7 分)写,自己是 Rapier、Nexus、nalgebra、parry 的主要维护者。shonks1(3 分)写,工作里在用这些 crate。

原文链接:https://dimforge.com/blog/2026/10/25/dimforge-Q3-technical-report/

FlashRaw 出 sRGB 比 LibRaw 快 8.8–15.4 倍

FlashRaw 是用 Rust 写的相机 RAW 解码器。作者 ybouane 2026 年 10 月 25 日发到 r/rust,采集时 0 分、4 条评论。0.1.0 发在 crates.io、PyPI 和 npm。

它读 RAW,给出传感器数据,以及 CFA、黑白电平、白平衡、色彩矩阵,也可以出嵌入预览或 sRGB 图。raw.pixls.us 语料 2016 个文件里,1980 个能解码,占 98.2%,其中 1965 个有固定输出哈希。剩下 36 个主要是还不支持的格式,里面 28 个是 Nikon High Efficiency NEF。格式大约 40 种。

速度表是 62 台相机、手机和无人机的中位数。每家库只测自己能解的文件,全核。Linux 机器是 Ryzen 7 9700X,macOS 机器是 Apple M1 Ultra。解码相对 LibRaw unpack():Linux 7.9 倍,M1 Ultra 11.4 倍。RAW 到 sRGB,相对 LibRaw dcraw_process():Linux 8.8 倍、内存少 1.9 倍,M1 Ultra 15.4 倍、内存少 1.5 倍。相对 RawSpeed 的解码:Linux 2.1 倍,M1 Ultra 1.5 倍。相对 rawler:Linux 3.0 倍,M1 Ultra 2.7 倍。M1 Ultra 上 Metal GPU 相对 LibRaw dcraw_process() 是 17.9 倍。对照构建开了 OpenMP,x86-64 用了 -march=native。

README 列出了更快的对照:部分未压缩文件和 Sony 无损文件上 RawSpeed 更快,部分 Canon CR3 上 LibRaw 更快,JPEG XL DNG 上 rawler 更快。全核纯解码时,FlashRaw 每个线程留一份缓冲,内存可以比 LibRaw 更高。sRGB 走一次融合:去马赛克、白平衡、色彩矩阵和 sRGB 编码写进同一张输出。

绑定有 Rust、C、C++、Python 和 JavaScript。GPU 路径是 WGSL compute,后端包括 Metal、Vulkan、DX12 和 WebGPU。浏览器包压缩后大约 750 KiB。仓库里有 15 个 fuzz target。

评论里 Shnatsel(5 分)写,flate2 用了 C zlib 后端,这是较慢且非内存安全的选择,zlib-rs 更好,而且仓库已经依赖 zune-inflate。Murky-Bank2341(3 分)写,如果大量相机仍要靠 LibRaw,15 倍这个数字说明不了覆盖范围。flareflo(1 分)写,更需要格式支持。

原文链接:https://github.com/ybouane/flashraw

Redox 9月:IPC 延迟降 24%

《This Month in Redox - September 2026》是 Redox OS 的月报。Redox OS 是用 Rust 写的类 Unix 微内核操作系统。Ribbon 和 Ron Williams 2026 年 9 月 30 日发了这篇月报。作者 ribbon_45 2026 年 10 月 25 日把链接发到 r/rust,采集时 27 分、2 条评论。

4lDO2 做了直接上下文切换:应用调用系统服务时绕过调度器。调度器用来排优先级的 BTreeMap 比较贵。绕过之后,IPC 延迟降 24%,小缓冲 I/O 快 5%。物理内存映射改成 2MiB 页,合成基准里 TLB miss 降 75%。去掉不必要的 AVX 寄存器保存和恢复之后,IPC 延迟再降 14%。频繁 fork 加随机写的测试里,缺页开销降 5%。

Jeremy Soller 和 bjorn3 给 Intel Tiger Lake GPU 驱动加了外接显示器热插拔。Orbital 默认把桌面扩到外接屏,机器不用重启。bjorn3 把图形驱动和 daemon 的 API 迁到 Linux DRM。

Wildan Mubarok 实现了缺页处理,程序崩溃可以走 POSIX 信号。目前只覆盖 x86-64 和 i586。这个功能随后用来修 LLVM 等编译器 JIT 的 TLS 初始化计算错误。同一人把 uutils 从 0.6.0/0.7.0 升到 0.11.0。SDL2 的 OpenGL buffer 复用 Orbital 的 buffer,跳过同步时的拷贝。他的非 JIT、非 KVM 测试里性能大约翻倍。构建系统可以开 Clang 交叉编译,.config 里写 export REDOXER_USE_CLANG=true。i586 动态链接已打开。终端从 ransid 换到 alacritty_terminal。

Landon Propes 实现了 getrlimit 和 setrlimit。Aadarsh 把 Redox 配到能在 Google Cloud 上启动。WebKitGTK3 的 HTML 布局被修好。

原文链接:https://www.redox-os.org/news/this-month-260930/

Please 的 Rust 构建规则

rust-rules 是 Please 构建系统的 Rust 规则。Please 是多语言、hermetic 的构建系统,发布形态是单个 Go 二进制。作者 Nearby-Blood-9817 2026 年 10 月 25 日发到 r/rust,采集时 15 分、6 条评论。作者写,一两年前发过第一版,现在认为可以用于生产。

规则直接调用 rustc。提供 rust_library、rust_test、rust_doc_test。第三方 crate 用 rust_repo 声明直接依赖。版本、feature 和传递依赖从各 crate 的 Cargo.toml 解析,求解器用 PubGrub,会看 rust-version。工具链是 rustc 1.74 时,clap 解析到 4.5.61。4.6.6 需要 1.85,不会被选中。lock 默认给 linux x86_64 和两个 darwin 架构都解一遍,声明它们的并集。可以从 Cargo.lock 导入,也可以对整个 Cargo workspace 跑 --import-workspace。已有 BUILD 文件不会被覆盖。

作者在评论里写,纯 Rust 项目仍然适合用 Cargo。这套规则面向已经在用 Please 的多语言仓库。和 Bazel 比,Please 是单个 Go 二进制,没有 JVM。作者以前在 Thought Machine 工作,Please 是在那里做出来的。

原文链接:https://github.com/becomeliminal/rust-rules


From Rust中文社区 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页