矩阵从输入文件到LAPACK并再次反转到输出文件

时间:2016-07-02 08:21:09

标签: c++ lapack

我正在研究一个FEM项目,我需要一个Ku = f的线性解决方案。 我是通过LAPACK解算器做的。 您可能已经熟悉,有时K矩阵将是如此巨大(30GB)。 它需要以常规方式对malloc这样的矩阵进行良好的推理。如果我可以将矩阵写入文件,我只需要你的帮助 你能建议我从文件本身输入这样一个矩阵到lapack求解器并输出到文件。

提前致谢。 Maharshi。

2 个答案:

答案 0 :(得分:0)

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

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

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

在Linux上,您可以使用mmap()来实现此目的。

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

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

答案 1 :(得分:0)

根据FEM代码中使用的形状函数的支持,矩阵K通常为sparse:矩阵的大多数元素都为空。因此,使用专用于稀疏矩阵(例如CSR)的格式来存储矩阵更有效。遗憾的是,LAPACK几乎不支持这种矩阵,尽管它可以处理带状矩阵。

查看Eigen libraryPETSc library。这些库为专用于稀疏矩阵的高效求解器提供接口。有关PETSc,请参阅there。例如,请参阅MumpsSuiteSparse