无法发送超过一定长度的 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.
我是 运行 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.