我正在尝试使用带有共享文件指针的 MPI-I/O(OpenMPI 实现)将几个长分布式数组写入单个文件。我收到以下错误消息
lseek:无效的参数
写入失败
我准备了一个简化的代码片段来重现该问题。
long long globalUpperBnd = 2200000000;// more than size of int
long long average = globalUpperBnd/commSize;
long long length = (commRank == commSize-1) ? globalUpperBnd-(average*commRank) : average;
char *buf = new char[length];
... // fill the buffer
MPI_File file;
MPI_File_open(comm, "test.bin", MPI_MODE_CREATE|MPI_MODE_WRONLY, MPI_INFO_NULL, &file);
MPI_File_set_view(file, 0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL);
MPI_File_write_ordered(file, buf, length, MPI_BYTE, MPI_STATUS_IGNORE);
// here I got an error message
MPI_File_write_ordered(file, buf, length, MPI_BYTE, MPI_STATUS_IGNORE);
MPI_File_close(&file);
delete []buf;
看起来MPI_Offset
只是int
第二次调用MPI_File_write_ordered
导致MPI_Offset
溢出,偏移量变为负数。相当有趣的是,同样数量的数据的写入可以通过乘以globalUpperBnd
2 并且只调用MPI_File_write_ordered
一次就可以成功。所以它看起来像是MPI_File_write_ordered
以某种方式避免了偏移溢出。
我使用 64 位 OpenMPI 库。
这种情况有什么解决方法吗?