许多处理器读取单个 HDF5 文件

计算科学 高性能计算 io
2021-11-28 11:25:29

我正在编写一个代码,我们最终计划将其扩展到 10 或 100 的数千个处理器(使用 MPI)。我有一个单独的 HDF5 文件(网格节点和连接性等),需要读取该文件并将其分发给具有相同数据的每个进程。这仅在代码的设置部分执行一次。当前的解决方案是让每个进程独立读取文件,但我的合作者担心这不会很好地扩展,并建议让进程 0 读取文件,然后 MPI 将数据分发给其他处理器。因此,我想从具有更丰富 HPC 经验的人那里获得外部意见。这真的会成为一个重要的瓶颈吗?

2个回答

它不会扩展!使用并行 HDF5功能与相对较少的阅读器并行阅读它,或者按照您同事的建议执行。这两种方法都需要权衡取舍,您必须进行一些调整。这在很大程度上取决于文件有多大、有多少任务读取它、底层文件系统是什么(GPFS、Lustre 等)、文件是如何条带化的,以及底层磁盘基础设施是什么。

如果您的问题是“在N使用分布式文件系统的大型集群的处理器”我肯定不会回答!(正如比尔在另一个答案中已经指出的那样。)

GPFS、Lustre 或 NFS 并不是为了替代分布式内存/MPI 编程范例中的高效内存/通信组织。但我的实际答案是:为什么要现在打扰当然,渐近线反对在每个处理器上重新读取数据,但如果这成为真正的瓶颈,只能通过实验或更彻底的分析来确定,我们没有从你的帖子中获得足够的数据。

正如 Stali 在评论中指出的那样,也许您在内存限制之前达到了内存限制,或者数据读取时间在您的实际应用程序中仍然可以忽略不计,其中N可能很大,但仍然有界。也许是应用程序的扩展性不太好......

我的 1 美分意见:仅当您的分析/时间显示您有一个真正的瓶颈时才进行优化。

编辑

不知何故,违背我的意愿,我的回答引发了一场评论战。明确一点:我完全同意让N104÷105进程同时读取同一个文件。但是当 OP 说“我们最终计划扩展到 10 或 100 的数千个处理器”时,我理解“最终”的意思是“在未指定的稍后时间”。在达到这些极端数字之前,有很多工作可以通过更简单(尽管效率低下甚至是陈旧的)方法来完成。只是把事情放在正确的角度:在 2014 年 6 月的 500 强榜单中,“总核心数”列的中位数是 19280,所以运行N=105意味着您可以访问一台真正大型机器的重要部分。

调整并行 I/O 需要大量工作,所以我的答案归结为非常古老的建议:“避免过早优化”……但在这里引发另一场战争的风险更大。

最后说明:如果您认为它毫无意义,请不要害怕投反对票。