c++ - 转换 gsl 线性代数以在 scalapack 或其他并行矩阵库中使用

标签 c++ gsl scalapack

我有一个深深嵌入 GNU 科学库 (GSL) 矩阵运算的代码,该代码的主要计算是求解一个大型线性方程组,该方程组需要串行花费很长时间,并且具有 GSL 和 BLAS 函数,有吗一种并行化此计算或将其转换为在 ScaLAPACK 等已经并行的库中使用的方法?

最佳答案

如果您的矩阵是稀疏的,即它包含大量零条目,那么您可以轻松实现许多稀疏矩阵代数包,而不会遇到太多麻烦。不幸的是,这将要求您以稀疏格式存储矩阵,据我所知,gsl 不这样做。一旦您以某种稀疏格式存储了矩阵,即使在串行应用程序中,您也应该能够轻松处理大型系统。

我建议使用 UMFPACK,因为它需要最少的工作量来实现,因为它不需要您将数据放入其结构中。

关于并行性的注释: 如果您的代码当前是串行的,那么使用并行求解器并非易事。可能实现多线程包可能很简单,但我对线程程序没有太多经验。此外,真正并行(分布式内存)直接求解器并不是那么高效,因为每个处理器都需要自己的完整矩阵拷贝,并且最好使用迭代方法。

更多细节会有所帮助:长时间是多长?您是否出于某种原因需要逆矩阵,或者您只是求解方程组?

关于c++ - 转换 gsl 线性代数以在 scalapack 或其他并行矩阵库中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386113/

相关文章:

c++ - 修复分布式版本中的算术错误

c++ - MKL ScaLapack 问题

编辑器中的 C++ 自动类实现

c++ - 防止 Qt 生成快捷方式?

c++ - 在 eclipse 中链接 gsl 库时 undefined reference

c - 使用 GSL 的双摆解决方案

gsl - 安装自定义 C++ 库时的 "No package ' gsl ' found when"

c++ - 静态语言的运行时优化 : JIT for C++?

c++ - 对象的引用计数通常存储在哪里?

c++ - Cholesky 与 ScaLAPACK