在我的MPI程序中,我需要将一些计算的结果写入单个(共享)文件,其中每个MPI进程以不同的偏移量写入其部分数据。很简单。我已经实现了它:
offset = rank * sizeof(double) * N;
for (i = 0; i < N; i++) {
data = ...;
MPI_File_write_at(file, offset, &data, 1, MPI_DOUBLE, &status);
offset += sizeof(double);
}
这有点简化,因为data
实际上是一个数组,但为了简洁起见,我们假设它是单个值。所有进程同时调用此例程,并且它可以正常工作。但是,我不确定这是使用MPI执行IO的最佳方式。使用MPI_File_write_at_all
或MPI_File_write_ordered
会带来更好的效果吗?
不幸的是,我在集群上的时间非常有限(有Lustre),所以我无法广泛测试所有可能的实现,而在我的笔记本电脑上进行测试显然不能很好地衡量IO性能。