immediate_scatter/
immediate_scatter.rs

1#![deny(warnings)]
2extern crate mpi_fork_fnsp as mpi;
3
4use mpi::topology::Rank;
5use mpi::traits::*;
6
7fn main() {
8    let universe = mpi::initialize().unwrap();
9    let world = universe.world();
10    let rank = world.rank();
11    let size = world.size();
12    let root_rank = 0;
13    let root_process = world.process_at_rank(root_rank);
14
15    let mut x = 0 as Rank;
16    if rank == root_rank {
17        let v = (0..size).collect::<Vec<_>>();
18        mpi::request::scope(|scope| {
19            let req = root_process.immediate_scatter_into_root(scope, &v[..], &mut x);
20            req.wait();
21        });
22    } else {
23        mpi::request::scope(|scope| {
24            let req = root_process.immediate_scatter_into(scope, &mut x);
25            req.wait();
26        });
27    }
28    assert_eq!(x, rank);
29}