本人的初心是在 Visual Studio2022 中的 C++ 模块中使用矩阵运算库,众所周知,Intel MKL 是一个非常好的矩阵运算库,而且其运算速度是非常可观的。所以我就用 VS2022 来配置 MKL。在刚开始的时候,我去网络上找了很多 VS配置MKL 的案例,但大多数都是老版本的,无论是从官网上下载 MKL 还是配置VS,都与新版本有很大的不同,所以我根据前人的案例,以及自己的一些摸索,成功配置了MKL库。详细步骤如下:
目录
1. 先下载安装 Visual Studio2022
2. 下载 Intel MKL
3. 配置 Visual Studio2022 的环境
4. 运行时出现的一些问题
下载地址:https://visualstudio.microsoft.com/zh-hans/vs/
选择 Community 2022 下载即可。
因为我只是用 C++编程,所以我只选择了下面两个组件
安装完成之后
下载地址:https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl.html
选择下面
Windows 系统选择
选择 API下载
点击 “Download”,你可以选择注册后下载,也可以直接下载
我选择不注册直接下载安装包
打开安装包
Continue
默认安装位置: C:\Program Files (x86)\Intel\oneAPI
选择 I accept the terms of the license agreement
选择 Customize,因为推荐安装有很多我不需要,可以选择性安装
我这里只选择 MKL库
选择你的 VS版本,我选择 VS2022
然后同意
安装完成
打开 Visual Studio2022,并新建一个.cpp文件,内容如下,测试用。
#include
#include
#include
int main()
{
float* A, * B;//两个向量
int a = 1, b = 1;//标量
int n = 5;//向量⼤⼩
A = (float*)mkl_malloc(n * 1 * sizeof(float), 64);
B = (float*)mkl_malloc(n * 1 * sizeof(float), 64);
printf("The 1st vector is ");
for (int i = 0; i < n; i++) {
A[i] = i;
printf("%2.0f", A[i]);
}
printf("\n");
printf("The 2st vector is ");
for (int i = 0; i < n; i++) {
B[i] = i + 1;
printf("%2.0f", B[i]);
}
printf("\n");
//计算a*A+b*B
cblas_saxpby(n, a, A, 1, b, B, 1);
printf("The a*A+b*B is ");
for (int i = 0; i < n; i++) {
printf("%2.0f", B[i]);
}
printf("\n");
mkl_free(A);
mkl_free(B);
getchar();
return 0;
}
打开属性管理器。属性管理器在视图-其他窗口。打开之后右上角出现下图
我这里写的是Debug下x64的程序,所以要右击 Debug | x64,添加新项目属性表。添加属性表的目的是为了让我之后使用MKL的程序不用在重新配置环境,只需要添加现有属性表就可以。
添加 MKL属性表,并打开。
在 Intel Libraries for oneAPI 中把 Use oneMKL 设置成 Parallel
在 VC++目录中,设置
可执行文件目录:C:\Program Files (x86)\Intel\oneAPI\mkl\2022.1.0\bin\intel64
包含目录:C:\Program Files (x86)\Intel\oneAPI\mkl\2022.1.0\include
库目录(有两个):C:\Program Files (x86)\Intel\oneAPI\mkl\2022.1.0\lib\intel64
C:\Program Files (x86)\Intel\oneAPI\compiler\2022.1.0\windows\compiler\lib\intel64_win
在链接器-输入中附加依赖项,根据电脑不同配置,选择不同依赖项。
选择地址:http://file:///C:/Program%20Files%20(x86)/Intel/oneAPI/mkl/2022.1.0/documentation/en/common/mkl_link_line_advisor.htm
我用的64位,所以要link下面四项
mkl_intel_ilp64.lib
mkl_intel_thread.lib
mkl_core.lib
libiomp5md.lib
按理来说,到目前为止就算配置成功的,但是你在运行测试算例的时候发现,并不能编译,会出现一些问题,这也就是我写这篇文章的主要目的,把我踩过的坑告诉大家怎么处理。
找不到 mkl_intel_thread.2.dll
你在搜索路径中发现其实它在 C:\Program Files (x86)\Intel\oneAPI\mkl\2022.1.0\redist\intel64
我的方法有三种,但是只有一种亲测可用。
方法一,将文件的路径添加到可执行文件目录下,发现还是找不到 mkl_intel_thread.2.dll 文件,此方法失败。
方法二,将文件拷贝到我的 .cpp文件旁边,这样在编译过程中,会搜索到文件。但其实这种方法,是找到了 mkl_intel_thread.2.dll 文件,但是并没有实际效果,如下
程序运行中断,没有显示结果。
方法三,也是本文的重点!!!!!!
在Windows系统搜索框中搜索 “编辑系统环境变量”。
打开
点击环境变量
在系统变量中,选择 Path 变量
将 mkl_intel_thread.2.dll 的路径放到里面,确定。
然后重新打开的 Visual Studio 2022,点击运行。
出现这个结果,说明你的 MKL 库配置成功!!!!!
如果大家在配置过程中还遇到什么问题,可以留言或私信。