无法发送超过一定长度的 MPI 消息

can't send MPI messages over a certain length

我是 运行 mpi4py 2.0.0,在带有 Python .7.10 的 Ubuntu 14.04.3 系统上针对 OpenMPI 1.10.1 构建。出于某种原因,尝试发送大于 64 Kb 的消息会导致 send/recv 挂起;但是,我能够使用完全相同的软件和 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)

我还尝试使用明确指定的固定长度缓冲区将 pickled send/recv 替换为非 pickled Send/Recv,但这对问题没有任何影响。

奇怪的是,该问题似乎并未影响使用同一通信器的对等进程之间的传输。

问题已解决:OpenMPI 对 Docker 创建的虚拟网络接口的存在感到困惑。删除接口使怪异消失,尽管也可以告诉 OpenMPI ignore the interface.