c-连接MPI模拟的输出二进制文件



我使用C代码从MPI模拟中获得了64个输出二进制文件。

这些文件对应于64个进程的输出。有什么方法可以将所有这些文件连接到一个文件中,也许可以使用C脚本?

由于这被标记为MPI,我将提供一个MPI解决方案,尽管这可能不是提问者可以做的。

如果您能够修改模拟,为什么不采用MPI-IO方法呢?更好的是,研究HDF5或Parallel NetCDF,获得一个自我描述的文件格式、平台可移植性,以及一系列已经了解文件格式的分析和可视化工具。

但无论采用哪种方法,一般的想法都是使用MPI来描述每个文件的哪个部分属于每个进程。最简单的例子是,如果每个过程都有助于1D阵列。然后,对于一个由N个项目组成的逻辑全局数组,每个进程在偏移量"myrank/N"

处贡献1/N个项目

由于所有输出文件都很小且大小相同,因此可以很容易地使用MPI_Gather在一个节点上组装一个大型二进制数组,然后将其写入文件。如果分配一个大阵列是一个问题,您可以简单地使用MPI_ISend和MPI_Recv一次写入一个文件。

显然,这是一个非常原始的解决方案,但它也非常简单、万无一失,而且不会花费更长的时间(假设您在模拟结束时完成所有这些)。

最新更新