有消息时,MPI_Iprobe将标志设置为0

时间:2012-12-30 20:59:13

标签: c mpi openmpi

我正在尝试探测消息,以便在MPI进程之间进行通信(8个进程)。到达代码的某一部分的第一个过程将发出所有其他过程的信号,其他过程将在到达那里时终止。

以下是我实施的内容:(欢迎任何更简单的解决方案)

if(depth == size){
    endTime = MPI_Wtime();
    MPI_Iprobe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &stat, MPI_STATUS_IGNORE);
    if(!stat){
        printf("Execution completed in %.5f seconds.\n", endTime - beginTime);
        for (ctr = 0; ctr < mpi_processors; ctr++) {
            if(ctr == mpi_my_pid) continue;
            MPI_Isend(&stat, 1, MPI_INT, ctr, 0, MPI_COMM_WORLD, &req);
            printf("sent to %d from %d\n",ctr,mpi_my_pid);

        }
    }
    return 1;
}

代码不言自明。 stat是一个虚拟变量,仅用于“发送”消息,也用作Iprobe的标志。问题是,stat在所有进程中始终为零,这意味着探测不会返回任何等待的消息。但我可以确认MPI_Isend正确运行并发送消息。

我做了一些根本错误的事情,还是某个我看不到的简单错误?

谢谢,

可以。

0 个答案:

没有答案