Rust在物理引擎研发中的应用 崔汉青第三届中国Rust开发者大会 Rust在物理引擎研发中的应用 崔汉青 Motphys CEO Motphys 驱动虚拟世界的全部运动 体验 应用 基础应用: 内容生成工具、 交易市场等 基础硬件: 5G/6G、 半导体、 VR/AR等 基础软件: 渲染引擎、 动作物理引擎等 静态表现力 动态表现力 渲染技术 动作物理技术 动作技术 Motion 物理技术 Physics 规则驱动 动作物理分离 跨平台确定性 动作物理统一 算力动态调配 分布式计算 物理材质统一解算 算法优化 物理材质单独解算 工程优化 性能待优化 AI仿真加速 前沿动作功能 缺乏动作功能 AI动作生成 优秀的易用性和适配性 缺乏AI能力 保证每个目标平台的极致性能 跨端确定性 – 保证所有目标平台计算结 果完全一致 具备分布式能力 – 通过横向扩展突破单 机物理算力的上限 机物理算力的上限 Motphys 物理引擎的设计目标 Rust 的性能和 C/C++ 比肩,支持 SIMD 优 化,满足苛求性能的引擎研发需求; Rust 的零开销抽象甩掉了复杂设计的性能包袱 # 高性能 Rust 在不损耗性能的情况下,其优秀的语 法设计保证了语言的强大表达力:用更少 的代码写更多的功能 # 高表达力 # 安全 Rust 依靠 LLVM 实现了多目标平台,并可 以用语言内建的 target_feature0 码力 | 22 页 | 1.18 MB | 1 年前3
Hello 算法 1.1.0 Rust版它为数据的有序组织提供了蓝图,算法得以在此基础上生动起来。 第 3 章 数据结构 hello‑algo.com 52 3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向 非线性数据结构可以进一步划分为树形结构和网状结构。 ‧ 树形结构:树、堆、哈希表,元素之间是一对多的关系。 ‧ 网状结构:图,元素之间是多对多的关系。 图 3‑1 线性数据结构与非线性数据结构 3.1.2 物理结构:连续与分散 当算法程序运行时,正在处理的数据主要存储在内存中。图 3‑2 展示了一个计算机内存条,其中每个黑色方 块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲 内存;如果缺少连续大块的内存空间,那么所选用的数据结构必须能够存储在分散的内存空间内。 如图 3‑3 所示,物理结构反映了数据在计算机内存中的存储方0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版基础上生动起来。 第 3 章 数据结构 www.hello‑algo.com 52 3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向 非线性数据结构可以进一步划分为树形结构和网状结构。 ‧ 树形结构:树、堆、哈希表,元素之间是一对多的关系。 ‧ 网状结构:图,元素之间是多对多的关系。 图 3‑1 线性数据结构与非线性数据结构 3.1.2 物理结构:连续与分散 当算法程序运行时,正在处理的数据主要存储在内存中。图 3‑2 展示了一个计算机内存条,其中每个黑色方 块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则通常无法被其他程序同时使用了。因此在数 据结构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余 空闲内存;如果缺少连续大块的内存空间,那么所选用的数据结构必须能够存储在分散的内存空间内。 如图 3‑3 所示,物理结构反映了数据在计算机内存中的存储0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版它为数据的有序组织提供了蓝图,算法得以在此基础上生动起来。 第 3 章 数据结构 hello‑algo.com 52 3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向 非线性数据结构可以进一步划分为树形结构和网状结构。 ‧ 树形结构:树、堆、哈希表,元素之间是一对多的关系。 ‧ 网状结构:图,元素之间是多对多的关系。 图 3‑1 线性数据结构与非线性数据结构 3.1.2 物理结构:连续与分散 当算法程序运行时,正在处理的数据主要存储在内存中。图 3‑2 展示了一个计算机内存条,其中每个黑色方 块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大 及地址空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲 内存;如果缺少连续大块的内存空间,那么所选用的数据结构必须能够存储在分散的内存空间内。 如图 3‑3 所示,物理结构反映了数据在计算机内存中的存储方0 码力 | 383 页 | 17.61 MB | 1 年前3
⽤ egg 孵化你的 SQL 优化器 - 王润基2 = “Bob” Hash Join $1.1 = $2.1 Scan $1.1, $1.2 Scan $2.1, $2.2 Projection $1.2 + $2.2 物理下标解析 Filter #1 = “Bob” Hash Join #0 = #2 Scan $1.1, $1.2 Scan $2.1, $2.2 Projection #1 #0 a + b 物理下标解析 Parser Binder Optimizer Executor SQL AST Table 基于 egg 的新版查询引擎 类型分析 Schema 分析 聚合分析 — 类型检查 — 通配符展开 — 聚合提取 常量分析 列分析 ⾏分析 类型分析 Schema 分析 — 类型解析 — 物理下标解析 — 常量折叠0 码力 | 39 页 | 6.48 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Rust 版非線性資料結構可以進一步劃分為樹形結構和網狀結構。 ‧ 樹形結構:樹、堆積、雜湊表,元素之間是一對多的關係。 ‧ 網狀結構:圖,元素之間是多對多的關係。 圖 3‑1 線性資料結構與非線性資料結構 3.1.2 物理結構:連續與分散 當演算法程式執行時,正在處理的資料主要儲存在記憶體中。圖 3‑2 展示了一個計算機記憶體條,其中每個 黑色方塊都包含一塊記憶體空間。我們可以將記憶體想象成一個巨大的 Excel 位址空間、記憶體管理、快取機制、虛擬記憶體和物理記憶體等概念。 記憶體是所有程式的共享資源,當某塊記憶體被某個程式佔用時,則通常無法被其他程式同時使用了。因此 在資料結構與演算法的設計中,記憶體資源是一個重要的考慮因素。比如,演算法所佔用的記憶體峰值不應 超過系統剩餘空閒記憶體;如果缺少連續大塊的記憶體空間,那麼所選用的資料結構必須能夠儲存在分散的 記憶體空間內。 如圖 3‑3 所示,物理結構反映了資料在計算機 所示,物理結構反映了資料在計算機記憶體中的儲存方式,可分為連續空間儲存(陣列)和分散空 間儲存(鏈結串列)。物理結構從底層決定了資料的訪問、更新、增刪等操作方法,兩種物理結構在時間效率 和空間效率方面呈現出互補的特點。 第 3 章 資料結構 www.hello‑algo.com 54 圖 3‑3 連續空間儲存與分散空間儲存 值得說明的是,所有資料結構都是基於陣列、鏈結串列或二者的組合實現的。例如,堆疊和佇列既可以使用0 码力 | 388 页 | 18.82 MB | 10 月前3
新一代分布式高性能图数据库的构建 - 沈游人计算下推:面向图应用特征设计 分布式存储 Find Vertex Walk Vertex Scan Cartesian Product Projection Filter Stage Stage 物理执行计划 01 02 03 将不同的执行阶段推送到对应的存储 引擎,减少网络传输和内存压力 实际执行时,执行器等待流数据,处 理后将数据推送到下一个执行器 切分执行计划,将执行计划划分成不 海致图神经网络平台特点 Rust 语言特性助力构建高性能图数据库 01 利用 Rust Stream 进行数据流式 处理 02 03 协程和严格的内存安全性,编译 时捕获数据竞争和并发问题 异步物理算子实现,异步 IO 数 据获取 01 可静态分发的 Trait 在不带来性 能损失的同时也提高代码组织性 02 03 强大的跨平台能力,在不同架构 下可以准确的控制代码行为 编译期间对生命周期检查确保内0 码力 | 38 页 | 24.68 MB | 1 年前3
Rust 语言学习笔记会让这个栈空间里的对象自动进 入 Drop 流程,最后栈顶指针自动移动到上一个调用栈顶,无需程序员手动 干预,因而栈内存申请和释放是非常高效的。 相对地,堆上内存则是从低位地址向上增长,堆内存通常只受物理内存限制, 而且通常是不连续的,一般由程序员手动申请和释放的,如果想申请一块连续 内存,则操作系统需要在堆中查找一块未使用的满足大小的连续内存空间,故 其效率比栈要低很多,尤其是堆上如果有大量不连续内存时。另外内存使用完0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust算法教程 The Algos (algorithms)作的⼀端称为队尾,进 ⾏删除操作的⼀端称为队头。队列中没有元素时,称为空队列。 4. 链表( Linked List) 链表是⼀种数据元素按照链式存储结构进⾏存储的数据结构,这种存储结 构具有在物理上存在⾮连续的特点。链表由⼀系列数据结点构成,每个数据结点包括数据域 和指针域两部分。其中,指针域保存了数据结构中下⼀个元素存放的地址。链表结构中数据 元素的逻辑顺序是通过链表中的指针链接次序来实现的。0 码力 | 270 页 | 8.46 MB | 1 年前3
Comprehensive Rust(日语) 202412。そうなると、ホストがキャッシュをフラッシ ュするか VM がキャッシュを有効化したときに、VM かホストのどちらかによる変更が失 われてしまいます。 (キャッシュは仮想アドレスや IPA ではなく物理アドレスをキーとして アクセスされます) • 単純化のために、ハードコードしたページテーブル(idmap.S 参照)を利用します。このページ テーブルは最初の 1GiB をデバイス用に、次の 1GiB paging::{Attributes, MemoryRegion}, }; const ASID: usize = 1; const ROOT_LEVEL: usize = 1; // 仮想物理同一となる新しいページテーブルを作成します。 let mut idmap = IdMap::new(ASID, ROOT_LEVEL); // 2 MiB のメモリ領域を読み取り専用としてマッピングします。0 码力 | 381 页 | 1.36 MB | 10 月前3
共 11 条
- 1
- 2













