的uBLAS与矩阵模板库(MTL4)(ublas vs. matrix template libra

2019-07-29 11:22发布

我正在写在C ++双曲型偏微分方程软件。 几乎所有的符号表示向量和矩阵的。 最重要的是,我需要的线性代数求解。 是的,向量的和矩阵的尺寸可以显着改变(比如从1000到只能由分布式存储器计算来解决尺寸,例如。簇或类似的体系结构)。 如果我生活在乌托邦,我曾经有过它可以扩展伟大的集群,GPU和多核线性解算器。

在考虑中的数据结构应该代表变量,我来到accros的boost.ublas和MTL4。 这两个库是布拉斯级别3兼容,MTL4实现稀疏求解器,比的uBLAS快得多。 他们都没有已经实现支持多核处理器,何况分布式的内存计算的并行化。 在另一方面,MTL4的发展取决于2个开发者唯一的工作(至少我的理解),我敢肯定是有原因的uBLAS库是Boost库。 此外,英特尔的MKL库包括与uBLAS库结合其结构的例子。 我想我的数据和软件绑定到数据结构,将稳如磐石,开发和维护的时间长的时间。

最后,问题。 什么是与使用的uBLAS和/或MTL4你的经验,并且你会推荐什么?

感谢名单,mightydodol

Answer 1:

随着你的要求,我可能会去BOOST :: uBLAS库 。 的确,uBLAS库调配好应大致与有关的速度MTL4相提并论。

其原因是存在绑定的ATLAS (你可以有效地优化您的计算机,因此共享内存并行),以及供应商的调整实现,如英特尔数学核心函数库或HP MLIB 。

凭借这些绑定,具有良好的调节ATLAS / BLAS库的uBLAS做数学应足够快。 如果你对一个给定的BLAS / ATLAS链接,你应该大致与MTL4反对使用编译器标志相同的BLAS / ATLAS联相提并论-DMTL_HAS_BLAS根据自己的,而且很可能比MTL4快没有BLAS 观测 (例如看这里其中GotoBLAS优于MTL4)。

综上所述,速度不应该是你的决定性因素,只要你愿意使用一些BLAS库。 可用性和支持更为重要。 你必须决定,MTL或uBLAS库是否更适合你。 我倾向于uBLAS库因为它是BOOST的一部分,MTL4目前仅支持BLAS 选择 。 您可能还觉得这有点过时的科学的C ++封装比较有趣。

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



Answer 2:

如果你在C ++编程向量,矩阵和线性代数,我想看看征:

http://eigen.tuxfamily.org/

它比的uBLAS(不知道MTL4)和更简洁的语法更快。



Answer 3:

对于新的项目,它可能是最好远离Boost的uBLAS库了。 该FAQ uBLAS库甚至有自2012年底这样的警告:

问:我应该使用新项目的uBLAS? ... uBLAS库的最后一个主要的改进是在2008年和2009年以来...性能没有显著变化承诺? 有更快的替代品。 前沿? uBLAS库超过10岁,错过了所有新的东西从C ++ 11。



Answer 4:

有一个C ++库在此列表中丢失:FLENS

http://flens.sf.net

免责声明:是的,这是我的宝贝

  • 它只是头
  • 用一个简单的,非高性能的,通用的(即模板)C ++参考BLAS的自带实行。
  • 如果有的话,你可以使用一个优化的BLAS实现作为后端。 在这种情况下,它就像直接使用BLAS( 一些基准测试我应该更新 )。
  • 您可以使用重载运算而不是调用BLAS功能 。
  • 它有它自己的,独立的,通用一堆LAPACK功能的重新实行。 我们称这个端口FLENS,LAPACK 。
  • FLENS,LAPACK具有完全相同的精度和性能作为入Netlib的LAPACK。 在我的经验(FLENS-)LAPACK + ATLAS或(FLENS-)LAPACK + OpenBLAS为您提供了相同的性能,ACML或MKL。
  • FLENS具有关于线性代数表达式求值的创建临时矢量/矩阵的不同的策略。 该FLENS方针是:从不创建他们!。 然而,在一个特殊的调试模式 ,我们允许“在必要时”的临时对象的创建。 这个“必要时”的政策就是在像征或犰狳或在Matlab其他库的默认。


Answer 5:

:您可以直接在这里看到的性能差异http://www.osl.iu.edu/research/mtl/mtl4/doc/performance.php3

两者都是在它们的接口方面使用合理的图书馆,我不认为因为uBLAS库通过BOOST审查过程中得到了它一定的方式更加稳健。 我有我有不明显的副作用和的uBLAS实现意想不到的后果噩梦的份额。

这并不是说的uBLAS是不好的,这是真的很不错,但我认为给出的戏剧表演不同的MTL这些天,这是值得用它代替的uBLAS即使它可以说是更危险的监守它是一个有点“只有2个开发者”支持组。

在一天结束的时候,它是关于一个矩阵库速度,去MTL4。



Answer 6:

从我自己的经验,MTL4比的uBLAS快得多,它也快于征。



Answer 7:

有MTL4的并行版本。 只要看看simunova



文章来源: ublas vs. matrix template library (MTL4)