繁体   English   中英

mpi4py:无法通过send / recv向从站发送消息

[英]mpi4py: trouble sending messages to slaves via send/recv

我正在尝试在Slurm群集上运行以下代码。 逻辑很简单:主节点将列表项发送到从节点进行打印。 最后,它使用带有tag = 1的消息来通知从站终止循环。

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
status = MPI.Status()


if rank == 0:
    data = ['string1', 'string2', 'string3']
    for k in data:
        comm.send(k, dest=1, tag=11)
    comm.send('', dest=1, tag=1)
elif rank == 1:
    while True:
        print('trying to get something')
        item = comm.recv(source=0,status=status)

        if status.tag == 1:
            print('terminating')
            break

        print(item)

我在本地计算机上得到了以下输出:

trying to get something
string1
trying to get something
string2
trying to get something
string3
trying to get something
terminating

但是在群集上,它向我显示了以下输出,并且似乎从服务器在第一个comm.recv期间被无限期地阻塞。

 trying to get something

我对任何有关终止从站或解决上述问题的逻辑缺陷的想法表示赞赏。

我能看到的唯一原因是recv的标签与任何标签都不匹配,然后recv不返回。 但是我在想默认标记确实是MPI.ANY_TAG,也许不是。 尝试在您的recv中添加:tag = MPI.ANY_TAG如果不起作用,请尝试不带标签的代码。 然后尝试修复标签版本。

但是您可能会对结果感到惊讶...可能是recv接收的第一条消息是带有tag = 1的消息,因此中断了一段时间。 可能根本不是安全的代码。

如果您想这样做:从给定的发件人处获取任意数量的消息,则最好使用无阻塞通信。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM