关于C++中Eigen库效率提升的思考
目录
- 引言
- 一、什么是Eigen?
- 二、使用步骤
- 1.引入库
- 2.建立矩阵
- 3.基本操作
- 三、具体的例子--矩阵乘法
- 1.Eigen库
- 2.GPU并行计算
- 总结
- 可能的方案
引言
在处理矩阵运算上,各种语言都有了自己的处理办法,例如:Python中的numpy库以及C++中的eigen库等。本文主要思考在C++语言中,如何采用GPU加速计算,进一步提高矩阵计算效率。
一、什么是Eigen?
Eigen本身是一个线性代数库,在处理矩阵运算上非常有优势,类似于Python中的numpy。不同的是,Eigen是基于C++模板的。
二、使用步骤
1.引入库
// 基本包括所需要的所有函数
#include <Eigen/Dense>
2.建立矩阵
Matrix<double, 3, 3> A; // 表示A是一个三行三列的double矩阵
A << 1, 2, 3, 4, 5, 6, 7, 8, 9;VectorXd vec1(3); // 动态double列向量
vec2 << 1, 2, 3;RowVectorXd vec2(4); // 动态double行向量
vec2 << 1, 4, 9, 16;
3.基本操作
cout<< A.rows(); // 行数:3
cout<< A.cols(); // 列数:3
cout<< A(3); // 第4个元素,按列存储:5
cout<< A(1, 2); // 第2行第3列的元素:6
三、具体的例子–矩阵乘法
1.Eigen库
#include <Eigen/Dense>
#include<iostream>
#include<ctime>using namespace std;
using namespace Eigen;
int main()
{clock_t start, end;MatrixXd M, N;M.setRandom(1024, 1024);N.setRandom(1024, 1024);MatrixXd result(1024, 1024);start = clock();result=M * N;end = clock();double result1=result.sum();cout<<"the sum of matrix is : "<<endl <<result1<<endl;cout<<"the total time is : "<<(double)(end - start) / CLOCKS_PER_SEC<<"s."<<endl;return 0;
}
运行结果:
该图为Eigen计算结果,由于编译器以及设备的原因,显示时间慢了很多,如果是同一设备则应当同GPU时间相差没有这么大。
2.GPU并行计算
此图为GPU并行计算矩阵相乘所需要的时间,两个矩阵的大小均为1024*1024, 数据类型为float。注:由于服务器性能较好,故得出的结果可能较普通机器快一些。
总结
根据Eigen和GPU并行计算的时间,可以看出差距还是存在的(也有可能是我没有理解到Eigen的精髓,代码写的不对),但比起普通的矩阵乘法明显快了几倍。如果数据量较小的话,二者所需要的时间则会更加接近,因此改进的必要性需要考虑。同时,由于Eigen库中方法是封装起来的,使用者只能够调用,改进的难度较大。
可能的方案
由于Eigen的计算效率确实比GPU低,如果一定要使用GPU加速的话。我认为可行的方法是放弃Eigen,将需要用到的操作自行实现,封装为一个个的kernel函数,只需要在使用的时候配置线程即可。但也有一些问题需要解决:
- 跨文件访问的问题:通常上传到服务器的是一个.cu文件,如何上传整个项目需要下功夫。
- 将需要的方法封装为kernel函数:难点。
- 放弃Eigen的优越性:Eigen作为一个强大的库,自有其优越的地方,完全放弃是否可取?
以上仅作为一个Eigen初学者的个人理解,如有错误,敬请指出。
关于C++中Eigen库效率提升的思考相关推荐
- web开发中的 emmet 效率提升工具
web开发中的 emmet 效率提升工具 可以用来快速生成html 代码. 并且给各种IDE.编辑器提供了插件支持,sublime ,webstorm等. 如在webstorm中安装好emmet之后, ...
- Eigen:C++中Eigen库的安装与学习
1.下载地址: http://eigen.tuxfamily.org/index.php?title=Main_Page 进入上边官方网站进行下载如下所示: 找到自己需要的版本下载即可,我下载的是3. ...
- 【小技巧】深度学习中的那些效率提升利器(附资源)
本文建议阅读时间 12 min 深度学习炼丹,当然少不了 GPU 和 Linux 系统了,部分朋友没有 GPU 的话只能租用远程服务器来训练,这样就少不了 Xshell 这样一款利器了,以下,我们就来 ...
- MIT新研究:过去80年,算法效率提升到底有多快?
来源:MIT,新智元 编辑:David [导读]随着摩尔定律走向终结,靠提升计算机硬件性能可能越发难以满足海量计算的需要,未来的解决之道在于提升算法的效率.MIT的这篇新论文总结了过去80年来,算法效 ...
- Win10环境下用CMake编译项目遇到与Eigen库相关的问题
原作者提供的CMakeLists.txt中 Eigen库是头文件库,不用编译也可以使用.如果Win系统的环境变量没有设置,也没有编译Eigen,find_package语句会找不到Eigen. fin ...
- python xlwings追加数据_大数据分析Python库xlwings提升Excel工作效率教程
原标题:大数据分析Python库xlwings提升Excel工作效率教程 Excel在当今的企业中非常非常普遍.在AAA教育,我们通常建议出于很多原因使用代码,并且我们的许多数据科学课程旨在教授数据分 ...
- Linux下MKL库的安装部署与使用,并利用cmake编译器调用MKL库去提升eigen库的计算速度
文章目录 前言 一.MKL库的下载 二.MKL库的安装与配置 1.MKL库的安装与配置 2.代码测试 总结 前言 在用C/C++编写模型预测控制算法(MPC)的代码时候,由于预测步长和控制步长的设置较 ...
- 旋转矩阵中6保6_40岁阿姨发明新型手推车,可以360度旋转,干活效率提升6倍
科技,其实很有趣!大家好,欢迎收看本期木易机械 40岁阿姨发明新型手推车,能够360度旋转,干活效率提升6倍 科技的发展是我们有目共睹的,不仅是那些震惊世界的发明,就在我们的日常生活中,也有很多的小发 ...
- ROS中使用Eigen库[不定期更新]
前期说明 ROS中的数据操作需要线性代数,Eigen库是C++中的线性代数计算库. Eigen库独立于ROS,但是在ROS中可以使用. Eigen库可以参见http://eigen.tuxfamily ...
最新文章
- Java使用SFTP和FTP两种连接服务器的方式实现对文件的上传下载
- 全国计算机技术与软件专业技术资格(水平)考试基础知识
- unity webgl读写txt文件_python Files文件读写操作
- phpmyadmin登陆错误:The requested URL /phpmyadmin was not found on this serve
- CSDN博客如何调整文字的字体、大小、颜色
- 编译加速 remote cache
- java消除整型数组中重复的元素,排序后输出新数组
- 【数学优化】学习知识点
- adb 连接时候不弹出授权对话框
- Matrix Cookbook 公式推导
- cvPyrUp() cvPyrDown() 图像金字塔
- 上海万科地产档案室—智慧管理项目
- 谷歌浏览器应用翻译插件,
- 百度UEditor编辑器压缩(缩放)图片只压缩jpg格式的解决方法
- 美团校招笔试题-算法-python
- ultrascale和arm区别_ZYNQ UltraScale+ MPSoc FPGA初学笔记
- 初学盲打,免费,免安装,高颜值的在线打字练习网站
- 两条线段的交点 交点
- Cookie同域,跨域单点登录
- jenv add “ln No such file or directory“解决办法