Eigen 模板库的简介

来源:互联网 发布:uefi ubuntu 双系统 编辑:程序博客网 时间:2024/05/22 10:54

Eigen 是一个 C++ 模板库,主要用于:线性代数、矩阵、向量、数值计算和相关算法。

一、特点:

1、通用性

  • 支持所有矩阵,从小型固定矩阵到任意大密集矩阵、稀疏

  • 支持所有标准数据类型,包括 std::complex, integers,并且很容易扩展到自定义类型

  • 支持不同的矩阵分解(如QR,SVD等)和几何特性

  • 其 unsupported modules 提供和很多特殊性质,如非线性优化、矩阵函数、多项式求解、快速傅里叶变换等等。

2、快速性

  • 表达式模板允许智能删除临时数据,并能适当使用惰性编译

  • 向量化处理:支持 SSE 2/3/4, AVX, FMA, AVX512, ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bit and 64-bit) 指令集, 并且现在支持 S390x SIMD (ZVector) 单指令多数据

  • 充分优化固定大小的矩阵: 避免使用动态内存分配, 但需要时会展开循环

  • 对于大型矩阵,特别注意缓存友好

3、可靠性

  • 算法根据可靠性小心选择。可靠性取舍清楚地列出,能进行非常安全的分解

  • 通过自己的测试套件进行了全面测试,BLAS 标准测试套件和 LAPACK 测试条件的一些部分

4、完美性

  • 表达式模板对C++语法来说,语义清楚,表达式优雅

  • 执行算法感觉像复制的伪代码

5、多编译器支持

为了保证可靠性,在很多编译器上运行了测试套件,绕过了所有的编译器bugs。Eigen 是标准的C++98 库,保持了非常合理的编译时间。

二、需求

仅仅需要 C++ 标准库。运用CMake编译系统,不过仅用于建立文档和单元测试,自动安装。如果只是用Eigen,可以直接使用,不需要连接二进制库,不需要配置头文件。Eigen 是一个定义在头文件中的纯模板库。

三、编译器支持

GCC, 4.4 及以上
MSVC (Visual Studio), 2010 及以上
Intel C++ compiler. Enabling the -inline-forceinline option is highly recommended.
LLVM/CLang++, 3.4 及以上
XCode 4 and newer. Based on LLVM/CLang.
MinGW, recent versions. Based on GCC.
QNX’s QCC compiler.

注:在 ROS 系统中大量使用了 Eigen

原创粉丝点击