mpi4py: порождающие процессы и родительский объект не завершается, зависает выполнение при вызове comm.Disconnect - PullRequest
3 голосов
/ 30 апреля 2019

Я тестирую код, который требует умножения матриц, и я хочу делегировать эту операцию другому коду, который я модифицировал из примеров в 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

Если я запустил пример вычислительного PI на https://mpi4py.readthedocs.io/en/stable/tutorial.html,, я также получаю ситуацию зависания. Я на Ubuntu 16.04.6, есть версия openmpi 1.10.2.

...