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

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

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 努力提供零成本抽象目标的一部分。

基于分布式模型预测控制的多个固定翼无人机一致性控制(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,采用Matlab代码实现相关算法,属于顶级EI期刊的复现研究成果。文中重点研究了分布式模型预测控制(DMPC)在多无人机系统中的一致性控制问题,通过构建固定翼无人机的动力学模型,结合分布式协同控制策略,实现多无人机在复杂环境下的轨迹一致性稳定协同飞行。研究涵盖了控制算法设计、系统建模、优化求解及仿真验证全过程,并提供了完整的Matlab代码支持,便于读者复现实验结果。; 适合人群:具备自动控制、无人机系统或优化算法基础,从事科研或工程应用的研究生、科研人员及自动化、航空航天领域的研发工程师;熟悉Matlab编程基本控制理论者更佳; 使用场景及目标:①用于多无人机协同控制系统的算法研究与仿真验证;②支撑科研论文复现、毕业设计或项目开发;③掌握分布式模型预测控制在实际系统中的应用方法,提升对多智能体协同控制的理解与实践能力; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注DMPC算法的构建流程、约束处理方式及一致性协议的设计逻辑,同时可拓展学习文中提及的路径规划、编队控制等相关技术,以深化对无人机集群控制的整体认知。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值