Intel MKL数学库使用辅助工具
10/21
本文最后更新于
2023年10月21日,已超过
500天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
Intel oneMKL(oneAPI Math Kernel Library)数学库在Intel CPU上经过精心优化,其性能比普通的Blas/Lapack好很多。如果追求计算性能,建议使用oenMKL数学库。
由于oneMKL支持以下特点使其编译链接选项复杂。
- 多套编译器
- 多种编程语言
- 多种计算架构
- 静态/动态库链接方式
- 串行/多线程支持
如何获取正取的MKL库编译链接信息呢?
目前找到两种简单的方式,一种通过Intel官网网页工具,一种是MKL库自带的命令行工具。
网页辅助工具
Intel官方提供了一个网页帮助用户指定使用环境从而生成编译链接信息。
网页链接:https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html
界面如下图所示:
其中选择框含义如下:
Select Intel@ product:
选择使用的MKL版本Select OS:
选择使用的操作系统Select programming language:
选择应用程序使用的编程语言,C/C++、Fortran、DPC++Select compiler:
选择使用的编译器,对于Fortran应用,支持Intel Fortran Classic、Intel Fortran Compiler(两者区别见之前的文章)、PGI Fortran、GNU FortranSelect architecture:
选择CPU架构平台64位还是32位Select dynamic or static linking:
选择静态库链接还是动态库链接Select interface layer:
传递给MKL函数的整型参数是32bit还是64bitSelect OpenMP library:
是否需要调用线程安全的MKL库Link with Intel oneMKL libraries explicitly:
是否需要明确指定链接的MKL库,区别是可能多出了lmkl_intel_lp64 -lmkl_sequential -lmkl_core
在笔者使用的机器平台上对应选择如下图所示,生成了对应的编译链接选项。
编译安装程序示例:
$ ifort -mkl=sequential mkl_app.f90 -L${MKLROOT}/lib/intel64 -lpthread -lm -ldl
By the way:
使用的Intel 2022.3.0版本,mkl编译选项建议换成-qmkl=sequential
。
ifort: command line remark #10412: option '-mkl=sequential' is deprecated and will be removed in a future release. Please use the replacement option '-qmkl=sequential'
命令行工具mkl_link_tool
该命令行工具安装在mkl库中bin子目录里。
$ mkl_link_tool -interactive
交互式选择前面介绍的使用环境选项,最后生成编译链接信息。
比如:
Configuration
=============
OS: lnx
Architecture: intel64
Compiler: intel_f
Linking: dynamic
Interface layer: lp64
Parallel: no
Output
======
Compiler option(s):
-mkl=sequential
Linking line:
-L${MKLROOT}/lib/intel64 -lpthread -lm -ldl
Environment variable(s):
There is no recommended environment variables

