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

有帮助吗?

解决方案

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

我建议使用UMFPACK,因为它不需要最少的工作即可完成,因为它不需要您将数据放入其结构中。

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

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

其他提示

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

另一个选项是nVidia CUDA。它们的界面类似于blas,但实际上比MKL慢,但仍比串行快。可能是我在旧卡上尝试过的,但是您至少需要200个GPU流单位才能使用它。

编辑:这些尺寸的矩阵超出了我的经验。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top