是否有可能在同一个文件的多个处理器来写,在文件的结尾,在ordonated方式?(Is it pos

2019-10-21 01:58发布

我有2处理器(这是一个例子),我想这2处理器在写入文件。 我希望他们能够在文件末尾写,但不是在混合模式,这样的:

[file content]
proc0
proc1
proc0
proc1
proc0
proc1
(and so on..)

我想让他们写下面这种模式:

[file content]
proc0
proc0
proc0
proc1
proc1
proc1
(and so on..)

可能吗? 如果是这样,有什么使用的设置?

Answer 1:

在你的进程具有输出准备报告的顺序是,本质上,事先不可知。 即使重复一模一样的MPI程序的运行会显示在输出顺序上的差别。 所以什么东西,什么地方,将不得不对写入文件强加排序。

一个很常见的模式,一个韦斯利已经提到的,是让所有进程发送它们的输出到一个过程中,经常进程0,让它处理书面文件。 这主作者可以写之前的输出进行排序,但是这会产生两个问题:写前分配空间来存储输出,更难以处理,当确定的输出记录的集合进行排序并写入文件和输出缓冲器被重新使用。 多长时间主作家等,它是如何知道如果一个进程仍然在工作?

因此,它是常见的有主,作家写的输出,因为它得到他们和另一个程序根据需要并行程序完成后订购的输出文件。 你可以为之后的一个步骤上的钉给你的并行程序mpi_finalize或者你可以使用一个完全独立的程序(如sort Linux机器上)。 当然,这个工作每个输出记录必须包含在其上整理一些测序信息。

另一种常见的模式是只能有一个过程,不会任何文字都,也就是说,没有其他进程做任何输出。 这完全避免了写作的测序的非确定性。

另一种模式,较少见的部分,因为它更难以实施,部分是因为它依赖于底层这并不总是可用的机制,是使用mpi io 。 与mpi io多个进程可以写入到一个文件中,如同同时的不同部分。 实际上同时写程序需要对支持并行I / O硬件,网络和操作系统执行。 它可能会非常棘手实现这甚至与正确的平台,特别是当输出的过程量是不确定的。

根据我的经验在这里这样的人问的问题,例如你很可能在太早阶段在他们的MPI经验要解决并行I / O,即使他们能够获得必要的硬件。



Answer 2:

我不同意高性能马克。 MPI-IO是不是在2014年如此棘手(只要你有访问NFS以外的任何文件系统 - 如果你需要一个廉价易并行文件系统安装PVFS)。

如果你知道每个进程有多少数据了,你可以使用MPI_SCAN高效地计算出有多少数据被写了“早”的过程,然后用MPI_FILE_WRITE_AT_ALL有效地进行I / O。 以下是你可以做这样一个方法:

incr = (count*datatype_size);
MPI_Scan(&incr, &new_offset, 1, MPI_LONG_LONG_INT, 
                      MPI_SUM, MPI_COMM_WORLD);
MPI_File_write_at_all(mpi_fh, new_offset, buf, count,
                              datatype, status)


Answer 3:

在回答你的问题是没有。 如果你做的事情,这样,你将与来自全国各地的地方混乱的输出结束。

但是,您可以通过您的输出发送到单个处理器有它做所有的写作本身的得到同样的事情。 例如,在应用程序的结束,只是一切都发送到排名0和排名为0写这一切到一个文件中。



文章来源: Is it possible to write with several processors in the same file, at the end of the file, in an ordonated way?
标签: mpi mpi-io