【问题标题】:Can OpenMPI guarantee order of received message come from the same process?OpenMPI 可以保证接收消息的顺序来自同一个进程吗?
【发布时间】:2015-08-08 23:41:24
【问题描述】:

例如,我使用mpirun -n 4 来启动4 个进程。进程 0 接收来自进程 1、进程 2 和进程 3 的消息。进程1按照message0, message1, message2的顺序发送消息。当进程 0 收到这些来自进程 1 的消息时,是否可以保证进程以message0, message1, message2 的顺序接收这些消息?我不关心所有消息来自所有不同进程的总顺序,我只需要知道它是否能保证消息的顺序来自同一个进程。顺便说一句,当我使用MPI_Send() 发送消息时,消息的大小是有限的,对吧? MPI_Bcast() 呢?

【问题讨论】:

    标签: c linux parallel-processing mpi openmpi


    【解决方案1】:

    只要message0message1message2 具有相同的tag 并在同一个通信器comm 中发送,MPI 标准就保证MPI_Recv(..., source, tag, comm, ...) 将接收到完全一致的消息相同的顺序。

    消息的大小受实现的限制,但大多数现代消息都支持大小超过 2 GiB 的消息。您必须使用用户定义的数据类型,因为 MPI_Send 一次不能发送超过 231-1 个元素。

    【讨论】:

    • Jeff Hammond 的 BigMPI (github.com/jeffhammond/BigMPI) 为创建大型用户定义类型提供了一些 API 糖分。
    • 这次我使用MPI_Bcast()发送消息,这个消息是一个数组,它的元素是double类型。如果数组元素超过500个,则无法发送出去。
    • 你在通讯器的所有进程中都调用MPI_Bcast()吗?
    • 是的,所以现在我想知道这个功能是否可以保证订单。
    • MPI_Bcast()是否能保证顺序。
    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 2011-01-21
    • 2011-10-25
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多