转换gsl线性代数以用于scalapack或其他并行矩阵库

converting gsl linear algebra for use in scalapack or other parallel matrix library

本文关键字:并行 其他 scalapack gsl 线性代数 用于 转换      更新时间:2023-10-16

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

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

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

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

多一点细节会很有帮助:长时间是多长?你是出于某种原因需要逆,还是只是在解一个方程组?

您试用过"英特尔MKL"吗?它包括自己的blas函数的并行版本。上次我试的时候,它们非常快。但如果你能提供矩阵大小的信息,答案也会更容易,但只要你运行的是x64,有很多CPU/内核,有很多RAM,那么,这并不重要。

另一个选择是nVidia CUDA。他们的接口类似于blas,但实际上它比MKL慢,仍然比串行快。可能是我在一张旧卡上尝试过,但你需要至少200个GPU流单元才能称其有用。

编辑:这种规模的矩阵超出了我的经验。

相关文章: