在做线性变换上经常要用到NXN的矩阵求逆。在CUDA用的是高斯消元比较适合并行计算。

下面是3X3Cuda实现矩阵求逆的Device函数,也就是说可以直接写到你的kernel函数上去。当然也可以是任何NXN矩阵

另外时间上,测试过6X6的矩阵用时在0.016ms,所以可以说基本不耗时。以后会把速度的梯度测试和精度测试结果都放上去。

*   1   2   1   |  1  0   0                  1   0   0  |  -2.5   1.5   0.5
*   2   3   1   |  0  1   0       =>      0   1   0  |   1.5  -0.5  -0.5
*   1   1   2   |  0  0   1                  0   0   1  |   0.5  -0.5   0.5

*   输入矩阵       E                               E             逆矩阵

//3X3InvMatrix  MX --> MXI

//input MX[3][3]
 //.............
 //.............
 
 __shared__ double MXI[3][3];
 
 int isx = threadIdx.x;
 int isy = threadIdx.y;
 double tmpIn;
 double tmpInv;
  //initialize E
 if(isx == isy)
 MXI[isy][isx] = 1;
 else
 MXI[isy][isx] = 0;
 
 for (int i = 0; i < 3; i++)
 {
    if (i == isy && isx < 3 && isy < 3)
    {
       //消除对角线上的元素(主元)为1
       tmpIn = MX[i][i];
       MX[i][isx] /= tmpIn;
       MXI[i][isx] /= tmpIn;
    }
   __syncthreads();
   if (i != isy && isx < 3 && isy < 3)
   {
     //将主元所在列的元素化为0 所在行的元素同时变化
      tmpInv = MX[isy][i];
      MX[isy][isx] -= tmpInv * MX[i][isx];
      MXI[isy][isx] -= tmpInv * MXI[i][isx];
   }
   __syncthreads();
 }

当然还可以将速度提一倍,就是开更多的线程和资源。然后MX 和 MXI一起算

贤者之路,Cuda block内部矩阵求逆,mxm矩阵 复杂度为O(m)相关推荐

  1. c语言block内部的实现原理,iOS中block变量捕获原理详析

    Block概述 Block它是C语言级别和运行时方面的一个特征.Block封装了一段代码逻辑,也用{}括起,和标准C语言中的函数/函数指针很相似,此外就是blokc能够对定义环境中的变量可以引用到.这 ...

  2. hdu 2243 考研路茫茫——单词情结(AC自动+矩阵)

    考研路茫茫--单词情结 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. 矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析)

    矩阵求逆操作的复杂度分析 逆矩阵的复杂度分析 1 背景 之前写过一篇关于矩阵复杂度分析的文章,没有想到阅读人数那么多.对于IT相关人士来说,从代码层次再结合基本数学知识,就能够很好地理解矩阵的复杂度如 ...

  4. 矩阵求逆,矩阵转置,矩阵相乘

    矩阵求逆,矩阵转置,矩阵相乘 矩阵求逆用的高斯消元 #include <bits/stdc++.h>using namespace std;const double eps = 1e-8; ...

  5. 贤者之路,cuda版本convertto实现(与OPENCV 3.4 CPU版本数值一致)

    [引言]: 将一个float32精度的矩阵砍到uchar精度,每个库都会根据自己算法目标类型做一些加速的优化从而导致结果不一样,比如在OpenCV3.4 cpu版本的convertto中, 1.5f的 ...

  6. 贤者之路, Caffe转TensorRT

    [引]将Caffe转TensorRT的时候,有很多自己设计的接口TensorRT库本身不支持.我们需要自己创建Plugin,本文介绍TensorRT的创建,如何自定义Plugin,和快速书写cuda函 ...

  7. 贤者之路,Tensorrt的int8 calibration创建

    [INT8 Calibration] 无论哪块GPU计算板卡都能够支持Int8的加速,但需要事先生成 calibration文件,下面是.h .cpp分别继承IInt8EntropyCalibrato ...

  8. hdu_2243_考研路茫茫——单词情结(AC自动机+矩阵)

    题目链接:hdu_2243_考研路茫茫--单词情结 题意: 让你求包含这些模式串并且长度不小于L的单词种类 题解: 这题是poj2788的升级版,没做过的强烈建议先做那题. 我们用poj2778的方法 ...

  9. Python——矩阵求逆、矩阵的转置

    一.前提介绍 设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩B,使得: AB=BA=E. 则我们称B是A的逆矩阵,而A则被称为可逆矩阵.其中,E为单位矩阵. 数学上求解方法可以通过:初等变 ...

最新文章

  1. 部分网站公开数据的汇总(2)
  2. 【机器学习】异常检测算法之(HBOS)-Histogram-based Outlier Score
  3. java incompatible types: int cannot be converted to java.lang.Long
  4. JavaScript-概述
  5. 发现Chrome小恐龙彩蛋的第n+1个使用者
  6. 欧姆龙PLC的FinsTCP协议
  7. 在运维日常工作过程中遇到的一些问题,以及最终的解决方法!!(持续更新帖)
  8. 牛X,网易开源了这个项目后,结果被山寨出了无数个网易云音乐APP,网友炸锅了!...
  9. 计算机硬件软件的英语,计算机软件和硬件,PC computer software and hardware,音标,读音,翻译,英文例句,英语词典...
  10. 如何利用工具低成本构建腾讯云灾备方案?
  11. 计算机如何更新目录,wps怎么更新目录【具体阐明】
  12. 什么是蜘蛛统计 有什么作用?
  13. opencv 识别长方形_使用OpenCV检测图像中的矩形
  14. /etc/passwd
  15. 监控摄像机如何连接到手机 手机APP远程连接常用方法
  16. 模拟电路----电压跟随器与功率放大器(转)
  17. 【linux中进程相关的概念分析与总结】
  18. Java编写的简易计算器
  19. 汉诺塔问题(C++)
  20. 如何开展云平台密评工作

热门文章

  1. 学习笔记——FPGA与CPLD的联系与区别
  2. 麒麟操作系统基于linux哪个版本_如今的国产操作系统deepin和优麒麟哪个更好?...
  3. Linux内核超级装备eBPF技术详细研究
  4. 041孙悟空第三人称视角
  5. 导读:生活中的设计模式——启程之前,请不要错过我
  6. app2sd 与 A2SD+
  7. Java毕设项目-商城管理系统-基于J2EE/SSM化妆品商城系统的设计与实现
  8. python疲劳检测代码_【君奉天|开发日记】疲劳驾驶检测
  9. Python程序设计基础(第2版)by董付国 习题答案
  10. 串起珍珠的链条——记腾讯SOSO团队