Умножение параллельной матрицы в MATLAB
-
26-10-2019 - |
Вопрос
Есть ли относительно простой в реализации или прозрачный способ умножения двух больших матриц в 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)
Решение
Matlab, вероятно, уже делает это через свою неявную поддержку многопоточного чтения. Видеть http://www.mathworks.com/support/solutions/en/data/1-4pg4an/?solution=1-4pg4an; Оператор. Тривиально параллелизируемые операции уже сделаны для вас Matlab; Просто запустите его на многоядерной машине.
Другие советы
Что вы имеете в виду под параллелью? Эти два подхода используют явную параллелизм, и оба требуют Параллельный набор инструментов для вычислений (Второе также требует способный 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