我有一个深深嵌入 GNU 科学库 (GSL) 矩阵运算的代码,该代码的主要计算是求解一个大型线性方程组,该方程组需要串行花费很长时间,并且具有 GSL 和 BLAS 函数,有吗一种并行化此计算或将其转换为在 ScaLAPACK 等已经并行的库中使用的方法?
最佳答案
如果您的矩阵是稀疏的,即它包含大量零条目,那么您可以轻松实现许多稀疏矩阵代数包,而不会遇到太多麻烦。不幸的是,这将要求您以稀疏格式存储矩阵,据我所知,gsl 不这样做。一旦您以某种稀疏格式存储了矩阵,即使在串行应用程序中,您也应该能够轻松处理大型系统。
我建议使用 UMFPACK,因为它需要最少的工作量来实现,因为它不需要您将数据放入其结构中。
关于并行性的注释: 如果您的代码当前是串行的,那么使用并行求解器并非易事。可能实现多线程包可能很简单,但我对线程程序没有太多经验。此外,真正并行(分布式内存)直接求解器并不是那么高效,因为每个处理器都需要自己的完整矩阵拷贝,并且最好使用迭代方法。
更多细节会有所帮助:长时间是多长?您是否出于某种原因需要逆矩阵,或者您只是求解方程组?
关于c++ - 转换 gsl 线性代数以在 scalapack 或其他并行矩阵库中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386113/