本文介绍: 考虑使用Rayon。这是一个并行计算库,利用worksteal思想,让负载不高的线程,去分担其他线程工作。在cargo.toml文件dependence新增。无痛Rust并行编程:Rayon初体验。Rust Cookbook 中文版数据并行。有这样一段程序计算1到1亿的连续数字之和。【每周一库】- Rayon 数据并行计算库。如果不加 —release,相差更多。parparallel添加部分代码统计程序执行时间。Rust 烹饪书-并行任务rayon相关代码解析

本文是对 N倍性能提升!无痛Rust并行编程:Rayon初体验[1]学习记录

有这样一段程序计算1到1亿的连续数字之和

use std::i64;

fn main() {

    let arr:Vec<i64&gt; = (1..1_0000_0000).collect();

    let result = sum_of_add(&amp;arr);

    println!("{}",result);
}


fn sum_of_add(input: &amp;[i64]) -&gt; i64 {

    input.iter()
    .map(|&amp;i| i + i)
    .sum()

}

添加部分代码统计程序执行时间

use std::{i64time::SystemTime};

fn main() {
    let arrVec<i64&gt; = (1..1_0000_0000).collect();

    let time_a = SystemTime::now();

    let result = sum_of_add(&amp;arr);

    println!("{}"result);

    let time_b = SystemTime::now().duration_since(time_a);
    println!("{:?}"time_b);
}

fn sum_of_add(input: &amp;[i64]) -&gt; i64 {
    input.iter().map(|&amp;i| i + i).sum()
}

执行 cargo run --release, 输出:

9999999900000000
Ok(67.672ms)

考虑使用Rayon。这是一个并行计算库,利用worksteal思想,让负载不高的线程,去分担其他线程工作

cargo.toml文件dependence处新增 rayon = "1.8"

代码use rayon::prelude::*;

同时将 input.iter().map(|&amp;i| i + i).sum() 改为 input.par_iter().map(|&amp;i| i + i).sum()即可。 parparallel

use std::{i64time::SystemTime};
use rayon::prelude::*;

fn main() {
    let arrVec<i64&gt; = (1..1_0000_0000).collect();

    let time_a = SystemTime::now();

    let result = sum_of_add(&amp;arr);

    println!("{}"result);

    let time_b = SystemTime::now().duration_since(time_a);
    println!("{:?}"time_b);
}

fn sum_of_add(input: &amp;[i64]) -&gt; i64 {
    input.par_iter().map(|&amp;i| i + i).sum()
}

再次 cargo run --release

结果为:

9999999900000000
Ok(29.368ms)

提升了一倍有余。

如果不加 —release,相差更多。

rayon相关代码解析[2]

更多阅读

【每周一库】- Rayon 数据并行计算[3]

Rust Cookbook 中文版数据并行[4]Rust 烹饪书-并行任务[5] 只有翻译区别

参考资料

[1]

N倍性能提升!无痛Rust并行编程:Rayon初体验: https://www.bilibili.com/video/BV1Rz4y1P791


[2]

rayon相关代码解析: https://github.com/cuishuang/explainrustsourcecodeby-chatgpt/tree/main/rayon


[3]

【每周一库】- Rayon 数据并行计算库: https://rustcc.cn/article?id=181e0a73-6742-42a9-b7a1-1c00bef436c2


[4]

Rust Cookbook 中文版-数据并行: https://rustwiki.org/zh-CN/rustcookbook/concurrency/parallel.html


[5]

Rust 烹饪书-并行任务: https://llever.com/rustcookbookzh/concurrency/parallel.zh.html


本文 mdnice 平台发布

原文地址:https://blog.csdn.net/techdashen/article/details/134806233

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48530.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注