首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用具有共享文件指针的MPI-IO将巨大的数组写入单个文件。

使用具有共享文件指针的MPI-IO将巨大的数组写入单个文件。
EN

Stack Overflow用户
提问于 2018-10-23 09:21:44
回答 1查看 400关注 0票数 0

我试图使用带有共享文件指针的MPI/O (OpenMPI实现)将几个长的分布式数组写入单个文件。我收到以下错误消息

无效论证 写入失败

我准备了一个简化的代码片段来重现这个问题。

代码语言:javascript
复制
        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只是intMPI_File_write_ordered的第二个调用会导致MPI_Offset溢出,偏移量变为负值。非常有趣的是,通过将globalUpperBnd乘以2,只调用MPI_File_write_ordered一次,就可以成功地编写相同数量的数据。因此,看起来MPI_File_write_ordered在某种程度上避免了偏移溢出。

我使用64位OpenMPI库.

这个案子有什么解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-30 03:22:44

我认为解决办法是升级MPI实现。OpenMPI和MPICH都在致力于这类“大型I/O”错误--共享的文件指针没有得到太多的关注,但我认为过去一年左右的bug修复应该解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52945491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档