2017-02-16 7 views
0

Я пытаюсь найти псевдоверсию Мура-Пенроуза не квадратной матрицы в CUDA.Компьютерная обратная матрица неквадратичной матрицы в CUDA

Сегодня я использую следующий код в качестве реализации псевдореверса Мура-Пенроуза.

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

Проблема заключается в том, что неквадрат размер матрицы Я пытаюсь найти Псевдообращение довольно большой, поэтому я хотел бы решить при помощи 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(); 

    } 
  • ли кто-нибудь имеет какие-либо указатели на реализацию псевдообратного Мура-Пенроуза в CUDA.

Любая помощь будет принята с благодарностью.

P.S. Я хотел бы знать, какие другие способы могут быть там, чтобы разрешить псевдоверсию Мура-Пенроуза не квадратной матрицы с использованием GPU, который можно использовать.

+1

Этот код не вычисляет обратную матрицу. Он вычисляет псевдоверсию Мура-Пенроуза. Нет такой вещи, как обратная матрица для неквадратной матрицы. По определению они не существуют. Но, независимо от того, потому что этот вопрос вне темы для [SO], и я проголосовал за его закрытие – talonmies

+0

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

+1

Этот вопрос вне темы для [SO] и никогда не должен был быть вновь открыт. – talonmies

ответ

-1

Хорошо, я осуществлении pseudoinvese Мур-Пенроуза с помощью функции SVD из CUDA

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

Единственная проблема заключается в том, что CUDA версия СВД гораздо медленнее, чем родной версии MKL! При решении размера матрицы 1000 x 1000 функция SVD CUDA почти в 4 раза медленнее, чем функция SVD библиотеки MKL.

На стороне примечания я видел, как люди утверждали, что CULA был намного быстрее, но больше не поддерживается. CULA по-прежнему предоставляется на коммерческой основе, но лицензия стоит около 25 тыс. В год.

Смежные вопросы