2013-06-22 7 views
1

Я ищу способ найти псевдоинверсию матрицы, чтобы ее можно было сделать на графическом процессоре. SVD/QR трудно распараллелить и не поддерживаются, но графический процессор MATLAB, но похоже, что LU, хотя и может работать параллельно, не поддерживается графическим процессором MATLAB. Я сравнивал производительность и, кажется, медленнее, чем работа на одном ядре процессора.Matrix Inversion GPU MATLAB

Я ищу псевдо-обратный (или даже обычный обратный для квадратных матриц), который я могу использовать. Согласно Matlab, использование mldivide() выполняет исключение Gauss, которое применимо для графических процессоров.

Я пробовал использовать A \ I, но, к сожалению, он не работает эффективно на графических процессорах.

Кто-нибудь может направить меня на оптимизированный код для параллельного исключения LU или гаусса?

Я слышал о пакете MAGMA, но, похоже, много работы по установке и компиляции, и мне действительно нужна эта простая вещь.

Код на C++ также приветствуется.

Спасибо, Gil

+3

Ваш вопрос звучит запутанным ... 'A \ eye (size (A, 1))' в общем случае не Moore Penrose псевдо-обратный к 'A'; кроме того, MATLAB поддерживает SVD на gpu. Чтобы дать вам разумный ответ, нам понадобится дополнительная информация: размер, ранг и другие свойства 'A', и именно то, к какому типу обобщенного обратного вам интересны. Обобщенные инверсии редко используются в линейной алгебре: проблема, которую вы пытаетесь решить путем вычисления обобщенного обратного к 'A', также может быть полезна. –

+0

afaik, MATLAB использует пакет MAGMA для некоторых своих операций на графическом процессоре. Ниже приведен список функций, поддерживаемых 'gpuArray': http://www.mathworks.com/help/distcomp/using-gpuarray.html#bsloua3-1 – Amro

+0

@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

ответ

5

В MATLAB R2013a, LU, QR и SVD все поддерживаются на gpu через gpuArray. Ниже приведен список поддерживаемых функций: http://www.mathworks.co.uk/help/distcomp/using-gpuarray.html#bsloua3-1. Функции линейной алгебры gpuArray реализованы с использованием MAGMA.

A\b может эффективно работать на графическом процессоре, см. Этот пример: http://www.mathworks.co.uk/help/distcomp/examples/benchmarking-a-b-on-the-gpu.html. По мере увеличения размера проблемы вы можете ожидать, что прилично мощный графический процессор (например, Tesla) будет работать в 5 раз быстрее, чем процессор.

+0

Спасибо. Я попробовал A \ eye на GPU, и это было на самом деле медленнее. Возможно, это потому, что я использую 2012b. Благодаря! – Gil

+1

Я бы не ожидал большой разницы в производительности для «A \ b» между R2012b и R2013a - ваш размер проблемы/оборудование графического процессора гораздо более вероятно будут важны. – Edric

0

Эта статья MATRIX INVERSION SPEED UP WITH CUDA может помочь:

АБСТРАКТНЫХ В этом проекте разрабатываются несколько математических алгоритмов для получения матричного метода инверсии - которая сочетает в себе параллельной архитектуру CUDA в и MATLAB - которые на самом деле быстрее, чем встроенная матричная функция MATLAB. Этот метод инверсии матрицы предназначен для использования для восстановления изображения как более быстрой альтернативы итерационным методам сопоставимого качества. Алгоритмы, разработанные в этом проекте, - это исключение Гаусса-Йордана, разложение Холецкого, гауссовское исключение и матричное умножение.