0

是否有同步 MPI 共享文件指针的标准方法,以便MPI_File_get_position_shared在所有进程上返回相同的值?

例如下面的程序:

#include <mpi.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv) {
    // Initialize the MPI environment
    MPI_Init(NULL, NULL);

    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    MPI_File fh;
    MPI_File_open(MPI_COMM_WORLD, "foo", MPI_MODE_RDWR | MPI_MODE_CREATE, MPI_INFO_NULL, &fh);

    char* buf;
    buf = "hello";
    MPI_Status status;
    sleep(rank);
    MPI_File_write_shared(fh, buf, strlen(buf), MPI_CHAR, &status);    

    MPI_File_sync(fh); 

    MPI_Offset offset;
    MPI_File_get_position_shared(fh, &offset);

    printf("rank: %i, offset: %i\n", rank, (int) offset);

    MPI_File_close(&fh);

    MPI_Finalize();
}

将打印

rank: 0, offset: 5
rank: 1, offset: 10
rank: 2, offset: 15
rank: 3, offset: 20

如果我MPI_File_sync(fh)MPI_Barrier(MPI_COMM_WORLD): 替换它确实有效,可以保证正常工作吗?

4

1 回答 1

0

您可以使用以下函数来同步共享文件指针。

MPI_File_seek_shared( fh, OFFSET, MPI_SEEK_SET );

句法:

int MPI_File_seek_shared(
  MPI_File mpi_fh,
  MPI_Offset offset,
  int whence
);

MPI_FILE_SEEK_SHARED根据 更新共享文件指针whence,它有以下可能的值:

MPI_SEEK_SET:指针设置为offset

MPI_SEEK_CUR:指针设置为当前指针位置加offset

MPI_SEEK_END: 指针设置到文件末尾加上offset

参考

于 2020-06-12T08:51:06.423 回答