gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:41:05 24 4
gpt4 key购买 nike

我有一些代码可以解决全参数最短路径问题,每个处理器都有一部分结果。我正在尝试写入此结果,它是输出文件的矩阵。因此,每个具有部分解决方案的进程都会将结果写入正确位置的输出文件。现在我正在尝试为此使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com