| 查看: 2162 | 回复: 6 | ||||||
| 本帖产生 1 个 程序强帖 ,点击这里进行查看 | ||||||
coolrainbow木虫 (著名写手)
未来国家冻凉
|
[交流]
【分享】MKL程序编译与连接:Lapack篇已有5人参与
|
|||||
|
原帖转自我的空间:http://hi.baidu.com/coolrainbow/blog/index/1 经验表明,第一次做MKL程序编译时,大多数人都会走很多弯路,编译几个小时也不成功。其实这个原因很简单,就是:懒于阅读技术文档!!!!!!事实上,本人当时就是这样,看到3000多页的MKL手册头都大了,于是在编译时就“跟着感觉走”,弄得找不到库或者函数错误。其实,花一个小时读下文档,绝对比自己瞎折腾要强的多,这里把编译MKL的一些经验与大家分享下,作为快速入门。真正深入的话,还是那句:读文档! 1 MKL的环境变量 安装好MKL后,需要设置一些环境变量,这样才能找到所需要的库,这可以通过/opt/intel /Compiler/11.1/064/mkl/lib/tools/enviroments/mklvars{your-architecutre}. {sh|csh}实现。如果需要的话,可以加入到/etc/profile或你的.bashrc中。在程序编译或运行时,如果发生can not find libXXX之类,记得导出相应的LD_LIBRARY_PATH。如: can not find libmkl_intel_thread: cannot open shared object file... 如果你的这个库位于/opt/intel/Compiler/11.1/064/mkl/lib/em64t,那么: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/Compiler/11.1/064/mkl/lib/em64t 即可。 2 函数选择:Lapack MKL提供了3000多页的技术文档,对每一个函数进行了详细的介绍。这里仅对Lapack系列做一些介绍。 初学Lapack的人可能会问:我怎么知道哪个函数是做向量点积的,哪个函数是做奇异值分解的。问的最多的是:有没有什么书可以参考的?答案:至少我没见过哪个书像讲MFC或PHP那样详细的把Lapack的每一个函数讲解的书。那么唯一的途径就是阅读技术文档。不要头疼,那个文档有英文版和日语版(shit)的,没有中文版的。好好学英文吧。 Lapack中的函数的名称都是XYYZZZ形式(BLAS类似)的, X 精度。 如 s 单精度(对应于Fortran中的real(kink = 4),C中的float) d 双精度(对应于Fortran中的real(kink = 8),C中的double) c 单精度复数 z 双精度复数 YY 对应的矩阵类型和存储方式 ge 一般的矩阵,存储方式full 所谓full就是说,矩阵A的元素aij以数组a(i, j)或a[j]的形式存储于计算机中。这是最简单的方法,但是对稀疏矩阵或元素有一定相关性的矩阵效率较低 sy 对称矩阵,以full方式存储 sp 对称矩阵,以pack方式存储 pack方式对symmetric matrix采用了一维数组优化存储的方法,可以减小内存的使用。有两种存储方法,在Lapack程序中分别用'U' 'L'表示,对于'U',简单的说: aij ---> a(i+j*(j-1/2)) where i < j 'V‘类似。 还有其他的类型,请参考技术文档。 ZZZ 任务类型 就是你要干什么。如dot表示点积,trd表示三对角化等等 知道了这个命名规则后,找函数就方便多了。 3 函数参数:Lapack Lapack中的每一个函数都有很长的参数,常常把初学者吓倒。并不是说对矩阵A,B求乘法,只要简单的输入A,B就可以了。还有一些辅助空间,任务类型之类的,都要输入,如矩阵乘法: call dgemm('n','n',N,M,K,a,x,N,y,K,b,z,N) 执行矩阵乘法z=x*y,但还有一些character*1 的'n','n'以及integer的N,K等等,这些含义一定要仔细弄清,不然可能会使任务执行错误! 4 编译连接 这是最头痛的问题。MKL的连接选项比较长,最好使用make工具,我常用的一个模板如下 mkllib=/opt/intel/Compiler/11.1/064/mkl/lib/em64t mklinc=/opt/intel/Compiler/11.1/064/mkl/include foo: foo.o ifort -o foo foo.o -I$(mklinc) -L$(mkllib) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_lapack95_lp64 -liomp5 -lpthread 在连接MKL程序时,要在每一个“LAYER”中选择一个库, 1 interface layer:提供程序接口,即libmkl_intel{lp64},其中lp64是对em64t或ia64版本。 2 threading layer:线程接口。一般都是libmkl_intel_thread。注意,有了它后,一定要加上iomp5和pthread库,不然会出现连接错误。 3 computational layer,计算接口,即libmkl_core和你所需要的,如lapack的libmkl_lapack95_lp64或者线性方程组的libmkl_solver_lp64等等。 4 RTL接口,即pthread等等。 这样才可以连接成功。 实例: 现在以一个实例完成。想算一个矩阵乘法,矩阵用双精度,一般存储模式,则选用dge???函数,查文档得知?gemm做矩阵乘法,于是选用dgemm,这个算矩阵乘法的程序代码: 命名为dge.f90,写Makefile: 然后执行make,好,一个叫dge的可执行程序出现了,在我的机器上运行时间为1.457s。用我自己随手写的一个矩阵乘法程序一算:11min34s,汗颜.... [ Last edited by coolrainbow on 2010-11-18 at 15:21 ] |
» 收录本帖的淘帖专辑推荐
vasp计算资料 | 科研录 | 并行计算 |
» 本帖已获得的红花(最新10朵)
» 猜你喜欢
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有6人回复
孩子确诊有中度注意力缺陷
已经有14人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
急求linux下安装numpy软件
已经有4人回复
intel visual fortran中MKL如何使用,是用use module还是include?
已经有4人回复
win7中调用lapack相关问题
已经有5人回复
linuix系统中lapack的使用【转载】
已经有4人回复
用fortran存储稀疏矩阵
已经有4人回复
求助ifort 调用lapack的问题!
已经有4人回复
这个程序我编译一直不通..
已经有15人回复
编译vasp主程序时,makefile中的链接库选择问题
已经有15人回复
Dalton2011并行编译详记
已经有33人回复
vasp编译通过,前台算ok,去qsub到后台,找不到libmkl_lapack.so
已经有19人回复
【pwzhou个人文集】Molpro 2010.1 PL20 并行编译
已经有5人回复
【求助】LAPACK: Routine ZPOTRF failed!
已经有5人回复
【求助】linux下lapack库编译测试错误
已经有3人回复
【求助】奇异值分解程序(SVD分解程序)
已经有12人回复

2楼2010-11-22 14:01:58
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
3楼2010-11-22 16:36:16
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
4楼2010-12-01 08:50:10
coolrainbow
木虫 (著名写手)
未来国家冻凉
- 程序强帖: 2
- 应助: 1 (幼儿园)
- 贵宾: 0.1
- 金币: 3979.5
- 散金: 10
- 红花: 50
- 帖子: 1137
- 在线: 272.3小时
- 虫号: 239560
- 注册: 2006-04-07
- 性别: GG
- 专业: 理论和计算化学

5楼2010-12-01 09:58:02

6楼2012-05-31 18:35:02
wufengseu
木虫 (正式写手)
- 应助: 36 (小学生)
- 金币: 2745.2
- 散金: 200
- 红花: 15
- 帖子: 505
- 在线: 154.4小时
- 虫号: 298920
- 注册: 2006-11-19
- 专业: 基础物理学
7楼2013-12-06 22:01:27













回复此楼
wufengseu