首页 > 解决方案 > mpi4py:生成进程和父进程未退出,在调用 comm.Disconnect 时挂起执行

问题描述

我正在测试一个需要矩阵乘法的代码,我想将此操作委托给我从 mpi4py 中的示例修改的用于矩阵乘法的另一个代码。生成此脚本的代码是:

from mpi4py import MPI
import numpy as np
import sys

A = np.array([[1., 2.], [4., 5.], [7., 8.], [3., 6]])
B = np.array([[9., 8., 7.], [6., 5., 4.]])
C = np.zeros((A.shape[0], B.shape[1]))
comm = MPI.COMM_SELF.Spawn(sys.executable, args=['libraries/multiplication.py', str(A.shape[0]), str(A.shape[1]), str(B.shape[1])], maxprocs=3)
comm.Send(A, dest=0)
comm.Bcast(B, root=MPI.ROOT)
comm.Recv(C, source=0)
print(C)
comm.Disconnect()

该代码打印矩阵产品并且是正确的,不显示任何错误消息,但不退出。我Disconnect只在父通信器上调用 multiplication.py。我正在运行mpirun -n 1 python test.py

如果我在https://mpi4py.readthedocs.io/en/stable/tutorial.html上运行计算 PI 示例,我也会遇到问题。我在 Ubuntu 16.04.6 上,有 openmpi 版本 1.10.2。

标签: python-3.xopenmpispawnmpi4py

解决方案


推荐阅读