Python 混合多处理/MPI 在同一节点中具有共享内存

标签 python multiprocessing mpi4py

我有一个Python应用程序需要加载同样大的 数组(~4 GB)并执行完美的并行函数 该数组的 block 。数组开始保存到磁盘。

我通常在集群计算机上运行此应用程序 比如说 10 个节点,每个节点有 8 个 计算核心和约 32GB 的总 RAM。

最简单的方法(不起作用)是 n=80 mpi4py。它不起作用的原因是 每个 MPI 核心都会加载 4GB 映射,这会耗尽 32GB RAM 导致 MemoryError

另一种选择是 rank=0 是唯一加载的进程 4GB 阵列,并将阵列的 block 分给其余的 MPI 核心——但由于网络原因,这种方法很慢 带宽问题。

最好的方法是每个节点仅加载 1 个核心 4GB 阵列并且该阵列可用作共享内存 (通过多处理?)每个处理器上剩余的 7 个核心 节点。

我怎样才能实现这个目标?我怎样才能让 MPI 知道节点 并使其与多处理协调?

最佳答案

MPI-3 具有适合您的场景的共享内存设施。并且您可以通过 mpi4py 使用 MPI.... 使用MPI_Comm_split_type将通信器分成位于节点上的组。对节点上的窗口使用MPI_Win_allocate_shared;仅在一个等级上指定非零大小。使用MPI_Win_shared_query获取指向该窗口的指针。

关于Python 混合多处理/MPI 在同一节点中具有共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46180292/

相关文章:

python - Pandas:缩短多列简单操作的符号

python - 如何加快访问 pandas 数据框列中的字典列表?

python - 在长列表中查找多个元素的索引

python - multiprocessing.Pool 进程锁定到单个核心

python - 如何在 python/windows 下对 I/O 事务设置超时并取消它?

python - 尝试遍历文本文件行时出现问题

python - .get() 之后多处理陷入困境

python - 无法使用 OpenMPI : Cannot compile MPI programs 安装 mpi4py

python - mpi4py Reduce() 中可能的缓冲区大小限制

openmpi - mpi4py irecv 导致段错误