同步 MPI 共享文件指针



是否有一种标准方法来同步 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: %in", 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_Barrier(MPI_COMM_WORLD)替换MPI_File_sync(fh),它确实有效:这保证可以正常工作吗?

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

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

参考

最新更新