【发布时间】:2020-05-22 13:25:37
【问题描述】:
首先,我对 mpi 还很陌生,所以对于可能是极其微不足道的问题,我深表歉意。
我试图在我的笔记本电脑上并行运行一个 python 程序,然后再继续在我大学的本地集群上运行它。我在多处理中使用 Pool 取得了成功;但是,我现在需要使用 schwimmbad 的 MPIPool 创建一个池。
并行化事物的代码的主要组成部分如下。
from schwimmbad import MPIPool
"""
Various other components of the code...
"""
with MPIPool() as pool:
if not pool.is_master():
pool.wait()
sys.exit(0)
"""
The code continues....
"""
“pool”然后被输入到一个来自不同库的对象中,该库做自己的事情。这与用于多处理的代码相同,将 schwimmbad 中的 MPIPool 替换为多处理中的 Pool 并删除“if not pool.is_master()...”代码块。我的笔记本电脑上有两个内核,所以要执行这个程序,我在终端中输入以下内容。
mpirun -n 2 python3 script.py
我希望此命令运行单个程序并让池将进程分布在这两个内核上。看起来实际发生的是两个副本 script.py 分别在每个核心上运行。事实证明,在执行代码的主要部分之前我告诉程序打印的所有内容都会打印两次,并且与使用多处理模块的运行方式相比,程序运行速度相当慢。
我还尝试通过相同的命令运行其他人的代码,该代码也使用 MPIPool,结果发生了同样的事情 - 他们的程序运行了两次。
如何让 mpirun 只运行一个程序,其进程分布在我机器上的两个内核上,就像我刚刚使用多处理模块一样?
感谢您的宝贵时间!
【问题讨论】:
-
你有什么问题?
-
我已经在最后澄清了这个问题,我很抱歉。
标签: python python-multiprocessing