同步MPI共享文件指针

问题描述 投票:0回答:1

是否有一种标准的方法来同步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)问:这是否能保证正常工作?

mpi mpi-io
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

参考资料

© www.soinside.com 2019 - 2024. All rights reserved.