如何使MPI流程通知其他人有关错误的信息,例如,特别是在所有MPI流程彼此独立的MPI程序中(不同的MPI流程之间没有同步)?
由于
答案 0 :(得分:2)
我发现你对MPI程序的想法,其中所有进程都是独立的,非常奇怪。我认为,根据定义,MPI程序中的所有进程都不是独立的,例如,在你调用MPI_INIT之后它们都在同一个通信器中,所以它们都“知道”了彼此的存在。您可能已经编写了代码,以便在此之后进程不会同步,但是进程之间仍然存在相互通信的方法。
要查看(需要同步)的一种机制是MPI_BCAST(广播)。另一种方法是使用MPI_ISEND,非阻塞发送操作,但迟早会有一个或另一个进程必须接收,你的发送过程应该测试发送是否成功。
答案 1 :(得分:2)
你指出的差异让我想知道:你为什么要使用MPI?它似乎不适合你的问题,并且没有比试图将方形钉插入MPI的圆孔更糟糕。 “MPI进程之间没有同步”这听起来好像你已经采取了固有的串行耕作工作负载,并试图将其转变为MPI。
说,你可以通过定期轮询MPI_Irecv和MPI_Test来做你想做的事。
答案 2 :(得分:1)
由于non-blocking communication,在处理MPI时,独立且没有同步是完全不同的两种情况。
在我看来,您想要的是这样实现的:当发生错误时,进程会广播带有指定“error”标记的消息,并且每个进程会定期发布带有此标记的消息的非阻塞接收。如果他们收到这样的消息,则表示最近发生了错误,他们可以做出相应的反应,否则他们会继续正常执行。
(请注意,在这种情况下,“广播”不是指MPI_Bcast
,因为这是集体通信操作,而是作为这样的块。相反,它只是意味着向可能涉及的每个人发送相同的消息。如果您希望在进程之间不保持同步,那么此发送也必须是非阻塞的。)
答案 3 :(得分:0)
MPI标准中没有任何内容允许将“中断”从一个等级发送到另一个等级(或等级)。通常,进展要求用户代码不时进入MPI库。没有进展,没有标准的方法来进行排名之间的沟通。
同步要求MPI库中不时有一些条目。 MPI_Barrier是同步的“大锤子”方法。结合MPI_Reduce_Scatter,可以知道至少有一个等级存在一些错误。