矩阵从一个输入文件到LAPACK,再反向到一个输出文件

Matrix from a input file to LAPACK and inverse to a output file again

本文关键字:一个 文件 输出 输入 LAPACK      更新时间:2023-10-16

我正在研究一个FEM项目,我需要Ku=f的线性解。我用的是LAPACK解算器。正如您可能熟悉的那样,有时K矩阵会非常大(30GB)。用传统的方法来处理这样的矩阵需要良好的ram。我只是需要你帮我把矩阵写进文件你能建议我把这样一个矩阵从文件本身输入到背包求解器中,然后输出到文件中吗?

提前感谢。妇女们。

30G对于计算服务器来说并不大。您可能需要升级您的服务器。

对于有限的硬件,是的,您可以将矩阵放入文件中,并使用相同的LAPACK例程来求解方程。这种技术被称为内存映射文件。它将文件的内容映射到具有相同大小的内存地址范围,而不分配物理内存。当你从这个地址范围读/写数据时,你实际上是在读/写文件。

https://en.wikipedia.org/wiki/Memory-mapped_file

在linux上,您可以使用mmap()来实现这一点。

http://man7.org/linux/man-pages/man2/mmap.2.html

但是访问内存地址范围的速度和访问磁盘文件的速度一样慢。

根据您的FEM代码中使用的形状函数的支持,矩阵K通常是稀疏的:矩阵的大多数元素是空的。因此,使用专用于稀疏矩阵(如CSR)的格式来存储矩阵要有效得多。不幸的是,LAPACK对这种矩阵提供的支持很少,尽管它可以处理带状矩阵。

看一下Eigen库或PETSc库。这些库为专用于稀疏矩阵的高效求解器提供了接口。见PETSc。例如,参见Mumps或SuiteSparse。

相关文章: