parallel_io/
parallel_io.rs1use mpi::io::{File, MODE_CREATE, MODE_DELETE_ON_CLOSE, MODE_RDWR};
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
13 let path = std::env::temp_dir().join(format!("mpi_no_c_io_{size}.bin"));
16 let mut f = File::open(
17 &world,
18 &path,
19 MODE_CREATE | MODE_RDWR | MODE_DELETE_ON_CLOSE,
20 )
21 .expect("File::open failed");
22
23 let block = [rank * 100, rank * 100 + 1, rank * 100 + 2, rank * 100 + 3];
24 f.write_at_all(rank as u64 * 16, &block)
25 .expect("write failed");
26
27 if rank == 0 {
28 for r in 0..size {
29 let mut buf = [0i32; 4];
30 f.read_at(r as u64 * 16, &mut buf).expect("read failed");
31 assert_eq!(
32 buf,
33 [r * 100, r * 100 + 1, r * 100 + 2, r * 100 + 3],
34 "I/O block mismatch"
35 );
36 }
37 println!("IO PASS: parallel write/read verified on {size} ranks.");
38 }
39
40 world.barrier();
41 }