注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

激进的猫

心似浮云常自在,意如流水任东西

 
 
 

日志

 
 

[Fortran学习笔记] Intel Visual Fortran中Math Kernel Library库链接  

2015-12-05 00:07:59|  分类: 网络学堂 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        Math Kernel Library库的链接是一个常见的问题,网上资料鲜有详细而正确的例子;其实最好的资料是Intel的技术文档,在文档中给出了MKL库在使用过程中的方方面面的问题,并且给出不少实例。Intel关于MKL库有两个文档,一个是指导手册(User's Guide),说明MKL库的使用、编译、链接、环境配置等问题;一个是参考手册(Reference Manual),说明MKL库的各个函数/子程序的功能、参数、调用等问题,两者都可以在Intel官网的软件支持文档库中找到(https://software.intel.com/en-us/intel-software-technical-documentation)。
        MKL库支持32位和64位的系统,各个库函数基本上既有32位版本也有64位版本;MKL库支持Windows、Linux、Apple系统,库的使用在不同系统下并不完全一致;MKL库支持串行(Sequential)、并行(Parallel)以及集群(Cluster)计算方式,对不同的计算方式调用的库也不同;MKL库支持多种编译器,不同编译器的编译环境配置也不同;MKL支持动态和静态两种不同的链接方式。正是由于MKL库的支持和使用如此强大,其调用也相应相当繁琐,不同情况需要不同对待,最好的方式是通读User's Guide,里面对各种情况都作了详细说明,千万不要在网上找一些一鳞半爪的经验之谈,包括并尤其是本文,当作万能的指南。本人使用的是MS Visual Studio+Intel Visual Fortran,Visual Fortran Compiler是集成在Visual Studio中的,所使用的库是32位的(虽然计算机系统是64位的Windows 7),所使用计算方式是串行(Sequential),本文主要以此为基础说明MKL库的链接问题。
        要链接MKL库首先要清楚MKL库的结构;关于MKL库的结构后面说明。在调用MKL库之前,首先要对IVF的编译环境进行配置(参见[Fortran学习笔记] Intel Math Kernel Library (MKL,英特尔数学内核库),更详细的说明请参阅User's Guide)。
        首先要说明的是,使用MKL库要对三个不同的Layer分别选用相应的库,用以说明不同的类型、线程类型等。
               1、Interface Layer(接口层):说明不同接口,主要用以说明如果使用32位的库,使用的是cdecl接口(IVF默认,相应的库为mkl_intel_c.lib)还是CVF默认接口(使用CVF作为编译器时,相应的库为mkl_intel_s.lib);如果使用64位的库,需要说明是LP64接口(相应的库为mkl_intel_lp64.lib)还是ILP借口(相应的库为mkl_intel_ilp64.lib)。
                2、Threading Layer(线程层):说明线程类型,如果只做串行计算,选择mkl_sequential.lib;如果做并行计算,选择mkl_intel_thread.lib;如果使用PGI编译器且做并行计算,选择mkl_pgi_thread.lib。
                3、Computational Layer(计算层):计算层只有一个核心库,mkl_core.lib,但是要分清楚是使用32位的还是64位的,是使用静态链接还是动态链接,如果使用动态链接,相应的库为mkl_core_dll.lib。
        简言之,链接MKL要在Interface Layer、Threading Layer、Computational Layer分别选一个(或多个)相应的库。需要注意的是,上面没有强调32位和64位的分别,如果使用32位的库,在\mkl\lib\ia32文件夹下找相应的库;如果使用64位的库,要在\mkl\lib\intel64文件夹下找相应的库;同时还需要注意使用静态链接还是动态链接,只要注意一般来说到动态链接库名称末位以_dll结尾即可,使用动态链接时选择相应的库即可;因此IVF安装好以后需要看一下自己的MKL库文件夹的结构。
        还需要附加一点,如果使用多线程计算,还需要使用如下库:
                4、Threading run-time library (RTL),这个库的文件名是libiomp5md.lib;并且需要注意的是这个库的安装位置不在MKL文件夹下,而在编译器的文件夹下,即在\compiler\lib\ia32或\compiler\lib\intel64下。

         以上大致说明正确链接MKL库需要选择哪些具体的库,下面说明链接库的方式;链接库的方式有以下几种:
         针对两种不同开发环境:
                1、使用Intel Parallel Studio XE Composer Edition compiler:使用/Qmkl选项
                2、使用MS Visual Studio IDE:使用自动链接方式,具体的IDE设置为:解决方案资源管理器视图》工程》属性》Fortran》Libraries》Use intel Math Kernel Library》选择sequential/Parallel/Cluster
         针对以下不同链接方式:
                3、Explicit dynamic linking:采用Single Dynamic Library;详见User's Guide
                4、Explicitly listing libraries on your link line:选择具体的库用以链接,如何选择上面已做说明,  针对不同情况,做了详细的列表,如下:
             [Fortran学习笔记] Intel Visual Fortran中Math Kernel Library库链接 - 激进的猫 - 激进的猫
                 5、Using an interactive interface:使用Link-line Advisor,该软件在intel官网有下载http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor
                6、Using an internally provided tool:使用Command-line Link Tool,文件名为mkl_link_tool.exe,该软件已集成在MKL库中,路径为\mkl\tools

        User's Guide详细举例说明各种链接方式的具体使用,由于Windows系统下采用MS Visual Studio+IVF较多,下面对方式4的IDE具体设置做简要说明:在解决方案资源管理器视图下右键单击工程名》属性》Linker》General》Additional Library Directories,在编辑框中添加所要链接的库所在的路径,如"C:\Program Files (x86)\Intel\Composer XE 2013\mkl\lib\ia32";然后 工程名》属性》Linker》Input》Additional Dependencies,在编辑框中添加所要链接的库的文件名(这里不需要库的完整路径;有多个库,库文件名之间用空格隔开);当然也可以直接在Input》Additional Dependencies后的编辑框中添加所要链接的库的完整路径。这里需要说明的是,如果路径中含有空格,那么路径要以" "引起来,否则有可能会出错。
        以上只是对MKL库的链接问题所做的一个简单的说明,只说明其中一小部分情况下的设置问题,详细的说明还是要参照User's Guide for Intel@ Math Kernel Library (MKL)。
  评论这张
 
阅读(733)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017