gpt4 book ai didi

parallel-processing - MPI_Bcast() 是否阻塞?

转载 作者:行者123 更新时间:2023-12-01 07:00:18 35 4
gpt4 key购买 nike

MPI_Bcast()阻塞还是非阻塞?换句话说,当根发送数据时,是否所有处理器都阻塞,直到每个处理器都收到该数据?如果没有,如何同步(阻止)所有这些,以便在所有接收到相同数据之前没有人继续。

最佳答案

您需要对此处的术语保持谨慎,因为 MPI 所指的“阻塞”可能与您在其他上下文中所看到的不同。

在 MPI 术语中,Bcast 是阻塞的。阻塞意味着,当函数返回时,它已经完成了它要执行的操作。在这种情况下,这意味着从 Bcast 返回时,可以保证每个进程中的接收缓冲区包含您要广播的数据。非阻塞版本是 Ibcast。

在 MPI 术语中,您要问的是操作是否同步,即暗示进程之间的同步。对于像发送这样的点对点操作,这指的是发送方在从发送调用返回之前是否等待接收被发布。对于集体行动,问题是是否存在障碍(如@Vladimir 所指出的)。 Bcast 并不一定意味着障碍。

但是,我发布的原因是,在几乎所有使用标准 Send/Recv 调用(而不是单侧 Put/Get)编写的 MPI 程序中,您并不关心屏障后是否存在同步。每个进程关心的是它是否收到了它需要的数据——为什么其他进程在做什么很重要?如果您随后想与任何其他进程通信,那么 MPI 例程的设计目的是使所需的同步自动发生。如果你发出一个接收,而另一个进程很慢,你就等待;如果您发出发送而另一个进程没有发出接收,一切仍将正常工作(假设您不调用 Rsend - 您永远不应该调用 Rsend!)。同步与否对性能有影响,但很少影响程序是否正确。

除非进程通过某种其他机制进行交互(例如,所有进程都访问同一个文件),否则很难想出一个真实的例子,你关心 Bcast 是否同步。当然,您总是可以构建一些边缘情况,但在 MPI 的实际实际应用中,这几乎无关紧要。

许多 MPI 程序充满了障碍,根据我的经验,它们几乎从不要求正确;唯一常见的用例是确保有意义的性能测量时间。

关于parallel-processing - MPI_Bcast() 是否阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39550649/

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