1 个不稳定版本
0.6.0 | 2022年3月24日 |
---|
#619 in 并发
在 funspace 中使用
245KB
5K SLoC
mpi-fork-fnsp
Rust 语言的 Message Passing Interface 绑定
Message Passing Interface (MPI) 是一种消息传递风格并发库的规范。MPI 的实现通常用于在高性能计算系统中结构化并行计算。MPI 规范描述了 C 编程语言(及其通过它 C++)以及 Fortran 编程语言的绑定。这个库试图将 Rust 世界连接起来。
这个包是从 RSMPI 分支出来的。
与原始库的主要区别
- 使用最新版本,crates.io 上的旧版本无法编译
- 增加对复数的支持
- 将工作空间合并到单个 crate 中
用法
在您的 Cargo.toml
中将 mpi
crate 添加为依赖项
[dependencies]
mpi = { path = "mpi-fork-fnsp", version = "0.6" }
然后在您的程序中使用它,如下所示
extern crate mpi;
use mpi::traits::*;
fn main() {
let universe = mpi::initialize().unwrap();
let world = universe.world();
let size = world.size();
let rank = world.rank();
if size != 2 {
panic!("Size of MPI_COMM_WORLD must be 2, but is {}!", size);
}
match rank {
0 => {
let msg = vec![4.0f64, 8.0, 15.0];
world.process_at_rank(rank + 1).send(&msg[..]);
}
1 => {
let (msg, status) = world.any_process().receive_vec::<f64>();
println!("Process {} got message {:?}.\nStatus is: {:?}", rank, msg, status);
}
_ => unreachable!()
}
}
功能
绑定遵循 MPI 3.1 规范。
目前支持
- 组、上下文、通信器:
- 第 6 节中的组和管理(内联)通信器基本完成。
- 无跨通信器
- 无进程拓扑
- 点对点通信:
- 标准、缓冲、同步和就绪模式的发送,有阻塞和非阻塞两种形式
- 接收,有阻塞和非阻塞两种形式
- 发送-接收
- 探测
- 匹配的探测/接收
- 集体通信:
- 屏障
- 广播
- (全部) 聚集
- 分散
- 全到全
- 可变计数操作
- 归约/扫描
- 阻塞和非阻塞形式
- 数据类型:在 Rust 类型与 MPI 基本类型以及可以作为缓冲区视图的自定义 MPI 数据类型之间建立桥梁。
不支持(尚不支持)
- 进程管理
- 单向通信(RMA)
- MPI 并行 I/O
- 许多小事情
子模块包含了对哪些功能支持和不支持的更详细描述。
进一步阅读
虽然本仓库中的每个公开定义的项目都应该附有文档,但目前的描述大多非常简略,对于初学者来说,只有与MPI规范结合才能理解其含义。
许可证:MIT/Apache-2.0
依赖项
~0.4–3MB
~60K SLoC