【发布时间】:2018-12-20 12:09:28
【问题描述】:
我正在关注http://mpitutorial.com/tutorials/point-to-point-communication-application-random-walk/ 上的教程 并且有一句话说“如果发送最终无法被网络缓冲,它们将阻塞,直到发布匹配的接收。”
MPI_SEND() 何时无法被网络缓冲?
我猜这个问题之前有人问过,但老实说,我不知道在这里搜索什么关键字。
【问题讨论】:
我正在关注http://mpitutorial.com/tutorials/point-to-point-communication-application-random-walk/ 上的教程 并且有一句话说“如果发送最终无法被网络缓冲,它们将阻塞,直到发布匹配的接收。”
MPI_SEND() 何时无法被网络缓冲?
我猜这个问题之前有人问过,但老实说,我不知道在这里搜索什么关键字。
【问题讨论】:
长话短说,视情况而定。
长话短说,这取决于您的 MPI 库、消息大小、正在使用的互连、之前缓冲了多少消息、正在使用的调整选项以及其他因素。
请注意,如果没有发布匹配的接收,则假定 MPI_Send() 将返回的程序不符合 MPI 标准。
另一种说法是,如果将所有MPI_Send() 替换为MPI_Ssend(),则正确的MPI 程序不会死锁。
【讨论】:
MPI_Send(),除非你有充分的理由使用MPI_Ssend()。话虽如此,使用MPI_Ssend()(或强制MPI_Send() 阻止直到通过一些调整参数发布接收)并在释放代码之前检查代码没有挂起是一个好习惯。