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 文件,测试用的。
#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加速相关推荐
- Linux下MKL库的安装部署与使用,并利用cmake编译器调用MKL库去提升eigen库的计算速度
文章目录 前言 一.MKL库的下载 二.MKL库的安装与配置 1.MKL库的安装与配置 2.代码测试 总结 前言 在用C/C++编写模型预测控制算法(MPC)的代码时候,由于预测步长和控制步长的设置较 ...
- Linux下添加eigen头文件,移植Eigen库到SylixOS下及使用方法
1. 开发环境 宿主机:Windows 7 集成开发环境:Real-Evo IDE 3.5.3 虚拟机:Ubuntu 目标机:x86 2. Eigen简介 Eigen是一个提供了线性代数.矩阵.向量操 ...
- windows环境下使用clion引入eigen库并实现一个小demo
本文仅作个人记录用,之前未接触过C++,也没有使用过clion和cmake,不喜勿喷. 首先下载clion,mingw并配置相关环境,安装cmake,这部分比较简单,没有遇到什么问题. 接下来新建一个 ...
- Win10环境下用CMake编译项目遇到与Eigen库相关的问题
原作者提供的CMakeLists.txt中 Eigen库是头文件库,不用编译也可以使用.如果Win系统的环境变量没有设置,也没有编译Eigen,find_package语句会找不到Eigen. fin ...
- Eigen库的基本使用说明
Eigen是基于线性代数的C ++模板库,主要用于矩阵,向量,数值求解器和相关算法.Ceres,G2O等项目均是基于Eigen. 1.支持整数.浮点数.复数,使用模板编程,可以为特殊的数据结构提供矩阵 ...
- Eigen库对齐问题:declspec(align('16')) 的形参将不被对齐
一:错误提示:error C2719: '_Val': formal parameter with __declspec(align('16')) won't be aligned 英文提示:erro ...
- 0.前言 与 Eigen库的使用整理
[C++ 基于Eigen库实现CRN前向推理] 前言:背景 与 Eigen库的使用整理 前言:(Eigen库使用记录) 第一部分:WavFile.class (实现读取wav/pcm,实现STFT) ...
- 关于C++中Eigen库效率提升的思考
目录 引言 一.什么是Eigen? 二.使用步骤 1.引入库 2.建立矩阵 3.基本操作 三.具体的例子--矩阵乘法 1.Eigen库 2.GPU并行计算 总结 可能的方案 引言 在处理矩阵运算上,各 ...
- android流程点击开机键熄屏,一种基于android系统的灭屏状态下指纹解锁加速亮屏方法与流程...
本发明涉及android系统解锁显示方法,尤其涉及一种基于android系统的灭屏状态下指纹解锁加速亮屏方法. 背景技术: 目前,随着指纹技术越来越普及,很多android系统设备都带有指纹外设,特别 ...
最新文章
- 手把手教你 Socket 通信(TCP/IP)
- 图灵奖颁给超算跑分开创者!MatlabSciPy都跟他有关:“我眼中一切都是线性代数”...
- SpringMVC-自定义转换器
- 计算机网络实验中S1是啥意思,某计算机A需要访问域名www.yy.com,它首先向本域DNS服务器S1查询,.._简答题试题答案...
- 【object-c基础】Object-c基础之三:面对对象开发@interface,@implementation
- android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
- ulp通信_Java Math类ulp()方法及示例
- Windows和Mac os x一样不安全?!
- 【312天】我爱刷题系列071(2017.12.14)
- LEADTOOLS v19试用版安装指南图文详解
- pandas表字段为空用其余表替换
- Python unittest基本框架组成(1)
- 如何给硬盘分1T整数的空间
- 存储服务器内的温度检测信号线 用线,常用的3线和4线电阻温度检测器介绍
- SAP WM + PDA项目 来料入库流程
- 选择排序的Java代码实现(超详细代码)
- 如何改手机b站html,教你如何手机提取B站视频内音频
- c语言用光标键控制图形,C语言图形设计参考资料.ppt
- 【华录杯】深度学习吸烟打电话识别
- CentOS7安装 SGE
热门文章
- java天平数据,java RS232串口通讯(电子天平数据抓取)
- 2023最新西瓜小清新UI币圈完美源码版+对接支付/免公众号
- 802.11技术解析
- 毕业论文怎么用WPS生成目录(太菜了之前都是手动一点点添加)
- JSP页面中最常使用的脚本元素
- RocketMQ锦集:Linux环境下载安装RocketMQ详解| Error NamesrvStartup| rocketmq-store| rocketmq-broker |OutOfMemory
- python pexpect_Python Pexpect库的简单使用方法
- mac上迅雷下载不动的解决---上海003
- 使用ps临摹个人网站
- JavaScript 时间与日期处理实战:你肯定被坑过