Eigen的编译选项;MKL的使用
程序员文章站
2022-07-04 13:33:38
...
使用时在工程的property页面的如下图所示位置定义(或者在#include <Eigen/Core>前使用#define定义):
1、SSE4.2支持,用Visual Studio时需要手动添加
(但不知道在哪儿用到了SSE4.2):
在include最多的Core文件中有这么一段:
更多有关Vectorization的内容参见以下页面的Vectorization一节:
http://eigen.tuxfamily.org/index.php?title=FAQ
2、将矩阵由列优先改为行优先
3、禁用Eigen的并行化
注意:要想使用OpenMP,除了不能定义以上选项外 ,在Visual Studio中还要设置 "C/C++ -> Language -> OpenMP Support"选项为:Yes (/openmp)
4、使用Intel MKL数学函数库
需要定义:
我的测试结果: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路径:
需要的lib路径:
需要的lib:
运行时需要的DLL:
这些DLL是我试出来的(在没有MKL的机器上运行MKL程序),他们分布在以下两个路径中(运行时还缺DLL的话会弹出提示,提示缺少的DLL,到时可以再去这两个地方找):
(注意第一个是在C盘,而不在安装路径中,该路径安装时会自动被写入环境变量path中)
注意:使用MKL时有只bug,即调用m1.householderQr();方法时说该方法重定义!
参见:http://eigen.tuxfamily.org/bz/show_bug.cgi?id=704
某次的实验结果(工程文件见附件):
更多Eigen的编译选项请参见官方文档:
http://eigen.tuxfamily.org/dox/TopicPreprocessorDirectives.html
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.
// 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
注意:要想使用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
上一篇: DH方式密钥交换四种表达方式
下一篇: 公钥算法