我正试图通过以下方式使用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_File_read_at_allMPI_File_read_at的集合版本。只有当给定通信器中的所有列组都进行了调用时,集合操作才会完成。在您的情况下,open操作包含MPI_COMM_WORLD,而您只调用秩为0的MPI_File_read_at_all
您应该用非集合MPI_File_read_at替换它,或者更好地使用标准的C I/O例程。

10-08 17:23