首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ublas与矩阵模板库(MTL4)

ublas与矩阵模板库(MTL4)
EN

Stack Overflow用户
提问于 2009-07-01 07:54:02
回答 7查看 11.3K关注 0票数 14

我正在用c++写一个双曲型偏微分方程的软件。几乎所有的符号都是向量和矩阵符号。最重要的是,我需要线性代数求解器。是的,向量和矩阵的大小可以有很大的变化(从1000到只能通过分布式内存计算才能解决的大小,例如。集群或类似的体系结构)。如果我生活在乌托邦,我已经有了线性求解器,它对集群、GPU和多核具有很好的伸缩性。

当考虑应该表示变量的数据结构时,我遇到了boost.ublas和MTL4。这两个库都是blas级别3兼容的,MTL4实现了稀疏求解器,并且比ublas快得多。它们都没有实现对多核处理器的支持,更不用说分布式内存计算的并行化了。另一方面,MTL4的开发依赖于两个开发人员的单独努力(至少据我所知),我相信ublas在boost库中是有原因的。此外,英特尔的mkl库包含了将它们的结构与ublas绑定的示例。我想将我的数据和软件绑定到数据结构上,这种数据结构将是坚如磐石的,可以长期开发和维护。

最后,问题来了。你对ublas和/或mtl4的使用有什么经验,你会推荐什么?

谢谢,大力士

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-07-01 09:09:57

有了你的需求,我可能会选择BOOST::uBLAS。事实上,在速度方面,一个好的uBLAS部署应该与MTL4大致相当。

原因是存在针对ATLASbindings (因此,您可以有效地针对您的计算机优化共享内存并行化),并且还存在供应商调优的实现,如Intel Math Kernel LibraryHP MLIB

有了这些绑定,使用经过良好调优的ATLAS / BLAS库进行计算的uBLAS应该足够快了。如果您针对给定的BLAS / ATLAS进行链接,那么您应该与使用编译器标志-DMTL_HAS_BLAS针对相同BLAS / ATLAS进行链接的MTL4大致相当,并且根据它们自己的observation,很可能比没有BLAS的MTL4更快(例如,请参阅here,其中GotoBLAS优于MTL4)。

总而言之,只要你愿意使用一些BLAS库,速度就不应该是你的决定性因素。可用性和支持更重要。你必须决定,MTL和uBLAS哪个更适合你。我倾向于uBLAS,因为它是BOOST的一部分,而MTL4目前只支持BLAS selectively。您可能还会发现这个稍微过时的comparison of scientific C++ packages很有趣。

一个很大的但是:对于您的需求(非常大的矩阵),我可能会跳过“语法糖”uBLAS或MTL,直接调用BLAS / LAPACK的“金属”C接口。但那只是我..。另一个优点是,对于更大的问题,它应该比切换到ScaLAPACK (分布式内存LAPACK,从未使用过它)更容易。需要说明的是:对于家庭问题,我不建议直接调用BLAS库。

票数 11
EN

Stack Overflow用户

发布于 2009-07-01 18:57:23

如果你正在用C++编程向量、矩阵和线性代数,我会看看本征值:

http://eigen.tuxfamily.org/

它比uBLAS (对MTL4不太确定)更快,语法也更简洁。

票数 8
EN

Stack Overflow用户

发布于 2013-08-13 20:26:07

对于新项目,最好不要使用Boost的uBlas。自2012年底以来,uBlas常见问题解答甚至发出了这样的警告:

问:我应该在新项目中使用uBLAS吗?uBLAS的上一次重大改进是在2008年,自2009年以来没有重大变化。..。性能?有更快的替代方案。尖端技术?uBLAS已经10多岁了,错过了所有来自C++11的新东西。

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

https://stackoverflow.com/questions/1067821

复制
相关文章

相似问题

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