Eigen的编译选项;MKL的使用

5 篇文章 0 订阅
1 篇文章 0 订阅
[size=large]使用时在工程的property页面的如下图所示位置定义(或者在#include <Eigen/Core>前使用#define定义):[/size]
[img]http://dl2.iteye.com/upload/attachment/0100/5613/6c060444-c6f7-3f3e-8eb0-bb3ff4768e01.png[/img]

[size=x-large][color=blue]1、SSE4.2支持,用Visual Studio时需要手动添加[/color][/size]
(但不知道在哪儿用到了SSE4.2):
[list]
[*]EIGEN_VECTORIZE_SSE4_2
[/list]
在include最多的Core文件中有这么一段:
[quote] // 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.[/quote]
[size=large]更多有关[color=blue]Vectorization[/color]的内容参见以下页面的Vectorization一节:[/size]
[url]http://eigen.tuxfamily.org/index.php?title=FAQ[/url]

[size=x-large][color=blue]2、将矩阵由列优先改为行优先[/color][/size]
[list]
[*]EIGEN_DEFAULT_TO_ROW_MAJOR
[/list]

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

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

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

[color=red]安装路径[/color]为:D:\ProgramFiles(x86)\
我只用到了[color=red]X64[/color]的版本:
需要的Include路径:
[list]
[*]D:\ProgramFiles(x86)\Intel\Composer XE 2013\mkl\include
[/list]
需要的lib路径:
[list]
[*]D:\ProgramFiles(x86)\Intel\Composer XE 2013\mkl\lib\intel64
[*]D:\ProgramFiles(x86)\Intel\Composer XE 2013\compiler\lib\intel64
[/list]
需要的lib:
[list]
[*]mkl_intel_lp64_dll.lib mkl_core_dll.lib mkl_intel_thread_dll.lib mkl_blacs_msmpi_lp64.lib libiomp5md.lib
[/list]
运行时需要的DLL:
[list]
[*]mkl_blacs_lp64.dll
[*]mkl_core.dll
[*]mkl_intel_thread.dll
[*]mkl_mc3.dll
[*]mkl_vml_mc3.dll
[*]libiomp5md.dll
[/list]
这些DLL是我试出来的(在没有MKL的机器上运行MKL程序),他们分布在以下两个路径中(运行时还缺DLL的话会弹出提示,提示缺少的DLL,到时可以再去这两个地方找):
(注意第一个是在[color=red]C盘[/color],而不在安装路径中,该路径安装时会自动被写入环境变量path中)
[list]
[*]C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler
[*]D:\ProgramFiles(x86)\Intel\Composer XE 2013\redist\intel64\mkl
[/list]
[color=red]注意[/color]:使用MKL时有只bug,即调用m1.householderQr();方法时说该方法重定义!
参见:[url]http://eigen.tuxfamily.org/bz/show_bug.cgi?id=704[/url]

某次的实验结果(工程文件见附件):
[img]http://dl2.iteye.com/upload/attachment/0100/6389/555ba037-1e0e-31aa-8397-267be4a3ee76.png[/img]


[size=x-large][color=blue]更多Eigen的编译选项请参见官方文档:[/color][/size]
[url]http://eigen.tuxfamily.org/dox/TopicPreprocessorDirectives.html[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值