buffered/
buffered.rs

1#![deny(warnings)]
2extern crate mpi_fork_fnsp as mpi;
3
4use mpi::request::WaitGuard;
5use mpi::traits::*;
6
7const BUFFER_SIZE: usize = 10 * 1024 * 1024;
8
9fn main() {
10    let mut universe = mpi::initialize().unwrap();
11    // Try to attach a buffer.
12    universe.set_buffer_size(BUFFER_SIZE);
13    // Check buffer size matches.
14    assert_eq!(universe.buffer_size(), BUFFER_SIZE);
15    // Try to detach the buffer.
16    universe.detach_buffer();
17    // Attach another buffer.
18    universe.set_buffer_size(BUFFER_SIZE);
19
20    let world = universe.world();
21
22    let x = vec![std::f32::consts::PI; 1024];
23    let mut y = vec![0.0; 1024];
24    mpi::request::scope(|scope| {
25        let _rreq = WaitGuard::from(
26            world
27                .any_process()
28                .immediate_receive_into(scope, &mut y[..]),
29        );
30        world.this_process().buffered_send(&x[..]);
31    });
32    assert_eq!(x, y);
33}