`

Eigen的编译选项;MKL的使用

阅读更多
使用时在工程的property页面的如下图所示位置定义(或者在#include <Eigen/Core>前使用#define定义):


1、SSE4.2支持,用Visual Studio时需要手动添加
(但不知道在哪儿用到了SSE4.2):
  • EIGEN_VECTORIZE_SSE4_2

在include最多的Core文件中有这么一段:
引用
    // Detect sse3/ssse3/sse4:
    // gcc and icc defines __SSE3__, ...
    // there is no way to know about this on msvc. You can define EIGEN_VECTORIZE_SSE* if you
    // want to force the use of those instructions with msvc.

更多有关Vectorization的内容参见以下页面的Vectorization一节:
http://eigen.tuxfamily.org/index.php?title=FAQ

2、将矩阵由列优先改为行优先
  • EIGEN_DEFAULT_TO_ROW_MAJOR


3、禁用Eigen的并行化
  • EIGEN_DONT_PARALLELIZE
http://eigen.tuxfamily.org/dox/TopicMultiThreading.html
注意:要想使用OpenMP,除了不能定义以上选项外 ,在Visual Studio中还要设置 "C/C++ -> Language -> OpenMP Support"选项为:Yes (/openmp)

4、使用Intel MKL数学函数库
需要定义:
  • EIGEN_USE_MKL_ALL

我的测试结果:MKL在资源利用和速度上比起Eigen还是有一定的优势的,矩阵越大越明显;但还是不如Matlab,可是Matlab用的也是MKL啊!!!(malab中输入version -lapack查看)。
官方文档:http://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html
Intel提供的编译选项生成器(能再难用点儿么):https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/
MKL文档:https://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/
MKL教程:https://software.intel.com/zh-cn/node/529734#88D72261-26DE-42D4-807B-36E48C770AFA
composer xe自行去官网下载,能试用一个月,也不知道是怎么授权的,反正我这台装了一年,卸载后,没法再装了,但别的机器拷过来的编译好的程序,再加上以下的DLL,是可以运行的。。。那么,,MKL的licence在哪一步体现了?

说下配置:Intel Composer XE 2015下载下来不能用(安装时CRC校验不通过。。。),用的是MKL11,也就是2013的版本
由于MKL11不支持VS2013,只好手动配置:

安装路径为:D:\ProgramFiles(x86)\
我只用到了X64的版本:
需要的Include路径:
  • D:\ProgramFiles(x86)\Intel\Composer XE 2013\mkl\include

需要的lib路径:
  • D:\ProgramFiles(x86)\Intel\Composer XE 2013\mkl\lib\intel64
  • D:\ProgramFiles(x86)\Intel\Composer XE 2013\compiler\lib\intel64

需要的lib:
  • mkl_intel_lp64_dll.lib mkl_core_dll.lib mkl_intel_thread_dll.lib mkl_blacs_msmpi_lp64.lib  libiomp5md.lib

运行时需要的DLL:
  • mkl_blacs_lp64.dll
  • mkl_core.dll
  • mkl_intel_thread.dll
  • mkl_mc3.dll
  • mkl_vml_mc3.dll
  • libiomp5md.dll

这些DLL是我试出来的(在没有MKL的机器上运行MKL程序),他们分布在以下两个路径中(运行时还缺DLL的话会弹出提示,提示缺少的DLL,到时可以再去这两个地方找):
(注意第一个是在C盘,而不在安装路径中,该路径安装时会自动被写入环境变量path中)
  • C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler
  • D:\ProgramFiles(x86)\Intel\Composer XE 2013\redist\intel64\mkl

注意:使用MKL时有只bug,即调用m1.householderQr();方法时说该方法重定义!
参见:http://eigen.tuxfamily.org/bz/show_bug.cgi?id=704

某次的实验结果(工程文件见附件):




更多Eigen的编译选项请参见官方文档:
http://eigen.tuxfamily.org/dox/TopicPreprocessorDirectives.html
  • 大小: 45.1 KB
  • 大小: 9.3 KB
分享到:
评论
6 楼 cherishLC 2015-10-12  
Andy__Zou 写道
cherishLC 写道
Andy__Zou 写道
cherishLC 写道
Andy__Zou 写道
您好,您的工程里面的那些hpp文件附件里面没有诶  可否共享下呢

附件重新传了一下,Timer类直接贴到cpp文件里了,另外一个应该不需要。

谢谢!工程里要用到mkl_blacs_msmpi_lp64.lib  libiomp5md.lib库,但是我下载intel mkl的找不到这两个库,能否共享下么?

直接在mkl安装文件夹内搜索啊,不一定是在同一个文件夹里,,带版权的东西不好共享了


我找遍了整个文件夹都没找到这两个库,其它的库都有诶

用我给的网址生成自己的编译选项啊,,不同版本不一样的,我的是11.0的,不可能说MKL安装了不能用的。。。
5 楼 Andy__Zou 2015-10-12  
cherishLC 写道
Andy__Zou 写道
cherishLC 写道
Andy__Zou 写道
您好,您的工程里面的那些hpp文件附件里面没有诶  可否共享下呢

附件重新传了一下,Timer类直接贴到cpp文件里了,另外一个应该不需要。

谢谢!工程里要用到mkl_blacs_msmpi_lp64.lib  libiomp5md.lib库,但是我下载intel mkl的找不到这两个库,能否共享下么?

直接在mkl安装文件夹内搜索啊,不一定是在同一个文件夹里,,带版权的东西不好共享了


我找遍了整个文件夹都没找到这两个库,其它的库都有诶
4 楼 cherishLC 2015-10-09  
Andy__Zou 写道
cherishLC 写道
Andy__Zou 写道
您好,您的工程里面的那些hpp文件附件里面没有诶  可否共享下呢

附件重新传了一下,Timer类直接贴到cpp文件里了,另外一个应该不需要。

谢谢!工程里要用到mkl_blacs_msmpi_lp64.lib  libiomp5md.lib库,但是我下载intel mkl的找不到这两个库,能否共享下么?

直接在mkl安装文件夹内搜索啊,不一定是在同一个文件夹里,,带版权的东西不好共享了
3 楼 Andy__Zou 2015-10-08  
cherishLC 写道
Andy__Zou 写道
您好,您的工程里面的那些hpp文件附件里面没有诶  可否共享下呢

附件重新传了一下,Timer类直接贴到cpp文件里了,另外一个应该不需要。

谢谢!工程里要用到mkl_blacs_msmpi_lp64.lib  libiomp5md.lib库,但是我下载intel mkl的找不到这两个库,能否共享下么?
2 楼 cherishLC 2015-09-26  
Andy__Zou 写道
您好,您的工程里面的那些hpp文件附件里面没有诶  可否共享下呢

附件重新传了一下,Timer类直接贴到cpp文件里了,另外一个应该不需要。
1 楼 Andy__Zou 2015-09-24  
您好,您的工程里面的那些hpp文件附件里面没有诶  可否共享下呢

相关推荐

    eigen3+vs2017+cmake使用vs2017编译Eigen3库 Eigen3.3.9库

    **使用编译好的Eigen3库** 编译完成后,你可以在你的C++项目中包含Eigen3头文件,例如`#include &lt;Eigen/Dense&gt;`,然后就可以直接使用Eigen3提供的功能了。记得将编译生成的库文件添加到你的项目的链接器设置中,...

    Eigen3库编译资源

    Eigen3库虽然可以不编译,但是我为了编译Ceres库还是把Eigen库编译了一下,Eigen库编译不会生成动态链接库,只会有include文件和share文件,主要是使用include文件中的eigen3文件夹

    eigen-3.2.10

    为了在Eigen库上实现交叉编译,开发者需要确保他们正确配置了编译器选项,包括目标架构、链接器路径和库路径。 **Eigen库的主要特性** 1. **模板元编程**:Eigen使用C++的模板元编程技术,实现了高效且灵活的代码...

    eigen库使用教程,使用说明文档

    Eigen的表达式模板是一种强大的特性,它允许你在编译时构建复杂的矩阵运算表达式,而不会立即执行,直到真正需要结果时才进行计算。这种延迟评估机制大大减少了中间临时对象的创建,提高了效率。 ### 6. 功能扩展与...

    eigen-3.3.9(包含详细编译教程)

    同时,由于你添加了详细的编译教程,这使得不熟悉Eigen或者对编译开源库有困难的用户能够更容易地在自己的系统上构建和使用这个库。 编译Eigen并不复杂,通常需要以下步骤: 1. **获取源码**:首先,你需要从...

    eigen-3.4.0.tar.gz

    3. **配置**:如果需要自定义编译选项,可以使用CMake进行配置,否则可以直接使用make。 4. **编译**:执行`make`命令,这会编译库的源代码。 5. **安装**:使用`sudo make install`将库安装到系统指定的位置,如/...

    Eigen数学库Android Studio项目模版

    2. **配置CMake或NDK**:由于Eigen是C++库,你可能需要使用Android Studio的CMake支持来编译它。在`app/CMakeLists.txt`文件中,你需要包含Eigen的头文件目录,并链接所需的库。 3. **编写JNI接口**:为了在Java层...

    Eigen3.3.7_SourceCode.7z,Eigen源码

    为了使用Eigen,你需要首先解压`Eigen3.3.7_SourceCode`,然后将包含头文件的目录添加到你的项目编译路径中。由于这是一个头文件库,你不需要链接任何库文件,只需包含所需的头文件即可开始使用。 在开发过程中,你...

    eigen库使用方法.zip

    **Eigen库使用方法** Eigen是一个开源的C++矩阵和向量库,专为数值计算而设计,它在C++环境中提供了高效、灵活且易于使用的线性代数操作。Eigen库适用于各种应用场景,包括机器学习、图像处理、物理模拟等,其核心...

    eigen-3.2.10.zip

    然而,“eigen-3.2.10.zip”文件提供了一个已经编译好的版本,这可能是因为某些特定的编译选项或者针对特定平台的优化,使得用户可以直接在相应的环境中快速集成和使用。 在“eigen-3.2.10”这个压缩包中,你可以...

    最新eigen库3.2.10

    在实际应用中,例如在计算机视觉、机器人学、机器学习等领域,Eigen库与ceres solver的结合使用能帮助开发者高效地解决复杂问题,如姿态估计、图像拼接、SLAM(Simultaneous Localization and Mapping)以及回归和...

    win7下vs2010编译的g2o+eigen3库文件(ReleaseX64+DebugX64)

    本资源是为在Windows 7操作系统上使用Visual Studio 2010 (VS2010) 开发环境的用户准备的,包括了两个著名的数学库——g2o和Eigen3的编译版本,适用于64位系统。 g2o(General Graph Optimization)是一个开源库,...

    eigen3.3.3版本安装包

    1. **类型模板**: Eigen使用C++模板机制,可以方便地处理各种数据类型,如float、double、int以及自定义数据结构。这使得它能够灵活地适应不同的计算需求。 2. **表达式模板**: 这是Eigen的一个重要特性,它允许...

    Eigen3检查安装测试代码

    如果编译无误且输出符合预期,那么就可以确认Eigen3已经成功安装并且可以在项目中使用。 在实际开发中,Eigen3提供了丰富的矩阵运算、向量操作、线性方程组求解、特征值问题等工具。它还支持表达式模板,使得代码更...

    Eigen库的使用指南

    Eigen库的使用指南

    eigen3.3.9版本安装包

    Eigen是一个头文件库,这意味着你不需要编译库文件,而是直接将头文件包含到你的项目中。但是,为了验证安装是否成功,你可以构建并运行库中的示例程序。在解压后的目录中,找到并进入`examples`子目录,然后使用...

    基于Qt的MinGw编译PCL及其所有依赖库boost、eigen、flann、qhull、VTK

    2. **配置环境变量**:将MinGW的bin目录添加到系统环境变量PATH中,以便在命令行中使用编译工具。 3. **下载依赖库**:通过Git克隆或者从官方网站下载各个库的源代码。 4. **编译Boost**:Boost通常是最复杂的部分...

    C++ Eigen库的下载配置和使用

    四、Eigen 的使用 4.1 矩阵和向量的初始化 4.2 矩阵元素的赋值 4.3 矩阵元素的访问 4.4 获取矩阵大小 4.5 特殊矩阵的定义 4.5.1 全0矩阵 4.5.2 全1矩阵 4.5.3 矩阵置0 4.5.4 矩阵置1 4.5.5 随机矩阵 4.5.6 置为单位...

    利用Eigen实现线性优化拟合器

    而使用Eigen库,我们可以轻松地实现这个过程,并获得出色的性能和精确度。 为什么选择Eigen库呢?Eigen是一个被广泛认可的C++线性代数库,其设计目标是高性能、易用性和表达力。它提供了丰富的线性代数运算功能,...

Global site tag (gtag.js) - Google Analytics