Eigen简介
- 概述:
ü Eigen功能非常强大
- Eigen支持各种矩阵,从小规模的固定维数的矩阵到任意维数的密集矩阵,甚至稀疏矩阵统统都能够支持。
- Eigen支持所有的标准数值类型,包括复数型,整型,浮点型,布尔型,并且很容易被扩展。
- Eigen支持各种各样的矩阵分解
- Eigen所谓的unsupported modules生态圈提供了很多使用的特性,比如非线性最优化,多项式分解等等。
ü Eigen的速度非常的快。主要得益于以下几点:
- 表达式模板的使用能够使Eigen智能的移除临时变量的使用,这在矩阵的运算速度上有了很大的提升。
- 在SSE2/3/4,ARM NEON,AltiVec指令集中,Eigen计算采取显示的矢量化。
- 固定维度的矩阵计算已经达到了最大化的优化,不能有动态内存分配,在合理的地方将循环分解。
- 对于大矩阵,需要特别的注意缓存的使用。
ü Eigen是安全可靠地
- 算法是精挑细选的。
- Eigen已经通过自己的测试单元做了完整的测试。
ü Eigen的使用非常优雅
- API非常的清晰,易懂,表达的非常清楚。
- 在Eigen之上实现其他的算法也非常的简单方便。
ü Eigen足有好的编译器支持特性
- Eigen的使用需求说明:
Eigen只依赖C++标准库,而不需要依赖其他的类库。
假如仅仅使用Eigen,我们只需要引用头文件即可。不需要链接其他的二进制库,也不需要其他的配置相关的头文件。Eigen是个纯粹的模板库,所有的实现都在头文件中。
假如我们需要构建文档或做单元测试,自动安装,我们需要使用CMake构建系统。
- 编译器的支持:
Eigen使用标准的C++98,所以理论上,与所有的编译器兼容。当我们使用非标准特性时,它们是可选的并且可以被禁用。
已经成功使用Eigen的编译器如下:
GCC,4.4或以上
MSVC,2008或以上
Intel c++ compiler。极度推荐开启 –inline-forceinline 选项
XCode,4或者以上
MinGW,当前最新版本。
QNX的QCC编译器。
- 支持获取:
用户使用论坛 https://forum.kde.org/viewforum.php?f=74是一个很好的资源哦。
- 参考文档链接
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的内部洞悉等等。
- 许可证:
Eigen是一个自由软件。从3.1.1开始,采用MPL2许可协议,MPL2是一个简单的共同授权协议。
- Eigen与BLAS/LAPACK的比较
ü Eigen有许多BLAS/LAPACK不具备的特性:
- Eigen能够处理固定大小的矩阵,这一特性具有广发的用途。
- Eigen对稀疏矩阵和向量有内置的支持。
- Eigen提供了很多方便使用的特性(集合模块,数组模块等),这个也具有非常广泛的用途。
- 使用单线程,Eigen相比BLAS来讲,速度快得多。这说明了Eigen具备优于BLAS的效能,具体Eigen的表现还取决于你怎么使用它。
ü Eigen拥有比BLAS和LAPACK更优雅已用的API
ü 广泛的优势:
- 对我们的使用库来说,Eigen是仅仅编译时依赖的,不需要用户安装其他的库,不需要重新部署。
- Eigen是很小的,所以我们能够方便的在工程中使用它。
- Eigen是多平台支持的,能够运行在多种操作系统,硬件平台上,支持多个编译器。
- Eigen跟其他的c++模板库相比,编译相对简单,编译时间也是可以接受的。
- 有趣高效的Eigen内部实现机制:
- 在未Matrix分配动态内存时,在SSIE架构或者AltiVec中(即vectorization is enabled),内存分配使用platform-specific的调用直接分配128位对齐的数组,否则直接使用标准的new[].
- Eigen不适用动态多态,也就是没有虚函数。因为Eigen保证所有的抽象特征在编译时就能确定。
待续…….
浙公网安备 33010602011771号