rayon

Rayon: A data parallelism library for Rust

  • 所有者: rayon-rs/rayon
  • 平台:
  • 許可證: Apache License 2.0
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

Rayon

Rayon crate
Rayon documentation
Travis Status
Appveyor status
Join the chat at https://gitter.im/rayon-rs/Lobby

Rayon is a data-parallelism library for Rust. It is extremely
lightweight and makes it easy to convert a sequential computation into
a parallel one. It also guarantees data-race freedom. (You may also
enjoy this blog post about Rayon, which gives more background
and details about how it works, or this video, from the Rust
Belt Rust conference.) Rayon is
available on crates.io, and
API Documentation is available on docs.rs.

Parallel iterators and more

Rayon makes it drop-dead simple to convert sequential iterators into
parallel ones: usually, you just change your foo.iter() call into
foo.par_iter(), and Rayon does the rest:

use rayon::prelude::*;
fn sum_of_squares(input: &[i32]) -> i32 {
    input.par_iter() // <-- just change that!
         .map(, &i, i * i)
         .sum()
}

Parallel iterators take care of deciding how to divide your data
into tasks; it will dynamically adapt for maximum performance. If you
need more flexibility than that, Rayon also offers the join and
scope functions, which let you create parallel tasks on your own.
For even more control, you can create custom threadpools rather than
using Rayon's default, global threadpool.

No data races

You may have heard that parallel execution can produce all kinds of
crazy bugs. Well, rest easy. Rayon's APIs all guarantee data-race
freedom
, which generally rules out most parallel bugs (though not
all). In other words, if your code compiles, it typically does the
same thing it did before.

For the most, parallel iterators in particular are guaranteed to
produce the same results as their sequential counterparts. One caveat:
If your iterator has side effects (for example, sending methods to
other threads through a Rust channel or writing to disk), those side
effects may occur in a different order. Note also that, in some cases,
parallel iterators offer alternative versions of the sequential
iterator methods that can have higher performance.

Using Rayon

Rayon is available on crates.io. The
recommended way to use it is to add a line into your Cargo.toml such
as:

[dependencies]
rayon = "1.1"

To use the Parallel Iterator APIs, a number of traits have to be in
scope. The easiest way to bring those things into scope is to use the
Rayon prelude. In
each module where you would like to use the parallel iterator APIs,
just add:

use rayon::prelude::*;

Rayon currently requires rustc 1.31.0 or greater.

Contribution

Rayon is an open source project! If you'd like to contribute to Rayon, check out the list of "help wanted" issues. These are all (or should be) issues that are suitable for getting started, and they generally include a detailed set of instructions for what to do. Please ask questions if anything is unclear! Also, check out the Guide to Development page on the wiki. Note that all code submitted in PRs to Rayon is assumed to be licensed under Rayon's dual MIT/Apache2 licensing.

Quick demo

To see Rayon in action, check out the rayon-demo directory, which
includes a number of demos of code using Rayon. For example, run this
command to get a visualization of an nbody simulation. To see the
effect of using Rayon, press s to run sequentially and p to run in
parallel.

> cd rayon-demo
> cargo run --release -- nbody visualize

For more information on demos, try:

> cd rayon-demo
> cargo run --release -- --help

Other questions?

See the Rayon FAQ.

License

Rayon is distributed under the terms of both the MIT license and the
Apache License (Version 2.0). See LICENSE-APACHE and
LICENSE-MIT for details. Opening a pull requests is
assumed to signal agreement with these licensing terms.

主要指標

概覽
名稱與所有者rayon-rs/rayon
主編程語言Rust
編程語言Rust (語言數: 2)
平台
許可證Apache License 2.0
所有者活动
創建於2014-10-02 15:38:05
推送於2025-04-11 18:30:37
最后一次提交
發布數61
最新版本名稱v1.10.0 (發布於 2024-03-23 22:24:23)
第一版名稱v0.2.0 (發布於 )
用户参与
星數11.9k
關注者數104
派生數531
提交數2.2k
已啟用問題?
問題數594
打開的問題數188
拉請求數536
打開的拉請求數21
關閉的拉請求數81
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?