#并行 #rayon #mpi #宇宙 #arc #intranode #internode

balancer

使用 rayon 和 mpi 实现简单的节点间 + 节点内并行

1 个不稳定版本

0.2.0 2023年3月5日
0.1.0 2019年5月26日

#7 in #宇宙

MIT/Apache

12KB
112 代码行数(不包括注释)

balancer:简单的多节点并行

利用 rayonmpi 的力量,实现了简单任务的节点间和节点内并行。

示例用法

查看 examples/simple.rs

use std::sync::Arc;

use balancer::Balancer;
use mpi::environment::Universe;

fn main() {
    let universe = Arc::new(mpi::initialize().unwrap());
    experiment(universe.clone());
    experiment(universe.clone());
}

fn experiment(universe: Arc<Universe>) {
    // Get relevant portion of data on this node
    let data: Vec<f64> = (0..100_000).map(|x| x as f64 / 100_000.0).collect();

    // Define task
    let work = |x: &f64| x * x;

    // Initialize balancer, work and collect
    let verbose = false;
    let balancer = Balancer::new(universe, verbose);
    balancer.work_local(&data, work);
    let output = balancer.collect();

    // That's it!
    // Let's do some verification
    if balancer.rank == 0 {
        for (expected, actual) in data.iter().map(work).zip(output.as_ref().unwrap()) {
            assert_eq!(expected, *actual);
        }
    }
}

依赖

~1.6–4MB
~75K SLoC