一、概况
(一)下载
下载免费版本,注意保留serial number(安装需要)
(二)安装
- 编辑silent.cfg 文件中的选项
- 安装需要2G的空间,默认的tmp空间不足使用–tmp_dir指定
./install.sh --silent ./silent.cfg --tmp-dir /dir
(三)基本概况
(四)文件结构
二、参数
(一)architecture
IA-32 or compatible: /lib/ia32_lin
Intel® 64 or compatible: /lib/intel64_lin
Intel® Many Integrated Core (Intel® MIC): /lib/intel64_lin_mic
(二)LP64 vs ILP64
LP64:使用32-bit的int
ILP64:使用64-bit的int,支持更大的数组
(三)threading
MKL有两种模式
parallel: 使用OpenMP(libiomp5.so)或者TBB(libtbb.so)两种线程技术
sequential: 不使用多线程,不建议使用
三、link library
(一)选择链接库
选择各个层对应的库,然后增加RTL
(二)advisor
根据输出选项自动生成需要的链接库
(三)例子
MKLROOT = /path/to/mkl
gcc myprog.c -L$(MKLROOT)/mkl/lib/intel64 -L$(MKLROOT)/lib/intel64_lin -I$(MKLROOT)/mkl/include -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm
#-lmkl_intel_lp64: interface layer
#-lmkl_intel_thread: threading layer
#-lmkl_core: computational layer
#-liomp5: RTL(run-time library)
#-lm: 连接数学库(FFT/Laplace)
#-lpthread: libiomp5依赖于pthread库,需要在-liomp5后面添加-lpthread(顺序很重要)
四、优化
(一)多线程
OpenMP有三种方式可以设定,优先级由高到低:
- 设置MKL_NUM_THREADS或者对应的函数
- 设置OMP_NUM_THREADS或者对应的函数
- 使用默认的OpenMP的线程数(物理核的个数)
TBB只能使用接口函数的形式设置
设置相应的线程数优化
(二)小矩阵
矩阵比较小的时候,使用MKL_DIRECT_CALL宏定义,可以忽略mkl的错误检查以及启动small-matrix kernels。
(三)代码技巧
1.数据对齐
2.LAPACK packed routines
3.FFT的数据长度为2的指数
(四)内存管理
1.避免内存泄露
- 设置MKL_DISABLE_FAST_MM为1或者调用mkl_disable_fast_mm()函数,可能会对性能有负影响
- 在当前线程调用mkl_free_buffers()或者mkl_thread_free_buffers()函数
2.使High-bandwidth Memory
3.使用自己的内存函数
五、mkl使用
(一)函数参考
(二)使用范例
--------------------- 作者:xmucas 来源:优快云 原文:https://blog.youkuaiyun.com/xmdxcsj/article/details/52643949?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!