【发布时间】:2013-04-08 19:59:30
【问题描述】:
我有一些代码可以解决所有的最短路径问题,每个处理器都有一个结果。我正在尝试编写此结果,它是输出文件的矩阵。因此,每个具有部分解决方案的进程都会将结果写入正确位置的输出文件。现在我正在尝试为此使用 fseek 但由于整数大小不同而有点卡住了。像 2 和 -199 将不得不占用更多空间。我该怎么做才能使处理器不会相互覆盖?写作也可能存在竞争条件。
我应该以其他方式执行此操作还是有办法完成此操作?我正在考虑将所有结果发送到一个进程(等级 0)并让它创建数组并写入文件。
【问题讨论】:
-
将所有内容发送到零进程并不是一个糟糕的开始,但它显然存在可伸缩性问题,并且将您可以解决的问题大小限制为适合一个处理器内存的内容。一个长期的解决方案是查看MPI-IO,它会为您协调 MPI 输出。您可以使用 MPI-IO 写入文本文件(例如,this answer),但正如 Samer Afach 所解释的那样,我不推荐它,而且无论如何编写二进制文件更容易。