mpiexec:为什么我的python程序仅在一个CPU上运行?

问题描述 投票:0回答:1

我正在尝试将python程序(program_to_parallelize.py)并行化为我的16核计算机上的16个子进程。我使用此代码,它是Python脚本的一部分:

import subprocess
subprocess.call("mpiexec -n 16 python program_to_parallelize.py", shell=True)

此运行没有任何错误,但是当我查看CPU使用率时,我发现所有子进程都在一个CPU上运行。 (点击here以查看在命令行中输入“ top 1”时得到的结果)但是我更希望16个进程每个占用一个CPU的100%,而不是全部共享第一个进程。

我正在研究16核Ubuntu 16.04.6 LTS。我使用的是mpi4py的3.0.3版本我使用的是3.3.2版的mpiexec

python-3.x parallel-processing mpi4py mpiexec
1个回答
1
投票

您应该使用多处理模块来实现这一目标,另请参见:https://docs.python.org/3/library/multiprocessing.html

根据问题What is the difference between multiprocessing and subprocess?

子进程模块可让您运行和控制其他程序。您可以在计算机上以命令行开头的任何内容,使用此模块运行和控制。使用它来集成外部程序添加到您的Python代码中。

多重处理模块可让您划分以python编写的任务多个流程来帮助提高性能。它提供了一个API与线程模块非常相似;它提供了共享的方法跨它创建的流程进行数据,并进行管理任务多个进程来运行Python代码(容易得多)。换一种说法,多重处理使您可以利用多个过程来获得通过并行执行代码,您的任务可以更快地完成。

© www.soinside.com 2019 - 2024. All rights reserved.