MPI中是否有超时机制?

5

一切都是标题。 我和我的团队正在开展一个项目,我们正在使用MPI。 在某个地方,我们正在执行MPI_send请求以获取具有超时的资源。 如果资源可用,则返回1;如果超时结束时没有资源,则返回0。 我们尝试使用类似SIGALRM的信号,但它不起作用,因为每个新请求都会通过设置新的警报来取消旧请求。

感谢您的回答!

2个回答

7
你应该调查非阻塞点对点通信原语,例如 MPI_IsendMPI_IrecvMPI_Iprobe。然后你可以自己实现超时,并在需要时使用 MPI_Cancel

嗨,Edric,感谢你的回答。但是我该如何使用超时(timeout)呢? - Dimitri
你应该启动一个发送/接收操作,实现自己的超时机制,使用 MPI_Test 检查通信是否完成,然后完成发送/接收操作或取消它。 - Edric

2
没有标准的方法来完成这个任务。使用非阻塞调用(例如MPI_Isend、MPI_Irecv)实现发送/接收对,并使用MPI_Test和MPI_Cancel是一种可能的解决方案。
根据资源的性质以及程序中需要使用此功能的次数,您还可以考虑将MPI_ISend实现为“持久请求”对象。有更多信息可在此处找到:持久通信
持久请求的优点是,如果资源实际上可用,则可以形成请求,然后仅在需要时执行...假设资源可以独立于实际的MPI_*调用进行检查。持久通信请求可以在整个程序中重复使用多次,而无需重新组织整个MPI_Send / MPI_Recv调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接