使用 UMFPACK 解决大型稀疏系统的内存管理

计算科学 线性求解器 稀疏矩阵 内存管理
2021-12-01 06:48:20

我正在使用 umfpack 来求解大型方程组。但是,对于 pre2、torso3、ohne2 Hamrle3(均来自 Tim Devis 的收藏)等中等大小的问题,我经常会遇到内存问题。在我尝试运行的机器中,可用内存为 44GB。

这些问题并不太大,索引超出 2GB(我使用的是 32 位整数)。一种方法是尝试 64 位整数版本。但是,我在为符号分解选择参数本身时可能犯了一个错误,现在它全部设置为默认值。

2个回答

我查看了您列出的矩阵的大小。我不确定我是否会将它们的大小描述为“适度”。ohne2 只有大约 181K 方程,但有近 7M 非零。Hamrle3 有大约 150 万个方程,这对于非对称直接求解器来说是一个重要的数字。

如果您在 64 位操作系统上运行 32 位可执行文件,您的进程可能有完整的 4GB 地址空间。这似乎足以分解这些矩阵。但随着求解器的进展,并重复请求大块内存,地址空间变得碎片化。因此,当 L 或 U 因子中的值需要一个特别大的块时,操作系统根本无法在地址空间中找到这么多连续的内存。

正如已经建议的那样,如果您在 64 位操作系统上运行,我只需使用 64 位整数重新构建 UMFPACK。即使有 44GB 的内存,在合理的时间内考虑 Hamrle3 也可能具有挑战性。

我认为您收到如下错误:

UMFPACK_ERROR_out_of_memory

对于 32 位 int 版本,如果您尝试使用超过 ~2gb,就会发生这种情况。64 位版本可能会更好,否则您可能不得不转向流行性腮腺炎之类的。