【问题标题】:mpi file read is not endingmpi 文件读取未结束
【发布时间】:2014-12-27 21:58:18
【问题描述】:

我正在尝试通过以下方式使用 mpi 读取 txt 文件:

"主节点应该加载数据,在各个节点之间进行划分和分发 工作处理器。”

但是我的代码没有结束。

下面是对应的代码片段:

MPI_File_open(MPI_COMM_WORLD, argv[1], MPI_MODE_RDONLY, MPI_INFO_NULL, &in);

if (rank == 0){

    printf("OK\n");   

    MPI_Offset filesize;
    MPI_Offset localsize;
    MPI_Offset start;
    MPI_Offset end;
    char *chunk;

    MPI_File_get_size(in, &filesize);
//localsize = filesize/size;
    start = 0;
    end   = filesize - 1;
    printf("OK\n");

localsize =  end - start + 1;

/* allocate memory */
    chunk = malloc( (localsize + 1)*sizeof(char));

    MPI_File_read_at_all(in, start, chunk, localsize, MPI_CHAR, MPI_STATUS_IGNORE);
    printf("OK\n");
    chunk[localsize] = '\0';
}

MPI_Finalize();

上面的代码没有打印第三个“OK”。因此问题出在MPI_File_read_at_all(),我猜。

可能是什么问题?

【问题讨论】:

  • 当您所做的只是从 单个 节点读取数据时,是否有理由使用 MPI IO 而不是常规 IO(例如来自 <stdio.h>)?根据我的阅读,MPI IO 用于并行、集体 IO,所以这种方式违背了目的(并且可能解释了为什么它被卡住了)。
  • 我认为你是对的,但这是一个学校项目。可能是TA的失误。无论如何,我只需要学习如何在处理器之间读取文件和发送/接收消息。
  • @Rufflewind,MPI IO 在非并行情况下非常有用,甚至派上用场,例如它允许使用派生的 MPI 数据类型传输数据。

标签: c file-io mpi


【解决方案1】:

MPI_File_read_at_allMPI_File_read_at集体 版本。只有在给定通信器中的所有等级都进行了调用后,集体操作才完成。在您的情况下,打开操作包含MPI_COMM_WORLD,而您只在等级0 中调用MPI_File_read_at_all

您应该用非集体的MPI_File_read_at 替换它,或者更好地使用标准的 C I/O 例程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-08
    • 2020-09-22
    • 2017-05-25
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多