当前位置: 首页 > news >正文

Rust 学习笔记:循环和迭代器的性能比较

Rust 学习笔记:循环和迭代器的性能比较

  • Rust 学习笔记:循环和迭代器的性能比较
    • 示例 1
    • 示例 2
    • 总结

Rust 学习笔记:循环和迭代器的性能比较

示例 1

我们运行一个基准测试,将《福尔摩斯探案集》的全部内容加载到一个字符串中,并在内容中查找单词 the。下面是使用 for 循环的搜索版本和使用迭代器的版本的基准测试结果:

test bench_search_for  ... bench:  19,620,300 ns/iter (+/- 915,700)
test bench_search_iter ... bench:  19,234,900 ns/iter (+/- 657,200)

使用迭代器的版本略优于使用循环的版本。

迭代器虽然是高级抽象,但编译后的代码与自己编写的底层代码大致相同。

迭代器是 Rust 的零成本抽象之一,意思是使用抽象不会带来额外的运行时开销。

示例 2

以下代码取自音频解码器。解码算法使用线性预测数学运算来估计基于前一个样本的线性函数的未来值。这段代码使用一个迭代器链对作用域中的三个变量进行一些计算:一个数据的缓冲片、一个包含12个系数的数组,以及要在qlp_shift中移动数据的量。我们在这个例子中声明了变量,但没有给它们任何值;尽管这段代码在其上下文之外没有太多意义,但它仍然是Rust如何将高级思想转换为低级代码的一个简明的真实示例。

let buffer: &mut [i32];
let coefficients: [i64; 12];
let qlp_shift: i16;for i in 12..buffer.len() {let prediction = coefficients.iter().zip(&buffer[i - 12..i]).map(|(&c, &s)| c * s as i64).sum::<i64>() >> qlp_shift;let delta = buffer[i];buffer[i] = prediction as i32 + delta;
}

为了计算预测值,这段代码遍历系数中的 12 个值,并使用 zip 方法将系数值与缓冲区中的前 12 个值配对。然后,对于每一对,我们将这些值相乘,对所有结果求和,并将总和 qlp_shift 位中的位向右移动。

音频解码器等应用程序中的计算通常最优先考虑性能。这里,我们使用两个适配器创建一个迭代器,然后消费该值。这个 Rust 代码编译成什么汇编代码?

没有任何循环对应于对系数值的迭代:Rust 知道有 12 次迭代,所以它“展开”循环。展开是一种优化,它消除了循环控制代码的开销,而是为循环的每次迭代生成重复的代码。

所有的系数都存储在寄存器中,这意味着访问值非常快。在运行时对数组访问没有边界检查。Rust 能够应用的所有这些优化使生成的代码非常高效。

现在知道了这一点,就可以毫无畏惧地使用迭代器和闭包了!它们使代码看起来更高级,但不会因此造成运行时性能损失。

总结

闭包和迭代器是受函数式编程语言思想启发的 Rust 特性。它们有助于 Rust 以低级性能清晰地表达高级思想的能力。

闭包和迭代器的实现不影响运行时性能。这是 Rust 努力提供零成本抽象目标的一部分。

相关文章:

  • MySQL 表内容的增删查改 -- CRUD操作,聚合函数,group by 子句
  • 期货反向跟单—交易规则设计(四)品种选择
  • 火热邀测!DataWorks数据集成支持大模型AI处理
  • vue3+element plus 自定义组件,单列的方块 图形加文字列表
  • Cursor:开启智能编程新视界
  • DeepSpeed常见面试问题
  • Unity屏幕适配——背景适配
  • 微前端架构设计与实战示例
  • 小白的进阶之路系列之四----人工智能从初步到精通pytorch自定义数据集下
  • 【数据库】概述(纯理论)
  • Rust 学习笔记:关于迭代器的练习题
  • 网盘解析工具v1.3.6,增加文件夹解析下载
  • STM32定时器的死区时间(DTR)如何计算
  • 【电商接口】开发者如何对接快手订单API?
  • CMake指令:source_group()
  • [Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译
  • 自学嵌入式 day 24 -系统编程 文件
  • JS逆向 【QQ音乐】sign签名| data参数加密 | AES-GCM加密 | webpack实战 (上)
  • 黑马程序员C++核心编程笔记--2 引用
  • ISOLAR软件生成报错处理(三)
  • 网站三要素关键词 描述怎么做/网站建设培训
  • 网站建设的网站定位/企业网址
  • 网站诊断表/百度关键词排名查询
  • 做公益网站赚钱吗/外贸平台推广
  • 淄博做网站哪家好/网络营销推广方案案例
  • 怎么做门户网站/互联网产品推广是做什么的