Eigen简介

  1. 概述:

ü  Eigen功能非常强大

  • Eigen支持各种矩阵,从小规模的固定维数的矩阵到任意维数的密集矩阵,甚至稀疏矩阵统统都能够支持。
  • Eigen支持所有的标准数值类型,包括复数型,整型,浮点型,布尔型,并且很容易被扩展。
  • Eigen支持各种各样的矩阵分解
  • Eigen所谓的unsupported modules生态圈提供了很多使用的特性,比如非线性最优化,多项式分解等等。

ü  Eigen的速度非常的快。主要得益于以下几点:

  • 表达式模板的使用能够使Eigen智能的移除临时变量的使用,这在矩阵的运算速度上有了很大的提升。
  •      在SSE2/3/4,ARM NEON,AltiVec指令集中,Eigen计算采取显示的矢量化。
  •      固定维度的矩阵计算已经达到了最大化的优化,不能有动态内存分配,在合理的地方将循环分解。
  •      对于大矩阵,需要特别的注意缓存的使用。

ü  Eigen是安全可靠地

  •      算法是精挑细选的。
  •      Eigen已经通过自己的测试单元做了完整的测试。

ü  Eigen的使用非常优雅

  • API非常的清晰,易懂,表达的非常清楚。
  • 在Eigen之上实现其他的算法也非常的简单方便。

ü  Eigen足有好的编译器支持特性

 

  1. Eigen的使用需求说明:

Eigen只依赖C++标准库,而不需要依赖其他的类库。

假如仅仅使用Eigen,我们只需要引用头文件即可。不需要链接其他的二进制库,也不需要其他的配置相关的头文件。Eigen是个纯粹的模板库,所有的实现都在头文件中。

假如我们需要构建文档或做单元测试,自动安装,我们需要使用CMake构建系统。

  1. 编译器的支持:

Eigen使用标准的C++98,所以理论上,与所有的编译器兼容。当我们使用非标准特性时,它们是可选的并且可以被禁用。

已经成功使用Eigen的编译器如下:

GCC,4.4或以上

MSVC,2008或以上

Intel c++ compiler。极度推荐开启 –inline-forceinline 选项

XCode,4或者以上

MinGW,当前最新版本。

QNX的QCC编译器。

 

  1. 支持获取:

用户使用论坛 https://forum.kde.org/viewforum.php?f=74是一个很好的资源哦。

  1. 参考文档链接

Eigen3的使用文档:

快速开始向导(http://eigen.tuxfamily.org/dox/GettingStarted.html

详细说明文档(http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html

快速引用向导(http://eigen.tuxfamily.org/dox/group__QuickRefPage.html),这个文档包含了对EigenAPI中密集矩阵的完成详细的描述,帮助我们能够快速的浏览他的API。

稀疏矩阵使用向导(http://eigen.tuxfamily.org/dox/group__SparseQuickRefPage.html)这个文档包含了对EigenAPI中稀疏矩阵的完成详细的描述,帮助我们能够快速的浏览他的API。

常见问题解答(http://eigen.tuxfamily.org/index.php?title=FAQ)。         

更多话题(http://eigen.tuxfamily.org/dox/UserManual_Generalities.html),在这里我们能够找到关于预处理器检测,控制断言,多线程,MKL支持,许多Eigen的内部洞悉等等。

  1. 许可证:

Eigen是一个自由软件。从3.1.1开始,采用MPL2许可协议,MPL2是一个简单的共同授权协议。

  1. Eigen与BLAS/LAPACK的比较

ü  Eigen有许多BLAS/LAPACK不具备的特性:

  • Eigen能够处理固定大小的矩阵,这一特性具有广发的用途。
  • Eigen对稀疏矩阵和向量有内置的支持。
  • Eigen提供了很多方便使用的特性(集合模块,数组模块等),这个也具有非常广泛的用途。
  • 使用单线程,Eigen相比BLAS来讲,速度快得多。这说明了Eigen具备优于BLAS的效能,具体Eigen的表现还取决于你怎么使用它。

ü  Eigen拥有比BLAS和LAPACK更优雅已用的API

ü  广泛的优势:

  • 对我们的使用库来说,Eigen是仅仅编译时依赖的,不需要用户安装其他的库,不需要重新部署。
  • Eigen是很小的,所以我们能够方便的在工程中使用它。
  • Eigen是多平台支持的,能够运行在多种操作系统,硬件平台上,支持多个编译器。
  • Eigen跟其他的c++模板库相比,编译相对简单,编译时间也是可以接受的。
  1. 有趣高效的Eigen内部实现机制:
  2. 在未Matrix分配动态内存时,在SSIE架构或者AltiVec中(即vectorization is enabled),内存分配使用platform-specific的调用直接分配128位对齐的数组,否则直接使用标准的new[].
  3. Eigen不适用动态多态,也就是没有虚函数。因为Eigen保证所有的抽象特征在编译时就能确定。

待续…….

posted @ 2016-03-30 16:23  王明明  阅读(1166)  评论(0)    收藏  举报