gpt4 book ai didi

synchronization - 什么时候需要使用MPI_Barrier()?

转载 作者:行者123 更新时间:2023-12-03 09:56:31 32 4
gpt4 key购买 nike

我想知道何时需要使用障碍物?例如,在分散/聚集之前/之后是否需要它?还是OMPI应该确保在分散/聚集之前所有流程都达到了这一点?同样,在广播之后,我可以期望所有进程都已经收到该消息吗?

最佳答案

MPI-3.0之前的MPI中的所有集体操作都将被阻止,这意味着在它们返回之后使用传递给它们的所有缓冲区是安全的。特别是,这意味着当这些函数之一返回时,所有数据都已接收。 (但是,这并不意味着所有数据都已发送!)
因此,如果所有缓冲区都已经有效,则在集体操作之前/之后,MPI_Barrier并不是必需的(或非常有用)。

另请注意,MPI_Barrier不会神奇地等待非阻塞调用。如果您使用无阻塞发送/接收,并且两个进程在发送/接收对之后都等待MPI_Barrier,则不能保证进程在MPI_Barrier之后发送/接收所有数据。请改用MPI_Wait(和 friend )。因此,以下代码包含错误:

/* ERRORNOUS CODE */

Code for Process 0:
Process 0 sends something using MPI_Isend
MPI_Barrier(MPI_COMM_WORLD);
Process 0 uses buffer passed to MPI_Isend // (!)

Code for Process 1:
Process 1 recvs something using MPI_Irecv
MPI_Barrier(MPI_COMM_WORLD);
Process 1 uses buffer passed to MPI_Irecv // (!)

标有 (!)的两行都不安全!

MPI_Barrier仅在少数情况下有用。大多数时候,您并不关心进程是否同步。更好地了解阻塞和非阻塞 call !

关于synchronization - 什么时候需要使用MPI_Barrier()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305814/

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