Eigen库下使用MKL加速
对于矩阵运算,Eigen库要比MKL库使用起来更加简洁明了,但是Eigen库的效率要远远比不上MKL库的速度,因此我们要在使用Eigen库函数中,使用MKL进行加速。
1. 下载Eigen库
Eigen库的配置很简单,网上有很多教程可供参考,这里我也会按部就班地说一下。
首先,要从Eigen的官网上进行下载安装。
下载地址:https://eigen.tuxfamily.org/index.php?title=Main_Page
这里我选择最新版 Eigen 3.4.0zip下载
打开安装包,我下载到电脑:D:\LXJ\安装包\eigen-3.4.0.zip\eigen-3.4.0
我们这里只需要用到Eigen库,所以可以直接把整个 Eigen 文件拷贝出来,粘到你想要创建库的文件夹中,方便你打包处理。
我拷贝到:D:\LXJ\LXJ_CODE\Eigen MKL\属性表\Eigen_lib,显示
到这里Eigen库的位置就放好了。
2. 配置Eigen库
首先,打开 VS2022,创建一个 .cpp 文件,测试用的。
-
-
-
-
using namespace Eigen;
-
-
int main()
-
{
-
MatrixXd m = MatrixXd::Random(3, 3);
-
m = (m MatrixXd::Constant(3, 3, 1.2)) * 50;
-
std::cout << " m = " << std::endl << m << std::endl;
-
VectorXd v(3);
-
v << 1, 2, 3;
-
std::cout << " m * v = " << std::endl << m * v << std::endl;
-
}
这里我们选择 Debug x64,打开属性管理器
添加新项目属性表,我这里起名叫 Eigen_3.4.0
打开 Eigen_3.4.0
只需要把之前 Eigen所存在的路径放到包含目录里即可
到这里安装成功,运行显示
3. Eigen下使用MKL库加速
MKL 库的配置详看:https://blog.csdn.net/m0_63111108/article/details/124734432?spm=1001.2014.3001.5501
这里举一个很简单的例子来测试MKL的加速效果。
没有MKL加速:
-
-
-
-
-
-
using namespace std;
-
using namespace Eigen;
-
-
int main(int argc, char* argv[])
-
{
-
MatrixXd a = MatrixXd::Random(1000, 1000); // 随机初始化矩阵
-
MatrixXd b = MatrixXd::Random(1000, 1000);
-
-
double start = clock();
-
MatrixXd c = a * b;
-
double endd = clock();
-
double thisTime = (double)(endd - start) / CLOCKS_PER_SEC;
-
-
cout << thisTime << endl;
-
-
system("PAUSE");
-
return 0;
-
}
有MKL加速,需要在预处理前添加宏定义:
-
-
-
-
-
-
-
-
-
using namespace std;
-
using namespace Eigen;
-
-
int main(int argc, char* argv[])
-
{
-
MatrixXd a = MatrixXd::Random(1000, 1000); // 随机初始化矩阵
-
MatrixXd b = MatrixXd::Random(1000, 1000);
-
-
double start = clock();
-
MatrixXd c = a * b;
-
double endd = clock();
-
double thisTime = (double)(endd - start) / CLOCKS_PER_SEC;
-
-
cout << thisTime << endl;
-
-
system("PAUSE");
-
return 0;
-
}
不断增加矩阵维数,得到:
矩阵维数 | 无加速 | 有加速 |
1000X1000 | 15.566 | 0.019 |
2000X2000 | 122.432 | 0.101 |
3000X3000 | 415.981 | 0.285 |
4000X4000 | 978.103 | 进程退出 |
发现,在使用MKL加速时,矩阵维数超过一定数值时,就会直接退出进程
调试之后发现:
此问题尚未解决,若有专业人士明白,可以评论区留言或私聊。
此问题是一旦矩阵维数超过4000就进程结束,调试中的异常找不到根源,文件位置也存在于系统之中了,但仍旧解决不了。我猜想可能是电脑配置(12th Gen Intel(R) Core(TM) i5-12400 2.50 GHz),具体原因还请各位专业人士指正。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggeace
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13