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 size = world.size();
11 let rank = world.rank();
12
13 if rank > 0 {
14 let msg = rank as u8;
15 world.barrier();
16 world.process_at_rank(0).ready_send(&msg);
17 } else {
18 let mut v = vec![0u8; (size - 1) as usize];
19 mpi::request::scope(|scope| {
20 let reqs = v
21 .iter_mut()
22 .zip(1..)
23 .map(|(x, i)| {
24 world
25 .process_at_rank(i as Rank)
26 .immediate_receive_into(scope, x)
27 })
28 .collect::<Vec<_>>();
29 world.barrier();
30 for req in reqs {
31 req.wait();
32 }
33 });
34 println!("Got message: {:?}", v);
35 assert!(v.iter().zip(1..).all(|(x, i)| i == *x as usize));
36 }
37}