Параллельное матричное умножение в MATLAB - PullRequest
2 голосов
/ 30 ноября 2011

Существует ли относительно простой в реализации или прозрачный способ умножения двух больших матриц в Matlab параллельно?

В идеале я хотел бы выполнить это параллельное умножение, используя не более нескольких строк кода, возможно, что-то вроде:

    C_1 = A*B        % normal
    C_2 = pmult(A,B) % parallel
    % C_1 and C_2 have the same entries

Если есть способ легко выполнить это умножение паралелей, может кто-нибудь указать мне код? Если нет, есть ли у кого-нибудь идеи о том, что, по их мнению, является лучшим способом реализации алгоритма умножения параллельных матриц в Matlab?

Заранее спасибо, классное сообщество Stackoverflow.

РЕДАКТИРОВАТЬ - Я считаю, что часть проблемы, с которой я столкнулся, заключается в том, что умножение матриц для разреженных матриц не распараллеливается автоматически; оно автоматически распараллеливается для плотных матриц. Новый вопрос: может ли Matlab выполнять разреженное матричное умножение параллельно? (Распараллеливание процессора, поскольку у меня нет видеокарт с поддержкой CUDA)

Ответы [ 2 ]

6 голосов
/ 30 ноября 2011

Matlab, вероятно, уже делает это благодаря неявной поддержке многопоточности. См. http://www.mathworks.com/support/solutions/en/data/1-4PG4AN/?solution=1-4PG4AN; оператор "*". Тривиально распараллеливаемые операции уже сделаны для вас Matlab; просто запустите его на многоядерном компьютере.

3 голосов
/ 30 ноября 2011

Что вы подразумеваете под параллелью? Эти два подхода используют явный параллелизм, и оба требуют Parallel Computing Toolbox (второй также требует совместимый GPU ).

Вариант 1: параллелизм MPI

matlabpool open local
D = distributed.rand(2000); % distributed across workers of matlabpool
R = D * D; % mtimes overloaded to compute in parallel

Вариант 2: параллелизм графического процессора

G = gpuArray(rand(2000)); % place data on the GPU
G2 = G * G; % operate on it in parallel
...