Rust并行编译的挑战与突破Rust并行编译的挑战与突破 李原 2022年5月28日 • 相关浅谈 • Rust并行编译的挑战与突破 • 从并行编译到并行程序设计 • Rust社区与并行编译 目录 相关浅谈 Rust编译速度之殇 编译器设计造成编译速度缓慢 · 单态化 · 借用检查 · 宏展开 · MIR优化 ... Rust规模编译速度慢于C++ Rust编译速度之殇 提升编译效率成为近年社区重点工作 提升编译效率成为近年社区重点工作 并行编译或成下一代编译效率突破利器 2017-2021,Rust编译速度已提升一倍以上 Rust社区编译器性能工作组 Rust编译器并行化 Cargo多crate并行 二进制生成并行 更多更好的并行化? Rust编译器架构 语法树生成 宏展开 命名解析 泛型解析 类型检查 借用检查 单态化 二进制生成 增量编译系统 底层数据 结构 Rust语言编译器结构总览 考虑内部编译流程并行化 考虑内部编译流程并行化 Rust并行并发 编译时线程安全检查 一些常见线程安全数据结构 常用Rust并行并发库 Rust并行并发 增加程序复杂度 线程安全数据结构造成效率损失 Mutex与RwLock rustc profileing 数据 · 代码复杂度及健壮性 · benchmark资源限制 · profileing成本 ... 收益 > 代价? Rust并行编译的挑战与突破0 码力 | 25 页 | 4.60 MB | 1 年前3
Rust 异步并发框架在移动端的应用 - 陈明煜陈明煜 chenmingyu4@huawei.com 华为 公共开发部 嵌入式软件能力中心 本科就读加州大学圣地亚哥分校,毕业时长两年半, Rustacean 在 华为 目前正在使用 Rust 开发并行调度框架等模块。 Rust 异步并发框架在移动端的应用 陈明煜 chenmingyu4@huawei.com 华为 公共开发部 嵌入式软件能力中心 Applications of Rust ,目前已经半废弃 async-std 更轻量化的调度框架,功能被拆分 到其他多个库中, IO 密集场景性 能不如 Tokio smol Rayon 并非异步运行时。它通过同步 多线程模型提供了并行迭代器功能, 适用于处理 CPU 密集型计算任务 rayon 现有框架无法完美适配移动端(一) Core Thread Thread Worker Worker task task Local Rust 异步并发框架,近期计划在 OpenHarmony 上开源。与 Tokio 类似,同样为事 件驱动型调度框架,提供异步 IO 、定时器、同步原 语等功能。但额外提供: 任务优先级调度 异步并行迭代器 结构化并发 Ylong Runtime 对外 接口 APP/SA 调度器 提 交 任 务 Async function CPU Task CPU Task IO Task0 码力 | 25 页 | 1.64 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0工具链不靠谱而被迫去了解其中的细节。更妙的是,语言设计本身会自然而然地引导你编写出 可靠的代码,并且运行速度和内存使用上都十分高效。 已经在从事编写底层代码的程序员可以使用 Rust 来提升信心。例如,在 Rust 中引入并行是相 对低风险的操作,因为编译器会替你找到经典的错误。同时你可以自信地采取更加激进的优 化,而不会意外引入崩溃或漏洞。 但 Rust 并不局限于底层系统编程。它表达力强、写起来舒适,让人能够轻松地编写出命令行 现在,让我们回过头来仔细看看这个 “Hello, world!” 程序。这是第一块拼图: fn main() { } 这几行定义了一个名叫 main 的函数。main 函数是一个特殊的函数:在可执行的 Rust 程序中, 它总是最先运行的代码。第一行代码声明了一个叫做 main 的函数,它没有参数也没有返回值。 如果有参数的话,它们的名称应该出现在小括号 () 中。 函数体被包裹在 {} 中。Rust rs 如果你有 C 或 C++ 背景,就会发现这与 gcc 和 clang 类似。编译成功后,Rust 会输出一个二 进制的可执行文件。 在 Linux、macOS 或 Windows 的 PowerShell 上,在 shell 中输入 ls 命令可以看见这个可 执行文件。 $ ls main main.rs 在 Linux 和 macOS,你会看到两个文件。在 Windows PowerShell0 码力 | 562 页 | 3.23 MB | 1 月前3
Hello 算法 1.2.0 简体中文 Rust 版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观察算法代码的执行过程;也可以点击“全屏观看”,以 获得更好的阅览体验。 图 0‑6 Python 代码的可视化运行 第 0 章 前言 www.hello‑algo.com 8 0.2.4 在提问讨论中共同成长 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 迈入数据结构与算法的知识殿堂。0 码力 | 387 页 | 18.51 MB | 10 月前3
Rust 语言学习笔记.................. 103 7.5.2 控制访问顺序的机制-原子类型与锁 ........................................ 104 7.6 并行 ........................................................................................ 106 7.7 些模块的最基本规则外,由开发者更大范围地自定义模块的存在。 首先在一个 rust 项目中,首先定义了 crate 和 module。 1.1 Crate 1.crate 编译后会形成一个库(例如.so)或二进制可执行文件。crate 分为两种: lib crate 和 bin crate。 2. 一个包可以带有零个或一个 lib crate 和任意多个 bin crate。一个包中必 须有 crate,至少一个,(lib cargo.toml 和 cargo.lock 文件总是位于项目根目录下。 源代码位于 src 目录下。 默认的库入口文件是 src/lib.rs。 默认的可执行程序入口文件是 src/main.rs。 其他可选的可执行文件位于 src/bin/*.rs(这里每一个 rs 文件均对应一个可执 行文件)。 外部测试源代码文件位于 tests 目录下。 示例程序源代码文件位于 examples。0 码力 | 117 页 | 2.24 MB | 1 年前3
Hello 算法 1.1.0 Rust版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观察算法代码的执行过程;也可以点击“全屏观看”,以 获得更好的阅览体验。 图 0‑6 Python 代码的可视化运行 第 0 章 前言 hello‑algo.com 8 0.2.4 在提问讨论中共同成长 在 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 迈入数据结构与算法的知识殿堂。0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.0.0 Rust版代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观察算法代码的执行过程;也可以点击“全屏观看”,以 获得更好的阅览体验。 图 0‑6 Python 代码的可视化运行 第 0 章 前言 hello‑algo.com 8 0.2.4 在提问讨论中共同成长 在 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将 引导你迈入数据结构与算法的知识殿堂。 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照0 码力 | 383 页 | 17.61 MB | 1 年前3
Comprehensive Rust(简体中文) 202412240 46.5.1 构建用于生成代码的脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . 240 46.5.2 构建用于构建 C++ 或执行任意操作的脚本 . . . . . . . . . . . . . . . . . . 240 46.6 依赖于 Crate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 65 关于 async/await 的误区 335 65.1 阻塞执行器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 65.2 Pin . . . . . adb sync 适用于你的模拟器或实际设备,并使用 src/android/build_all.sh 预构建所有 Android 示例。请阅读脚本,查看它所运行的命令,并确保这些命令能在你手动运行时正确执行。 Chromium 中的 Rust 深入探究 Chromium 中的 Rust 课程为期半天,旨在介绍 Chromium 浏览器中 Rust 的使用。课程内容 包括在 Chromium 的 gn0 码力 | 359 页 | 1.33 MB | 11 月前3
新一代分布式高性能图数据库的构建 - 沈游人,高性能图计算引 擎,预置 20 余种图计算算法 ,可扩展的分析引擎支持更复 杂的数据挖掘和机器学习场景 MPP Massively Parallel Processing 架构,大规模集群 分布式存储及并行计 算, Shared Nothing 模式支 持存储计算分离 高性能 基于 Rust 开发的分布式存储引 擎及图计算引擎,精细的内存 管理设计,内置索引系统,支 持毫秒级的并发查询响应速度 易用 事务管理 MVOCC 计算层 Cypher AST 优化器 图计算 内存加速引 擎 服务接口 HTTP/RPC Spark 连接器 Python UDF 执行器 索引管理 一致性存储 RAFT 分片管理 元数据 集群管理 用户权限 GNN 应用层 Atlas 图平台 Atlas Studio Atlas Client 基础 starts •2023-11 – DIS ballot ends •2024-04 – International Standard 类 SQL 语言,简单易用,面向分析师友好 查询引擎:计算请求执行流程 Cypher AST Unresolved Logical Plan Logical Plan Optimized Logical Plan Physical Plan Program0 码力 | 38 页 | 24.68 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性: Future 灵活的可组合性 • 任意定制 Poll 的执行逻辑 (Join / Select / Timeout) • 动态的调用关系 • 痛点:观测与调试工具无法理解灵活的执行逻辑 • Backtrace 不够直观 ( 调用栈 -> 调用树 ) • Tracing 无法追踪调用关系的变化 Async Rust Rust 观测与调试的痛点 Async Rust 回顾 • 特性:用户态调度的无栈协程 • Pending Task 不存在栈空间 • 痛点:观测与调试工具无法还原 Pending Task 的执行状态 • 难以得知 Task 阻塞的位置和原因 • 难以调试 Async Stuck • ? 如何解决? Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 追踪关键 Future 的生命周期和控制流 • Init, First Poll, Pending, Next Poll, Ready, Cancel • 实时将 Task 的执行状态维护为一棵树 • 显示目前正在阻塞 / 执行的 Await Point • 得名 Await-Tree 基本用例 Await Tree 的设计原理与实现 基本用例 Await Tree 的设计原理与实现 设计细节0 码力 | 37 页 | 8.60 MB | 1 年前3
共 25 条
- 1
- 2
- 3













