2

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

4

2 回答 2

2

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

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

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

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

于 2012-03-16T19:09:23.460 回答
1

你试过英特尔 MKL 吗?它包括自己的 blas 函数的并行版本。上次我试了,他们的速度非常快。但是,如果您提供有关矩阵大小的信息也会更容易回答,但只要您运行 x64、许多 CPU/内核和大量 RAM,那么这并不重要。

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

编辑:这些大小的矩阵超出了我的经验。

于 2012-03-15T16:04:24.243 回答