我正在使用 Python .7.10 在 Ubuntu 14.04.3 系统上运行针对 OpenMPI 1.10.1 构建的 mpi4py 2.0.0。出于某种原因,尝试发送大于 64 Kb 的消息会导致发送/接收挂起;但是,我能够使用完全相同的软件和 OpenMPI/mpi4py 包在其他 Ubuntu 14 系统上成功发送大消息。我还能够在使用 OpenMPI 的 C 程序中成功发送大型消息。这表明环境中有一些东西对 mpi4py 执行的 MPI 通信产生了不利影响。关于什么可能会干扰 mpi4py 的任何想法?
下面是一个在 N 设置为 65537 或更大时在一个系统上工作并在另一个系统上挂起的代码示例。
import os
import sys
from mpi4py import MPI
import numpy as np
N = 65537
def worker():
comm = MPI.Comm.Get_parent()
size = comm.Get_size()
rank = comm.Get_rank()
buf = np.empty(N, np.byte)
comm.Recv(buf=buf)
if __name__ == '__main__':
script_file_name = os.path.basename(__file__)
if MPI.Comm.Get_parent() != MPI.COMM_NULL:
worker()
else:
comm = MPI.COMM_SELF.Spawn(sys.executable,
args=[script_file_name],
maxprocs=1)
comm.Send(np.random.randint(0, 256, N).astype(np.byte), 0)
我还尝试使用明确指定的固定长度缓冲区将腌制发送/接收替换为非腌制发送/接收,但这对问题没有任何影响。
奇怪的是,这个问题似乎不会影响使用相同通信器的对等进程之间的传输。