矩阵从一个输入文件到LAPACK,再反向到一个输出文件
Matrix from a input file to LAPACK and inverse to a output file again
我正在研究一个FEM项目,我需要Ku=f的线性解。我用的是LAPACK解算器。正如您可能熟悉的那样,有时K矩阵会非常大(30GB)。用传统的方法来处理这样的矩阵需要良好的ram。我只是需要你帮我把矩阵写进文件你能建议我把这样一个矩阵从文件本身输入到背包求解器中,然后输出到文件中吗?
提前感谢。妇女们。
30G对于计算服务器来说并不大。您可能需要升级您的服务器。
对于有限的硬件,是的,您可以将矩阵放入文件中,并使用相同的LAPACK例程来求解方程。这种技术被称为内存映射文件。它将文件的内容映射到具有相同大小的内存地址范围,而不分配物理内存。当你从这个地址范围读/写数据时,你实际上是在读/写文件。
https://en.wikipedia.org/wiki/Memory-mapped_file在linux上,您可以使用mmap()
来实现这一点。
但是访问内存地址范围的速度和访问磁盘文件的速度一样慢。
根据您的FEM代码中使用的形状函数的支持,矩阵K
通常是稀疏的:矩阵的大多数元素是空的。因此,使用专用于稀疏矩阵(如CSR)的格式来存储矩阵要有效得多。不幸的是,LAPACK对这种矩阵提供的支持很少,尽管它可以处理带状矩阵。
看一下Eigen库或PETSc库。这些库为专用于稀疏矩阵的高效求解器提供了接口。见PETSc。例如,参见Mumps或SuiteSparse。
相关文章:
- 挂起和取消挂起一个文件DLL
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何将class.cpp和class.hpp编译为一个.o文件
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 如何从整个磁盘中排除要装载的一个文件
- 如何将模板和非模板函数放在一个文件中
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 使用 scope 运算符 (::) 引用另一个文件中的类
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- c++ 提升如果 .extension() == " "这意味着这个文件是一个文件夹?
- 是否可以在 c++ 中创建一个文件并为其提供属性以将其隐藏?(在 Ubuntu 上)
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 如何在标准c ++中流式传输/读取二进制文件的中间部分并写入另一个文件?