首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换用于scalapack或其他并行矩阵库的GSL线性代数

转换用于scalapack或其他并行矩阵库的GSL线性代数
EN

Stack Overflow用户
提问于 2012-02-22 06:15:43
回答 2查看 735关注 0票数 2

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-17 03:09:23

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

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

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

更多的细节将是有帮助的:多长时间是长时间?你是出于某种原因需要求逆吗,还是你只是在解一个方程系统?

票数 2
EN

Stack Overflow用户

发布于 2012-03-16 00:04:24

您是否尝试过英特尔MKL?它包含自己的blas函数的并行版本。上次我试过了,他们真的很快。但是,如果你给出矩阵大小的信息,也会更容易回答,但只要你运行的是x64,有很多CPU/核心和内存,那么,这并不重要。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9386113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档