【发布时间】:2013-08-13 21:42:10
【问题描述】:
我使用MPI_Irecv 从 MPI 中的某个主机接收数据。通过在函数的输入参数中使用 "rank of source",我必须定义要从哪个主机接收数据。但是哪个主机给我发数据并不重要,我只想取数据。如何在不定义发件人等级的情况下获取数据?
我想我可以创建一个循环来扫描所有“等级”,但是有没有更简单的方法可以获取数据,无论它的发送者是什么?
谢谢!
【问题讨论】:
-
程序是否允许多个等级尝试向 MPI_IRecv 发送数据?如果没有,那么 MPI_ANY_SOURCE 是一个很好的解决方案。如果可以发送多个等级,则有可能会因 MPI_Send 调用黑屏而挂起……或者如果 MPI_Send 不匹配,则 MPI_Finalize 会出错。必须小心取消任何不匹配的 MPI_Send/ISend 调用...或者您必须准备好忍受 MPI_Finalize 上的错误。
-
许多主机不会同时尝试发送数据。但只是好奇,
MPI_Cancel足以取消吗? -
MPI_Cancel 足以取消不匹配的 MPI_Send。