简单实现矩阵基本运算C++版本

3 篇文章 0 订阅

 

之前一直感觉使用Eigen库(一个C++的矩阵运算库)在代码的可读性上面很强,但是速度上还是有待提高

(之前尝试过最优化求解问题 在计算数量不大的矩阵 (例如: 20*8 的矩阵乘以 8*30的矩阵) Eigen的运算速度没有想象中的快 而且是慢一个数量级.. 使用数组当做矩阵计算时的运算时间仅仅1秒左右而使用Eigen超过了10秒..)

 

之后尝试使用CUDA 加速矩阵运算。
研究了很长时间看了好几本CUDA的书和PDF使用该文档

(之前有相关博文 当时什么都不懂 按照自己的思路敲了点儿代码 之后看了相关书籍 发现好多基础运算CUDA都有实现 自己还瞎捉摸的瞎敲了一波代码实现基本功能.. 继而也没好意思更新博文很是惭愧 )

但是最终还是没有得到一个好的办法加速矩阵运算

(测试过 10000* 5000或者更大数量的矩阵运算 发现CUDA的运算速度惊人 但是相对几十*几百的矩阵 CUDA的运算速度 目前感觉没有Eigen计算速度快.. )

 

苦恼之余,近期想着自己写个矩阵运算类尝试矩阵计算 看看运算速度怎么样。

 

大体实现

    Mat Vd2D(100 * 2, 1);

    Mat ms_BS2D_really(100 * 2, 76);

    Mat ms_Weight(76, 1);

    Mat mt_result(1, 1);

    Mat Vd3D(100 * 2, 1);

    Mat ms_BS3D_really(100 * 2, 76);

    for (int time = 0; time < 50000; time++) {

        mt_result = (Vd2D -(ms_BS2D_really * ms_Weight)).transpose() * (Vd2D - (ms_BS2D_really * ms_Weight)) * 1.0 +

            (Vd3D - (ms_BS3D_really * ms_Weight)).transpose() * (Vd3D -(ms_BS3D_really * ms_Weight)) * 3.0;

        double everytime = mt_result(0, 0);

        sum += everytime;

    }

 

于是发现得到的结果对Eigen又是肃然起敬..
运算速度在release下

Eigen的运算速度是自己的4~5倍..

 


 

下面是本人的矩阵类代码有兴趣的朋友可以了解一下

 

代码传送门

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值