1 个不稳定版本
0.2.0 | 2023年3月5日 |
---|---|
0.1.0 |
|
#7 in #宇宙
12KB
112 代码行数(不包括注释)
balancer:简单的多节点并行
利用 rayon
和 mpi
的力量,实现了简单任务的节点间和节点内并行。
示例用法
查看 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