2

如何让 MPI 进程通知其他人有关错误,例如,特别是在所有 MPI 进程彼此独立的 MPI 程序上(不同 MPI 进程之间没有同步)?

谢谢

4

4 回答 4

2

我发现您对所有进程都是独立的 MPI 程序的想法非常奇怪。我认为,根据定义,MPI 程序中的所有进程都不是独立的,例如,在您调用 MPI_INIT 之后,它们都在同一个通信器中,因此它们都“知道”彼此的存在。您可能已经编写了代码,以便在此之后进程不会同步,但仍然存在进程相互通信的方法。

一种需要研究的机制(确实需要同步)是 MPI_BCAST(广播)。另一种方法是使用 MPI_ISEND,即非阻塞发送操作,但迟早一个进程或另一个进程必须接收,并且您的发送进程应该测试发送是否成功。

于 2010-05-26T18:39:49.907 回答
2

您指出的差异让我想知道:您为什么要使用 MPI?它似乎不适合您的问题,并且没有比尝试将方形钉塞入 MPI 的圆孔更糟糕的了。“MPI 进程之间没有同步”听起来好像你已经接受了一个本质上是串行农场的工作负载,并试图将它变成 MPI。

也就是说,您可以简单地通过使用 MPI_Irecv 和 MPI_Test 定期轮询来做您想做的事情。

于 2010-12-21T06:04:02.113 回答
1

由于非阻塞通信,在处理 MPI 时,独立和没有同步是两个完全不同的场景。

在我看来,您想要的可以这样实现:当发生错误时,一个进程会广播一条带有指定“错误”标签的消息,并且每个进程会定期发布带有此标签的消息的非阻塞接收。如果他们收到这样的消息,则意味着最近发生了错误,他们可以做出相应的反应,否则他们继续正常执行。

(请注意,在这种情况下,“广播”不是指MPI_Bcast,因为这是一个集体通信操作,因此是块。相反,它只是意味着向它可能关注的每个人发送相同的消息。如果你想保持之间不同步进程,那么这个发送也必须是非阻塞的。)

于 2010-05-26T22:10:09.773 回答
0

MPI 标准中没有任何内容允许将“中断”从一个等级发送到另一个等级(或多个等级)。一般来说,进度要求用户代码不时进入 MPI 库。没有进步,队伍之间没有标准的交流方式。

同步要求不时有一些进入 MPI 库的条目。MPI_Barrier 是同步的“大锤”方法。结合 MPI_Reduce_Scatter,可以知道至少在一个等级上存在一些错误。

于 2010-05-26T22:04:37.413 回答