Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CUDA中非方矩阵的计算机逆矩阵_Cuda_Gpu_Matrix Inverse - Fatal编程技术网

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

CUDA中非方矩阵的计算机逆矩阵,cuda,gpu,matrix-inverse,Cuda,Gpu,Matrix Inverse,我试图在CUDA中找到非方矩阵的Moore–Penrose伪逆 今天,我使用以下代码作为Moore-Penrose伪逆的实现 问题是,我试图找到的伪逆的非平方矩阵大小相当大,因此我想通过使用CUDA利用GPU的能力来解决它。 我基本上是寻找这个代码的CUDA版本 public static Matrix PseudoInverse(this Matrix M) { Svd<double> D = M.Svd(true); Matrix W =

我试图在CUDA中找到非方矩阵的Moore–Penrose伪逆

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

问题是,我试图找到的伪逆的非平方矩阵大小相当大,因此我想通过使用CUDA利用GPU的能力来解决它。

我基本上是寻找这个代码的CUDA版本

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();

    }
公共静态矩阵伪逆(此矩阵M)
{
Svd=M.Svd(真);
矩阵W=(矩阵)D.W;
向量s=(向量)D.s;
//W的第一个元素具有最大值。
双公差=精度.EpsilonOf(2)*数学最大值(M.RowCount,M.ColumnCount)*W[0,0];
对于(int i=0;i
  • 是否有人对CUDA中的Moore–Penrose伪逆实现有任何指示。
任何帮助都将不胜感激


另外,我想知道还有什么其他方法可以使用可部署的GPU解决非方矩阵的Moore–Penrose伪逆

好的,我使用CUDA的SVD函数实现了Moore-Penrose伪Invese

唯一的问题是CUDA版本的SVD比原生MKL版本慢得多!在求解1000 x 1000的矩阵大小时,CUDA的SVD函数几乎比MKL library的SVD函数慢4倍


在旁注中,我看到有人声称CULA过去速度快得多,但现在已经不受支持了。CULA仍在商业上提供,但每年的许可成本约为2.5万英镑。

该代码不计算矩阵逆。它计算摩尔-彭罗斯伪逆。对于非方矩阵,不存在逆矩阵。根据定义,它们并不存在。但是,无论如何,因为这个问题是离题的,我已经投票决定结束它。这个问题是离题的,永远不应该被重新讨论。你能解释一下为什么这个问题不应该出现在StackOverflow中吗?