pub struct Rayon { /* private fields */ }Expand description
A parallel execution strategy backed by a Commonware thread pool.
This strategy adaptively executes collection operations serially or through its backing pool. It records wall-clock estimates by callsite, input-size and work-size buckets, and planning parallelism so small inputs can avoid thread-pool scheduling overhead without disabling parallel execution for larger inputs.
Nested calls at the same callsite share estimates across parent paths, so use distinct
callsites (propagating #[track_caller] through helpers as needed) to tune them separately.
§Thread Pool Ownership
Rayon shares its rayon::ThreadPool through an Arc, so it can be cheaply cloned and
shared across threads. Multiple strategies can share the same pool.
§When to Use
Use Rayon when:
- Processing large collections where parallelism overhead is justified
- The fold/reduce operations are CPU-bound
- You want to utilize multiple cores
Consider Sequential instead when:
- The collection is small
- Operations are I/O-bound rather than CPU-bound
- Deterministic execution order is required for debugging
§Examples
use commonware_parallel::{Strategy, Rayon};
use std::num::NonZeroUsize;
let strategy = Rayon::new(NonZeroUsize::new(2).unwrap()).unwrap();
let data: Vec<i64> = (0..1000).collect();
let sum = strategy.fold(&data, || 0i64, |acc, &n| acc + n, |a, b| a + b);
assert_eq!(sum, 499500);Implementations§
Source§impl Rayon
impl Rayon
Sourcepub fn new(num_threads: NonZeroUsize) -> Result<Self, ThreadPoolBuildError>
pub fn new(num_threads: NonZeroUsize) -> Result<Self, ThreadPoolBuildError>
Creates a Rayon strategy with a ThreadPool that is configured with the given
number of threads.
Sourcepub fn with_pool(thread_pool: ThreadPool) -> Self
pub fn with_pool(thread_pool: ThreadPool) -> Self
Creates a new Rayon strategy with the given ThreadPool.
Build the pool with ThreadPoolBuilder and wrap it in an Arc.
Sourcepub const fn with_parallelism(self, parallelism: NonZeroUsize) -> Self
pub const fn with_parallelism(self, parallelism: NonZeroUsize) -> Self
Overrides the parallelism assumed for planning decisions.
This does not resize the backing pool. By default a strategy plans with the pool’s thread count; override it when the strategy should expose a different parallelism (e.g. a runtime that executes strategy work inline on a single thread).
Trait Implementations§
Source§impl Strategy for Rayon
Available on (crate features std) and neither commonware_stability_DELTA nor commonware_stability_EPSILON nor commonware_stability_GAMMA nor commonware_stability_RESERVED only.
impl Strategy for Rayon
std) and neither commonware_stability_DELTA nor commonware_stability_EPSILON nor commonware_stability_GAMMA nor commonware_stability_RESERVED only.Source§fn spawn<F, T>(
&self,
len: usize,
f: F,
) -> impl Future<Output = T> + Send + 'static
fn spawn<F, T>( &self, len: usize, f: F, ) -> impl Future<Output = T> + Send + 'static
A pool worker that awaits the result runs queued jobs on its own stack while it waits,
so blocking waits inside jobs must allow nesting. For example,
futures::executor::block_on panics if a nested job calls it on a thread that is
already inside it.
Source§fn run<R, SEQ, PAR>(&self, len: usize, serial: SEQ, parallel: PAR) -> R
fn run<R, SEQ, PAR>(&self, len: usize, serial: SEQ, parallel: PAR) -> R
Source§fn try_run_batches<R, E, F>(
&self,
len: usize,
minimum_batch_len: NonZeroUsize,
multiplier: usize,
run: F,
) -> Result<R, E>
fn try_run_batches<R, E, F>( &self, len: usize, minimum_batch_len: NonZeroUsize, multiplier: usize, run: F, ) -> Result<R, E>
run_batches, but for fallible work. Read moreSource§fn run_tiles<R, F>(
&self,
len: usize,
grids: &[Grid],
multiplier: usize,
run: F,
) -> R
fn run_tiles<R, F>( &self, len: usize, grids: &[Grid], multiplier: usize, run: F, ) -> R
len columns. Read moreSource§fn fold_init<I, INIT, T, R, ID, F, RD>(
&self,
iter: I,
init: INIT,
identity: ID,
fold_op: F,
reduce_op: RD,
) -> R
fn fold_init<I, INIT, T, R, ID, F, RD>( &self, iter: I, init: INIT, identity: ID, fold_op: F, reduce_op: RD, ) -> R
Source§fn map_collect_vec<I, F, T>(&self, iter: I, map_op: F) -> Vec<T>
fn map_collect_vec<I, F, T>(&self, iter: I, map_op: F) -> Vec<T>
Vec. Read moreSource§fn try_map_collect_vec<I, F, T, E>(
&self,
iter: I,
map_op: F,
) -> Result<Vec<T>, E>
fn try_map_collect_vec<I, F, T, E>( &self, iter: I, map_op: F, ) -> Result<Vec<T>, E>
Vec. Read moreSource§fn map_init_collect_vec<I, INIT, T, F, R>(
&self,
iter: I,
init: INIT,
map_op: F,
) -> Vec<R>
fn map_init_collect_vec<I, INIT, T, F, R>( &self, iter: I, init: INIT, map_op: F, ) -> Vec<R>
Vec. Read more