Я ищу способ найти псевдоинверсию матрицы, чтобы ее можно было сделать на графическом процессоре. SVD/QR трудно распараллелить и не поддерживаются, но графический процессор MATLAB, но похоже, что LU, хотя и может работать параллельно, не поддерживается графическим процессором MATLAB. Я сравнивал производительность и, кажется, медленнее, чем работа на одном ядре процессора.Matrix Inversion GPU MATLAB
Я ищу псевдо-обратный (или даже обычный обратный для квадратных матриц), который я могу использовать. Согласно Matlab, использование mldivide() выполняет исключение Gauss, которое применимо для графических процессоров.
Я пробовал использовать A \ I, но, к сожалению, он не работает эффективно на графических процессорах.
Кто-нибудь может направить меня на оптимизированный код для параллельного исключения LU или гаусса?
Я слышал о пакете MAGMA, но, похоже, много работы по установке и компиляции, и мне действительно нужна эта простая вещь.
Код на C++ также приветствуется.
Спасибо, Gil
Ваш вопрос звучит запутанным ... 'A \ eye (size (A, 1))' в общем случае не Moore Penrose псевдо-обратный к 'A'; кроме того, MATLAB поддерживает SVD на gpu. Чтобы дать вам разумный ответ, нам понадобится дополнительная информация: размер, ранг и другие свойства 'A', и именно то, к какому типу обобщенного обратного вам интересны. Обобщенные инверсии редко используются в линейной алгебре: проблема, которую вы пытаетесь решить путем вычисления обобщенного обратного к 'A', также может быть полезна. –
afaik, MATLAB использует пакет MAGMA для некоторых своих операций на графическом процессоре. Ниже приведен список функций, поддерживаемых 'gpuArray': http://www.mathworks.com/help/distcomp/using-gpuarray.html#bsloua3-1 – Amro
@Gil:' pinv (A) '[аналогичен ] (https://en.wikipedia.org/wiki/Moore-Penrose_pseudoinverse#Singular_value_decomposition_.28SVD.29) 'V * diag (1./diag (S)) * U'' где' [U, S, V] = svd (A) '. Но, как было сказано, вам редко нужно обратное к самой матрице, 'mldivide' /' mrdivide' обычно используют то, что вы используете. – Amro