jsmpi 0.1.0

A browser-oriented MPI compatibility layer for Rust/WASM using Web Workers
Documentation
//! A minimal MPI-style hello world example.
//! The only target-specific differences are at the top import section and the entry wrapper.

#[cfg(target_arch = "wasm32")]
use jsmpi as mpi;

use mpi::traits::*;

#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;

fn run() {
    let universe = mpi::initialize().expect("failed to initialize MPI runtime");
    let world = universe.world();

    let rank = world.rank();
    let size = world.size();

    if rank == 0 {
        log::info!("[hello_ranks] starting demo with {size} ranks");
    }

    log::info!("[hello_ranks] rank {rank}/{size} initialized");
    log::info!("[hello_ranks] rank {rank} entering barrier");
    world.barrier();
    log::info!("[hello_ranks] rank {rank} left barrier");

    if rank == 0 {
        log::info!("[hello_ranks] all ranks reached the barrier, demo completed");
    }
}

fn main() {
    #[cfg(not(target_arch = "wasm32"))]
    env_logger::init();
    run();
}

#[cfg(target_arch = "wasm32")]
#[wasm_bindgen(start)]
pub fn start() {
    console_log::init().expect("could not initialize logger");
    run();
}