gpt4 book ai didi

mpi - 探测 MPI_Bcast 或 MPI_Send

转载 作者:行者123 更新时间:2023-12-05 02:24:35 24 4
gpt4 key购买 nike

我有一个程序,其中有一个主/从设置,我为主机实现了一些功能,这些功能将不同类型的数据发送到从机。一些函数发送给单个从站,但一些函数通过 MPI_Bcast 向所有从站广播信息。

我想在从站中只有一个接收功能,所以我想知道我是否可以探测一条消息并知道它是否被广播或作为普通阻塞消息发送,因为有不同的方法来接收什么是广播和正常发送的内容。

最佳答案

不,您不能根据探测调用来决定是调用 Bcast 还是调用 Recv。

MPI_Bcast 调用是一个集体操作——所有 MPI 任务都必须参与。结果,这些不像点对点通信;他们利用所有过程都涉及的事实来进行高阶优化。

因为集体操作意味着如此多的同步,所以让其他任务检查它们是否应该开始参与集体是没有意义的;它是必须构建到程序逻辑中的东西。

  • 根进程在广播中的作用不同于发送;通常,它不能只调用 MPI_Bcast 然后继续。在其他一些进程参与广播之前,该实现几乎肯定会阻塞;和

  • 另一个进程在广播中的作用不像是接收消息;一般来说,它将接收和发送信息。所以参与广播不同于进行简单的 Recv 调用。

所以 Probe 不会工作; the documentation for MPI_Probe很明显,它返回有关下一个 MPI_Recv 会发生什么的信息,并且 Recv 是与 Bcast 不同的操作。

您可能能够在 MPI 3.0 中获得您想要的一些东西,它现在正在定稿,它允许使用非阻塞集合体——例如 MPI_Ibcast。在这种情况下,您可以启动广播并调用 MPI_Test 来检查请求的状态。但是,即使在这里,每个人都需要先调用 MPI_Ibcast;这只会让集体和点对点通信更容易交织。

关于mpi - 探测 MPI_Bcast 或 MPI_Send,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11014085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com