首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost::uBLAS对Eigen

Boost::uBLAS对Eigen
EN

Stack Overflow用户
提问于 2016-05-14 00:07:44
回答 3查看 12.5K关注 0票数 21

我几乎所有的数学线性代数工作都习惯于本征。最近,我发现Boost还提供了一个C++模板类库,它提供了基本的线性代数库(Boost::uBLAS)。这让我想知道我是否可以仅仅基于boost来完成我所有的工作,因为它已经是我的代码的一个主要库。

仔细观察这两种情况并不能使我对两者有更清楚的区别:

  • 助推::uBLAS:

uBLAS为稠密、单位和稀疏向量、稠密、恒等式、三角形、带状、对称、hermitian和稀疏矩阵提供模板化的C++类。可以通过范围、切片、适配器类和间接数组来构造向量和矩阵的视图。该库涉及向量和矩阵上常用的基本线性代数运算:约简(如不同范数)、向量和矩阵的加减法以及用标量乘积、内积和外积乘法、矩阵向量和矩阵积以及三角求解器。 ..。

  • 艾根:

它支持所有的矩阵大小,从小的固定大小的矩阵到任意大的密集矩阵,甚至是稀疏的矩阵。 它支持所有标准数字类型,包括std::complex、整数,并且很容易扩展到自定义的数字类型。 它支持各种矩阵分解和几何特征。 它由不支持的模块组成的生态系统提供了许多特殊的特性,如非线性优化、矩阵函数、多项式求解器、FFT等。 ..。

有没有人对他们的主要区别有更好的了解,我们可以在哪一个基础上做出选择?

EN

回答 3

Stack Overflow用户

发布于 2018-10-10 11:03:53

我正在重写一个实质性的项目,从boost::uBLAS到Eigen。这是商业环境中的生产代码。早在2006年,我就选择了uBLAS,现在我推荐了对艾根的改变。

uBLAS只会导致编译器执行很少的实际矢量化。我可以查看大型源文件的程序集输出,使用SSE编译成amd64体系结构,使用浮动类型,而不找到一个*ps指令(加载项、覆盖项、子程序、4种方式打包的单精度浮点指令)和仅*ss指令(addss、.、标量单精度指令)。

使用本征,将编写库以确保向量指令的结果。

特征非常完整。有很多矩阵分解和解。在boost::uBLAS中,LU分解是一个无文档化的附加程序,是一段贡献代码。特征有三维几何的附加功能,比如旋转和四元数,而不是uBLAS。

uBLAS在最基本的操作上稍显完整。特征缺少一些东西,比如投影(用另一个矩阵索引一个矩阵),而uBLAS则有它。对于两者都具有的特性,特征更加简洁,从而使表达更容易阅读。

那么,uBLAS是完全过时的。我不明白在2016/2017年间,人们是如何看待这一问题的。阅读常见问题:

问:我应该在新项目中使用uBLAS吗?答:在撰写本报告时(09/2012),有许多优秀的矩阵库可供使用,例如MTL4、armadillo、eigen。uBLAS提供了一组稳定的、经过良好测试的向量和矩阵类,是线性代数的典型运算,也是三角方程组的求解器。uBLAS提供密集、结构化和稀疏的矩阵--所有这些都使用类似的接口。最后,uBLAS提供了良好的(但不是出色的)性能。另一方面,uBLAS的上一次重大改善发生在2008年,自2009年以来没有出现重大变化。因此,人们应该问自己一些问题,以帮助做出决定:可用性?uBLAS是boost的一部分,因此可以在许多环境中使用。易用?uBLAS很容易用于简单的事情,但当您离开路径时,需要很好的C++知识。表演?还有更快的替代方案。尖端?uBLAS已经十多岁了,错过了C++11的所有新东西。

票数 16
EN

Stack Overflow用户

发布于 2017-02-02 16:45:00

我刚刚做了一个时间复杂度的比较boost和特征,对于相当琐碎的矩阵计算。这些结果虽然有限,但似乎表明,提振是一种更好的选择。我有一个有限元程序,它做预处理部分(设置元素矩阵,并将它们拼接在一起)。因此,自然地,这将涉及到大量的内存分配。

我在C++ (gcc 5.4.0,ubuntu16.04,Intel i3 Quad,2.40GHz,RAM : 4Gb)上编写了相同的Boost和Eigen代码,并分别运行不同节点大小(N)的代码,并使用linux实用程序计算时间。就我而言,我决定继续推进我的代码。

票数 5
EN

Stack Overflow用户

发布于 2016-05-14 01:57:53

如果您关心表达式模板引入的性能和性能增益,则选择特征;如果只想学习表达式模板,则选择uBlas。

http://eigen.tuxfamily.org/index.php?title=Benchmark

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

https://stackoverflow.com/questions/37221040

复制
相关文章

相似问题

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