一旦完成,MPI就会向所有人发送数据

时间:2013-10-24 19:52:39

标签: c mpi openmpi

我有一个C程序,它查找一个非常大的文件并搜索某个东西。它的工作原理如下:

  • 查找填充尺寸fseek(file_descriptor, 0, SEEK_END)
  • 分成多个流程
  • 每个进程在其边界之间执行二进制搜索

现在我想要做的是当一个进程找到正在搜索的内容时(基本上是偏移ftell(file_descriptor)以将其发送到所有其他进程。

我的方法是这样的:

MPI_Irecv(&buffer..., MPI_ANY_SOURCE,... &request);
while (condition) {
    MPI_Test(&request, &test, &status);
    if (test == 1) {
        // break since data is in buffer ?
        printf("someone told us");
        break;
    }
    //code
    if (condition_for_found) {
        offset = ftell(file_descriptor);
        for (i = 0; i < numprocs; ++i) {
            MPI_Send(&offset, ...i, ...);
        }
        break; // (*)
    }
}

我没有正确发布C语法代码,因为我认为这是一个方法问题。 我认为我缺乏理解的是:

  • sendrecv必须在调用次数上匹配,但是(*)break语句会导致send被再次调用recv
  • MPI_Irecv并不总是关注要接收的数据?

运行mpiexec -n 12会在每5次运行中打印“有人告诉我们”一次或两次。

我的问题是:当一个数据计算出来时,发送其他进程的方法是什么(接收不应该阻塞,发送可能阻塞)?

我在ubuntu 13.04上使用openmpi-1.6实现

0 个答案:

没有答案