【发布时间】:2010-11-07 06:11:35
【问题描述】:
我正在用 C++ 编写一个用于双曲偏微分方程的软件。几乎所有的符号都是向量和矩阵的。最重要的是,我需要线性代数求解器。是的,向量和矩阵的大小可以有很大差异(从 1000 到只能通过分布式内存计算解决的大小,例如集群或类似架构)。如果我生活在乌托邦,我就会有线性求解器,它可以很好地扩展到集群、GPU 和多核。
在考虑应该表示变量的数据结构时,我想到了 boost.ublas 和 MTL4。 这两个库都兼容 blas 3 级,MTL4 实现了稀疏求解器,并且比 ublas 快得多。它们都没有实现对多核处理器的支持,更不用说分布式内存计算的并行化了。另一方面,MTL4 的开发依赖于 2 个开发人员的单独努力(至少据我所知),我确信 ublas 存在于 boost 库中是有原因的。此外,intel 的 mkl 库包括将其结构与 ublas 绑定的示例。 我想将我的数据和软件绑定到将长期坚如磐石、开发和维护的数据结构。
最后,问题。您在使用 ublas 和/或 mtl4 方面有何经验,您会推荐什么?
谢谢, 威力多多
【问题讨论】:
-
@mightydodol:不客气。我添加了一个指向我一整天都在寻找的论文的链接。你可能会觉得很有趣。还更正了有关 ScaLAPACK 的事实错误。
-
感谢您指出本征。 @stephan 是的,这篇论文真的很有趣。和我的问题差不多。
-
作为评论发布,因为它不符合您的要求。我是 Armadillo (arma.sourceforge.net) 的快乐用户,它使线性代数运算变得轻而易举。它与 BLAS 和 LAPACK 接口(因此您有速度),语法简洁,并且是唯一仍在积极维护的线性代数库(除了我发现非常难以使用的
boost::ublas)。它不支持(还)稀疏矩阵,所以如果你真的需要它们,请不要使用它。 -
@Alexandre Thx,我想知道犰狳与本征相比如何。乍一看,它们似乎非常相似。
标签: c++ math linear-algebra