从输入文件到 LAPACK 的矩阵并再次反转到输出文件
Matrix from a input file to LAPACK and inverse to a output file again
我正在做一个 FEM 项目,我需要一个 Ku=f 的线性解。
我正在通过 LAPACK 求解器执行此操作。
您可能很熟悉,有时 K 矩阵会非常大 (30GB)。
它需要良好的 ram 才能以常规方式分配这样的矩阵。如果我可以将矩阵写入文件,我只需要你的帮助
你能否建议我将这样的矩阵从文件本身输入到 lapack 求解器并将输出输出到文件。
提前致谢。
马哈希.
30G对于计算服务器来说不算大。您可能需要升级您的服务器。
在硬件有限的情况下,是的,您可以将矩阵放入文件中,并使用相同的 LAPACK 例程来求解方程。该技术称为内存映射文件。它将一个文件的内容映射到一个大小相同的内存地址范围,而不分配物理内存。当你read/write数据from/to这个地址范围时,你实际上是read/write文件
https://en.wikipedia.org/wiki/Memory-mapped_file
在 linux 上,您可以使用 mmap()
来实现。
http://man7.org/linux/man-pages/man2/mmap.2.html
但是访问内存地址范围的速度和访问磁盘文件一样慢。
根据 FEM 代码中使用的形状函数的支持,矩阵 K
通常是 sparse:矩阵的大部分元素为空。因此,使用专用于稀疏矩阵的格式(例如 CSR)可以更有效地存储矩阵。不幸的是,LAPACK 几乎不支持此类矩阵,尽管它可以处理带状矩阵。
看看Eigen library or the PETSc library. These libraries provide interfaces to efficient solvers dedicated to sparse matrices. See there for PETSc. For instance, see Mumps or SuiteSparse。
我正在做一个 FEM 项目,我需要一个 Ku=f 的线性解。 我正在通过 LAPACK 求解器执行此操作。 您可能很熟悉,有时 K 矩阵会非常大 (30GB)。 它需要良好的 ram 才能以常规方式分配这样的矩阵。如果我可以将矩阵写入文件,我只需要你的帮助 你能否建议我将这样的矩阵从文件本身输入到 lapack 求解器并将输出输出到文件。
提前致谢。 马哈希.
30G对于计算服务器来说不算大。您可能需要升级您的服务器。
在硬件有限的情况下,是的,您可以将矩阵放入文件中,并使用相同的 LAPACK 例程来求解方程。该技术称为内存映射文件。它将一个文件的内容映射到一个大小相同的内存地址范围,而不分配物理内存。当你read/write数据from/to这个地址范围时,你实际上是read/write文件
https://en.wikipedia.org/wiki/Memory-mapped_file
在 linux 上,您可以使用 mmap()
来实现。
http://man7.org/linux/man-pages/man2/mmap.2.html
但是访问内存地址范围的速度和访问磁盘文件一样慢。
根据 FEM 代码中使用的形状函数的支持,矩阵 K
通常是 sparse:矩阵的大部分元素为空。因此,使用专用于稀疏矩阵的格式(例如 CSR)可以更有效地存储矩阵。不幸的是,LAPACK 几乎不支持此类矩阵,尽管它可以处理带状矩阵。
看看Eigen library or the PETSc library. These libraries provide interfaces to efficient solvers dedicated to sparse matrices. See there for PETSc. For instance, see Mumps or SuiteSparse。