是否有一种标准的方法来同步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_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