处理大型网格文件

计算科学 有限元 高性能计算 非结构化网格
2021-11-29 21:17:17

我正在研究一些中到大规模的有限元代码。通过使用已建立和可用的工具,我能够拥有一个可以扩展到大约 10,000 个内核的算法。调查超出此范围的缩放需要调查更大的网格,这导致了我的问题。

一旦网格开始变大(从 100 GB 到 TB 的范围),只需将它们放到集群环境中就可以完全压倒解决最终系统的任何成本。按照今天的节点标准,100GB-1TB 的网格大小也不是特别大,每个节点可以有超过 64GB 的内存(在许多情况下甚至更多)

那么这通常是如何处理的?有没有常见的方法来提高将数据传输到集群的带宽?您是否只需要连接到令人难以置信的高带宽连接,或者实际运送包含您想要的所有数据的驱动器?

作为后续问题:如果我可以重新设计它,是否可以解决更多依赖自动网格细化的问题,以便我们从较小的起始网格开始并根据需要在内存中进行细化?

1个回答

鉴于我的经验,我的回答主要是基于意见的。在我的工作中,我(还)没有处理过你所描述的那么大的网格。但是,我已经看到足够大的网格来暗示你的问题将来可能是我的问题,所以我已经思考了这个问题。

以下是一些从明显/易于实施到更多参与的评论/建议。

  • 确保您使用的是二进制网格文件,而不是 ASCII。由于字符串解析的成本,根据具体的实现,ASCII 文件可能会更大,而且读取时间也会更长。

  • Parallel NetCDF等并行网格文件格式可以帮助将网格的存储和 I/O 分布在单独的计算节点上。当然,这并不能帮助您将数据传输集群。

  • 您可以传输较小的初始网格并在远程集群上进行一些基于命令行/脚本的细化。当然,您仍然需要在集群上生成单个巨大的网格,无论该网格存储在磁盘上还是内存中,因为我知道没有并行的网格细化工具。编辑: @VorKir 引起了我对mfem的注意,它似乎包括一个非常好的并行网格划分库,由劳伦斯利弗莫尔国家实验室的好人制作。)

  • 在我看来,域分解方法为实现大规模并行有限元方法提供了一个关键的数学框架。给这只猫剥皮的方法不止一种,因为 DDM 让您可以灵活地做很多不同的事情。然而,DDM 最重要的特性之一是它们可以被公式化以允许域之间的接口处不匹配的网格。在网格细化的上下文中,这允许每个域的网格独立于所有其他域进行细化,从而避免了对真正并行网格器的需要。最终解决方案可能类似于:

    1. 从原始几何体生成粗网格。

    2. 将粗网格划分为域并分发到计算节点。

    3. 在每个域上独立执行网格细化。

    4. 使用支持 DDM 的有限元方法运行仿真。