CUDA中非矩形矩阵的计算机逆矩阵

问题描述:

我正在尝试在CUDA中找到Moore-Penrose矩阵中的非矩形矩阵。CUDA中非矩形矩阵的计算机逆矩阵

今天,我使用下面的代码作为Moore-Penrose伪逆的实现。

https://github.com/mathnet/mathnet-numerics/blob/75c3b9fbbfd3fa2def6780179006bde7ca343b08/src/Numerics/LinearAlgebra/Complex/Matrix.cs

的问题是,我想找到伪逆非方阵的大小是相当大的,所以我想解决它使用CUDA来利用GPU的强大功能。

我基本上找这个代码

public static Matrix PseudoInverse(this Matrix M) 
    { 
     Svd<double> D = M.Svd(true); 
     Matrix W = (Matrix)D.W; 
     Vector s = (Vector)D.S; 


     // The first element of W has the maximum value. 
     double tolerance = Precision.EpsilonOf(2) * Math.Max(M.RowCount, M.ColumnCount) * W[0, 0]; 

     for (int i = 0; i < s.Count; i++) 
     { 
      if (s[i] < tolerance) 
       s[i] = 0; 
      else 
       s[i] = 1/s[i]; 
     } 
     W.SetDiagonal(s); 

     // (U * W * VT)T is equivalent with V * WT * UT 
     return (Matrix)(D.U * W * D.VT).Transpose(); 

    } 
  • 是否有人有对CUDA穆尔 - 彭罗斯伪逆执行任何指针的CUDA版本。

任何帮助将不胜感激。

P.S.我想知道使用可部署的GPU来解决Moore-Penrose伪非矩阵矩阵的其他方法。

+1

该代码不计算矩阵逆。它计算一个Moore-Penrose伪逆。没有这样的东西作为非矩阵的逆矩阵。根据定义,它们不存在。但是,无论因为这个问题是否是[SO]的话题,我已经投票决定关闭它 – talonmies

+0

http://docs.nvidia.com/cuda/cusolver/index.html#cuds-lt-t-gt-gesvd – tera

+1

这个问题是[SO]的话题,不应该重新开放。 – talonmies

好吧,我没有使用CUDA

http://docs.nvidia.com/cuda/cusolver/#svd-example1

唯一的问题是,SVD的CUDA版本比原始版本MKL慢得多的SVD功能实现穆尔 - 彭罗斯pseudoinvese!在求解1000 x 1000的矩阵大小时,CUDA的SVD函数比MKL函数库的SVD函数慢4倍。

在附注中,我看到有人声称CULA过去速度更快但不再受支持。 CULA仍在商业上提供,但每年的授权费用约为25K。