对于矩阵运算,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 文件,测试用的。

#include<iostream>
#include<Eigen/Dense>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加速:

#include <iostream>
#include <Eigen/Core>
#include <Eigen/Dense>
#include <time.h>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加速,需要在预处理前添加宏定义:

#define EIGEN_USE_MKL_ALL
#define EIGEN_VECTORIZE_SSE4_2#include <iostream>
#include <Eigen/Core>
#include <Eigen/Dense>
#include <time.h>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),具体原因还请各位专业人士指正。

Eigen库下使用MKL加速相关推荐

  1. Linux下MKL库的安装部署与使用,并利用cmake编译器调用MKL库去提升eigen库的计算速度

    文章目录 前言 一.MKL库的下载 二.MKL库的安装与配置 1.MKL库的安装与配置 2.代码测试 总结 前言 在用C/C++编写模型预测控制算法(MPC)的代码时候,由于预测步长和控制步长的设置较 ...

  2. Linux下添加eigen头文件,移植Eigen库到SylixOS下及使用方法

    1. 开发环境 宿主机:Windows 7 集成开发环境:Real-Evo IDE 3.5.3 虚拟机:Ubuntu 目标机:x86 2. Eigen简介 Eigen是一个提供了线性代数.矩阵.向量操 ...

  3. windows环境下使用clion引入eigen库并实现一个小demo

    本文仅作个人记录用,之前未接触过C++,也没有使用过clion和cmake,不喜勿喷. 首先下载clion,mingw并配置相关环境,安装cmake,这部分比较简单,没有遇到什么问题. 接下来新建一个 ...

  4. Win10环境下用CMake编译项目遇到与Eigen库相关的问题

    原作者提供的CMakeLists.txt中 Eigen库是头文件库,不用编译也可以使用.如果Win系统的环境变量没有设置,也没有编译Eigen,find_package语句会找不到Eigen. fin ...

  5. Eigen库的基本使用说明

    Eigen是基于线性代数的C ++模板库,主要用于矩阵,向量,数值求解器和相关算法.Ceres,G2O等项目均是基于Eigen. 1.支持整数.浮点数.复数,使用模板编程,可以为特殊的数据结构提供矩阵 ...

  6. Eigen库对齐问题:declspec(align('16')) 的形参将不被对齐

    一:错误提示:error C2719: '_Val': formal parameter with __declspec(align('16')) won't be aligned 英文提示:erro ...

  7. 0.前言 与 Eigen库的使用整理

    [C++ 基于Eigen库实现CRN前向推理] 前言:背景 与 Eigen库的使用整理 前言:(Eigen库使用记录) 第一部分:WavFile.class (实现读取wav/pcm,实现STFT) ...

  8. 关于C++中Eigen库效率提升的思考

    目录 引言 一.什么是Eigen? 二.使用步骤 1.引入库 2.建立矩阵 3.基本操作 三.具体的例子--矩阵乘法 1.Eigen库 2.GPU并行计算 总结 可能的方案 引言 在处理矩阵运算上,各 ...

  9. android流程点击开机键熄屏,一种基于android系统的灭屏状态下指纹解锁加速亮屏方法与流程...

    本发明涉及android系统解锁显示方法,尤其涉及一种基于android系统的灭屏状态下指纹解锁加速亮屏方法. 背景技术: 目前,随着指纹技术越来越普及,很多android系统设备都带有指纹外设,特别 ...

最新文章

  1. 手把手教你 Socket 通信(TCP/IP)
  2. 图灵奖颁给超算跑分开创者!MatlabSciPy都跟他有关:“我眼中一切都是线性代数”...
  3. SpringMVC-自定义转换器
  4. 计算机网络实验中S1是啥意思,某计算机A需要访问域名www.yy.com,它首先向本域DNS服务器S1查询,.._简答题试题答案...
  5. 【object-c基础】Object-c基础之三:面对对象开发@interface,@implementation
  6. android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
  7. ulp通信_Java Math类ulp()方法及示例
  8. Windows和Mac os x一样不安全?!
  9. 【312天】我爱刷题系列071(2017.12.14)
  10. LEADTOOLS v19试用版安装指南图文详解
  11. pandas表字段为空用其余表替换
  12. Python unittest基本框架组成(1)
  13. 如何给硬盘分1T整数的空间
  14. 存储服务器内的温度检测信号线 用线,常用的3线和4线电阻温度检测器介绍
  15. SAP WM + PDA项目 来料入库流程
  16. 选择排序的Java代码实现(超详细代码)
  17. 如何改手机b站html,教你如何手机提取B站视频内音频
  18. c语言用光标键控制图形,C语言图形设计参考资料.ppt
  19. 【华录杯】深度学习吸烟打电话识别
  20. CentOS7安装 SGE

热门文章

  1. java天平数据,java RS232串口通讯(电子天平数据抓取)
  2. 2023最新西瓜小清新UI币圈完美源码版+对接支付/免公众号
  3. 802.11技术解析
  4. 毕业论文怎么用WPS生成目录(太菜了之前都是手动一点点添加)
  5. JSP页面中最常使用的脚本元素
  6. RocketMQ锦集:Linux环境下载安装RocketMQ详解| Error NamesrvStartup| rocketmq-store| rocketmq-broker |OutOfMemory
  7. python pexpect_Python Pexpect库的简单使用方法
  8. mac上迅雷下载不动的解决---上海003
  9. 使用ps临摹个人网站
  10. JavaScript 时间与日期处理实战:你肯定被坑过