目录

  • 引言
  • 一、什么是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函数,只需要在使用的时候配置线程即可。但也有一些问题需要解决:

  1. 跨文件访问的问题:通常上传到服务器的是一个.cu文件,如何上传整个项目需要下功夫。
  2. 将需要的方法封装为kernel函数:难点。
  3. 放弃Eigen的优越性:Eigen作为一个强大的库,自有其优越的地方,完全放弃是否可取?

以上仅作为一个Eigen初学者的个人理解,如有错误,敬请指出。

关于C++中Eigen库效率提升的思考相关推荐

  1. web开发中的 emmet 效率提升工具

    web开发中的 emmet 效率提升工具 可以用来快速生成html 代码. 并且给各种IDE.编辑器提供了插件支持,sublime ,webstorm等. 如在webstorm中安装好emmet之后, ...

  2. Eigen:C++中Eigen库的安装与学习

    1.下载地址: http://eigen.tuxfamily.org/index.php?title=Main_Page 进入上边官方网站进行下载如下所示: 找到自己需要的版本下载即可,我下载的是3. ...

  3. 【小技巧】深度学习中的那些效率提升利器(附资源)

    本文建议阅读时间 12 min 深度学习炼丹,当然少不了 GPU 和 Linux 系统了,部分朋友没有 GPU 的话只能租用远程服务器来训练,这样就少不了 Xshell 这样一款利器了,以下,我们就来 ...

  4. MIT新研究:过去80年,算法效率提升到底有多快?

    来源:MIT,新智元 编辑:David [导读]随着摩尔定律走向终结,靠提升计算机硬件性能可能越发难以满足海量计算的需要,未来的解决之道在于提升算法的效率.MIT的这篇新论文总结了过去80年来,算法效 ...

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

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

  6. python xlwings追加数据_大数据分析Python库xlwings提升Excel工作效率教程

    原标题:大数据分析Python库xlwings提升Excel工作效率教程 Excel在当今的企业中非常非常普遍.在AAA教育,我们通常建议出于很多原因使用代码,并且我们的许多数据科学课程旨在教授数据分 ...

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

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

  8. 旋转矩阵中6保6_40岁阿姨发明新型手推车,可以360度旋转,干活效率提升6倍

    科技,其实很有趣!大家好,欢迎收看本期木易机械 40岁阿姨发明新型手推车,能够360度旋转,干活效率提升6倍 科技的发展是我们有目共睹的,不仅是那些震惊世界的发明,就在我们的日常生活中,也有很多的小发 ...

  9. ROS中使用Eigen库[不定期更新]

    前期说明 ROS中的数据操作需要线性代数,Eigen库是C++中的线性代数计算库. Eigen库独立于ROS,但是在ROS中可以使用. Eigen库可以参见http://eigen.tuxfamily ...

最新文章

  1. Java使用SFTP和FTP两种连接服务器的方式实现对文件的上传下载
  2. 全国计算机技术与软件专业技术资格(水平)考试基础知识
  3. unity webgl读写txt文件_python Files文件读写操作
  4. phpmyadmin登陆错误:The requested URL /phpmyadmin was not found on this serve
  5. CSDN博客如何调整文字的字体、大小、颜色
  6. 编译加速 remote cache
  7. java消除整型数组中重复的元素,排序后输出新数组
  8. 【数学优化】学习知识点
  9. adb 连接时候不弹出授权对话框
  10. Matrix Cookbook 公式推导
  11. cvPyrUp() cvPyrDown() 图像金字塔
  12. 上海万科地产档案室—智慧管理项目
  13. 谷歌浏览器应用翻译插件,
  14. 百度UEditor编辑器压缩(缩放)图片只压缩jpg格式的解决方法
  15. 美团校招笔试题-算法-python
  16. ultrascale和arm区别_ZYNQ UltraScale+ MPSoc FPGA初学笔记
  17. 初学盲打,免费,免安装,高颜值的在线打字练习网站
  18. 两条线段的交点 交点
  19. Cookie同域,跨域单点登录
  20. jenv add “ln No such file or directory“解决办法

热门文章

  1. win10无法开启适用于linux的windows的子系统,重启后一直撤销申请
  2. ip_forward参数对Linux内核转发影响分析
  3. arris sbr-ac1900p/sbr-ac3200p梅林固件
  4. Oracle数据库学习的第二天(Oracle的简单操作)
  5. 华为防火墙的策略路由
  6. 帮转|腾讯云市场新版上线:大不同
  7. 关于Office 365 显示语言的设置(注册开通时的语言选择及注册开通后的语言显示修改)
  8. Xilinx ZynqMP Mali-400 MP2
  9. 快速矩阵乘法的研究——下
  10. 中国地区三级联动下拉菜单