Merge 大规模MPI合并

Merge 大规模MPI合并,merge,parallel-processing,mpi,Merge,Parallel Processing,Mpi,在MPI应用程序中,我为活动存储(GPFS或Lustre)生成了(大量)文件。每个文件由一系列元组组成,元组已按时间戳排序 我正在寻找一种最有效的方法,将所有这些文件合并到一个单独的排序日志中,理想情况下可以并行扩展 简单的方法是,每个文件保留一个文件描述符,然后依次构建合并的文件,这种方法不能很好地扩展。首先,系统文件描述符的限制很快就达到了——当目标是将应用程序扩展到1.000.000+个内核时,它的上限是100000个文件(即约100.000个内核) 我能想到的中间方法是创建一个合并树。也

在MPI应用程序中,我为活动存储(GPFS或Lustre)生成了(大量)文件。每个文件由一系列元组组成,元组已按时间戳排序

我正在寻找一种最有效的方法,将所有这些文件合并到一个单独的排序日志中,理想情况下可以并行扩展

简单的方法是,每个文件保留一个文件描述符,然后依次构建合并的文件,这种方法不能很好地扩展。首先,系统文件描述符的限制很快就达到了——当目标是将应用程序扩展到1.000.000+个内核时,它的上限是100000个文件(即约100.000个内核)

我能想到的中间方法是创建一个合并树。也就是说,将文件的子组合并到一个更大的子组,然后迭代这些子组,直到得到一个完全排序的文件

你知道有什么更好的解决这个问题的方法吗,或者有什么出版物可以为这个问题提供最先进的解决方法吗


谢谢。

你应该考虑在生成期间合并数据而不是验尸。在任何情况下,并行文件系统都不是成千上万个文件的好朋友。谢谢@Zulan。问题是,PFS对同一个文件(对于分布式日志)的并行附加甚至更少。在这种情况下,我得到的性能简直是灾难性的,这是由于巨大的锁争用以及Lustre或GPFS处理附件的方式。但是您可以而且应该使用一些并行I/O库/框架/中间件。我不是这方面的专家,但我相信LLNL有人可以为您提供本地文件系统的具体建议。我认为您不需要同时打开所有文件:对于所有文件,您可以打开/读取一组记录/关闭并开始直接合并到输出文件。当“一堆记录”用完后,重新打开文件,查找并读取新的一堆记录,关闭,依此类推,直到所有记录都被合并。您可以通过使用合并树来并行化:您可以直接从文件中获取一组记录,也可以从其他任务中获取部分合并的记录。