从不同的MPI进程写入同一文件

时间:2014-12-16 18:40:31

标签: mpi race-condition

我有一些MPI进程,它们应该在完成任务后写入同一个文件。问题是结果的长度是可变的,我不能假设每个进程都会写入某个偏移量。

一种可能的方法是在每个进程中打开文件,在结尾写入输出,然后关闭文件。但这样可能会出现竞争条件。

如何打开和写入该文件,以便结果是预期的结果?

1 个答案:

答案 0 :(得分:1)

您可能认为您需要共享文件或有序模式例程。但是这些例程几乎没有用处,因此没有得到很好的优化(所以它们几乎没有用到......完全循环......)

我希望你打算集体这样做。然后你可以使用MPI_SCAN来收集偏移量,然后调用MPI_FILE_WRITE_AT_ALL让MPI库为你优化I / O.

(如果你是独立完成这个,那么你将不得不做一些像...主奴隶?传递一个令牌?回到共享文件指针例程,即使我讨厌它们?)

这是一种良好的集体方法:

incr = (count*datatype_size);

/* you can skip this call and assume 'offset' is zero if you don't care
   about the contents of the file */
MPI_File_get_position(mpi_fh, &offset);

MPI_Scan(&incr, &new_offset, 1, MPI_LONG_LONG_INT, 
                      MPI_SUM, MPI_COMM_WORLD);
new_offset -= incr;
new_offset += offset;

ret = MPI_File_write_at_all(mpi_fh, new_offset, buf, count,
                              datatype, status);