c++ - 将 MPI 结果写入文件

标签 c++ mpi

我有一些代码可以解决全参数最短路径问题,每个处理器都有一部分结果。我正在尝试写入此结果,它是输出文件的矩阵。因此,每个具有部分解决方案的进程都会将结果写入正确位置的输出文件。现在我正在尝试为此使用 fseek 但由于整数大小不同而有点卡住了。像 2 和 -199 将不得不占用更多空间。我该怎么做才能使处理器不会互相覆盖?写入也可能存在竞争条件。

我应该换一种方式还是有什么办法可以做到这一点?我正在考虑将所有结果发送到一个进程(等级 0)并让其创建数组并写入文件。

最佳答案

不要使用 ASCII 输出;使用大小明确的二进制文件。

因此,如果您使用 fstream 和 double :

fstream filewriter("file.bin",ios::out | ios::binary);

vector<double> mylist;
mylist.push_back(2.5);
mylist.push_back(7.6);
mylist.push_back(2.1);
mylist.push_back(3.2);
mylist.push_back(4.2);

filewriter.write((char*)&mylist[0],mylist.size()*sizeof(double));

这将恰好写入 40 个字节,这是列表大小(5 个元素)的两倍 (8) 倍。使用 fseek 将非常容易。

在有大量输出的科学环境中,极力推荐使用二进制数据。然而:

1- 您必须了解字节顺序的概念(大端、小端)。 2- 您必须适本地记录您的工作以供重用(目的、大小、元素数量、维度)。当我忘记记录东西时,我会面临巨大的误解(我是一名编写模拟程序的物理学博士)。

所以ASCII用于数据分析不是正确的选择。

幸运的是,有一个专门为您组织内容的完整库,称为 HDF5。它为您组织字节顺序和可移植性;但是,处理它并不容易,而且学习曲线陡峭。我认为这是一个更难的故事。

我建议您学习如何处理二进制文件以及如何阅读它们,了解它们的问题。我认为你足够专业来处理二进制文件,因为你使用了 MPI。

这是二进制文件的快速教程:

http://courses.cs.vt.edu/cs2604/fall02/binio.html

干杯。

关于c++ - 将 MPI 结果写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15855877/

相关文章:

多项式程序中的 C++ 动态数组和指针导致退出错误 255

c++ - 成员访问运算符生成的左值/右值示例

c++ - 如何使指针的取消引用保留对该对象的引用?

c++ - 多核机器上的多个程序实例

python-2.7 - python 在命令行中找不到 mpi4py 但可以在解释器模式下导入它

c - 并行化错误 MPI_Allgather

c++ - 在分布式文件系统上并行导出 ASCII 文件

c++ - range-for循环中的访问索引

c++ - 用c++解决骑士之旅

c++ - MPI 内存分配