MPI_Recv行为
我正在用C编写一个MPI应用程序,我遇到了一些问题 我有这样的想法:MPI_Recv行为,c,mpi,C,Mpi,我正在用C编写一个MPI应用程序,我遇到了一些问题 我有这样的想法: if (rank == 0) { toRank = 1; for(i=3;i<=k;i++) { MPI_Send(&result, 1, MPI_INT, toRank, 0, MPI_COMM_WORLD); printf(%d\n", result); MPI_Recv(&result, 1, MPI_INT, toRank,
if (rank == 0)
{
toRank = 1;
for(i=3;i<=k;i++)
{
MPI_Send(&result, 1, MPI_INT, toRank, 0, MPI_COMM_WORLD);
printf(%d\n", result);
MPI_Recv(&result, 1, MPI_INT, toRank, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("%d\n", result);
toRank++;
if (toRank >= numProcessos)
toRank = 1;
}
}
else
{
MPI_Recv(&k, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("%d\n", k);
MPI_Send(&result, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
if(秩==0)
{
toRank=1;
对于(i=3;i“另一条消息”是什么意思?您的节点(主节点除外)只接收一条消息,您可以这样实现它。例如:主节点将X发送到节点1..然后..经过一段时间..主节点必须将另一个值发送到节点1..但是在第一条消息之后..节点1无法接收任何..printf在工作节点MPI_Recv从不出现之后否,MPI_Recv()
的第二个参数仅说明消息的最大长度。如果要让节点等待更多消息,则必须将它们包装在某种循环中(就像主节点那样),再次重复该步骤。此外,主节点不能使用MPI_Recv()
同时接收两条消息,因为您必须指定发件人(toRank
)它是一个阻塞函数,等待收到消息后再进行处理。有多种方法可以做到这一点,但这偏离了主题。您可能需要查看MPI\u Gather()
和MPI\u Irecv()
阅读他们的文档,可能会在网上找到一些示例,然后决定哪一个更适合您的应用程序从任何级别接收都是可能的-只需在MPI\u Recv
或MPI\u Irecv
中指定MPI\u any\u SOURCE
作为发件人的级别。然后可以通过检查MPI\u获得实际级别OURCE
输出状态参数的字段。