我试图了解MPI发送模式的具体情况(send,bsend,ssend,rsend),我还有下一个问题:
如果对我的问题给出答案"它不是真的",你能不能给我详细的答案和解释?
答案 0 :(得分:0)
MPI_Send
精确行为可能会根据实施情况而有所变化。此外,某些实现允许用户调整阈值大小。
查看MPI's Send Modes以获取一些详细信息。如果要确保程序可移植到其他MPI实现,请参阅MPI标准(第3.4节:通信模式)。对于标准模式(MPI_Send
),这是标准所说的内容(截至MPI 3.1
)。
第3.2.1节中描述的发送呼叫使用标准通信模式。在此模式下,由MPI决定是否缓存外发消息。 MPI可以缓冲传出消息。在这种情况下,发送调用可以在调用匹配的接收之前完成。另一方面,出于性能原因,缓冲区空间可能不可用,或者MPI可能选择不缓冲传出消息。在这种情况下,发送呼叫将不会完成,直到匹配的接收已发布,并且数据已移至 接收机。
因此,无论匹配接收是否具有,都可以开始标准模式的发送 已发布。它可以在发布匹配的接收之前完成。发送标准模式 非本地:成功完成发送操作可能取决于发生的情况 匹配的接收。
您遇到的主要误解是,如果接收方进程未调用MPI_Send
,您认为MPI_Recv
使用缓冲。实际上,它通常取决于邮件大小,无论是否已调用匹配的接收。
如果使用缓冲,则在将数据复制到临时缓冲区后释放用户的发送缓冲区。然后,无论是否已发出相应的接收,程序都可以继续执行。